tutorial objective icon google gmsmarker change ios google-maps google-maps-sdk-ios

objective - iOS, ¿Cómo usar GMSCoordinateBounds para mostrar todos los marcadores del mapa?



maps swift 3 (9)

Quiero mostrar todos los marcadores que están en mi mapa, después de hacer algunas búsquedas encontré que debería hacerse con GMSCoordinateBounds (Google Maps SDK) He leído la documentación oficial al respecto, pero no he entendido cómo usarlo e implementarlo en mi código.

https://developers.google.com/maps/documentation/ios/reference/interface_g_m_s_camera_update#aa5b05606808272f9054c54af6830df3e

Aquí está mi código

GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] init]; CLLocationCoordinate2D location; for (NSDictionary *dictionary in array) { location.latitude = [dictionary[@"latitude"] floatValue]; location.longitude = [dictionary[@"longitude"] floatValue]; // Creates a marker in the center of the map. GMSMarker *marker = [[GMSMarker alloc] init]; marker.icon = [UIImage imageNamed:(@"marker.png")]; marker.position = CLLocationCoordinate2DMake(location.latitude, location.longitude); bounds = [bounds includingCoordinate:marker.position]; marker.title = dictionary[@"type"]; marker.map = mapView_; } [mapView_ animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:30.0f]];

Alguna ayuda ?


En cuanto a la versión 2.0.0 de Google Maps, si intentas crear un GMSCoordinateBounds utilizando el constructor predeterminado GMSCoordinateBounds () y verificas el indicador "válido", devolverá falso y no hará que el archivo animateWithCameraUpdate: se mueva.

Solución Swift 2.3

if let myLocation = mapView.myLocation { let path = GMSMutablePath() path.addCoordinate(myLocation.coordinate) //add other coordinates //path.addCoordinate(model.coordinate) let bounds = GMSCoordinateBounds(path: path) mapView.animateWithCameraUpdate(GMSCameraUpdate.fitBounds(bounds, withPadding: 40)) }


La forma más fácil que he encontrado es crear un GMSMutablePath y luego agregarle todas las coordenadas de sus marcadores. Luego puede usar el inicializador GMSCoordinateBounds initWithPath: para crear los límites.

Una vez que tenga los límites, puede crear GMSCameraUpdate y usarlo para animar el mapa a los límites visibles que contienen todos sus marcadores.

Por ejemplo, si tiene una matriz de GMSMarker:

NSArray *myMarkers; // array of marker which sets in Mapview GMSMutablePath *path = [GMSMutablePath path]; for (GMSMarker *marker in myMarkers) { [path addCoordinate: marker.position]; } GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithPath:path]; [_mapView animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds]];


Podemos encontrar el mismo código en todas partes , pero asegúrese de que esté en el método viewDidAppear ()

//bounding to a region of markers GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:sourceMarker.position coordinate:destMarker.position]; [_mapView moveCamera:[GMSCameraUpdate fitBounds:bounds withPadding:50.0]];


Puede repetir sus marcadores de mapa y obtener el punto adicional hacia el este, oeste, norte y sur y hacer que [[GMSCoordinateBounds alloc] initWithRegion:]


Solución Swift usando GMSCoordinateBounds() sin ruta,

var bounds = GMSCoordinateBounds() for location in locationArray { let latitude = location.valueForKey("latitude") let longitude = location.valueForKey("longitude") let marker = GMSMarker() marker.position = CLLocationCoordinate2D(latitude:latitude, longitude:longitude) marker.map = self.mapView bounds = bounds.includingCoordinate(marker.position) } let update = GMSCameraUpdate.fitBounds(bounds, withPadding: 100) mapView.animateWithCameraUpdate(update)


Versión limpia rápida 3 :

let bounds = markers.reduce(GMSCoordinateBounds()) { $0.includingCoordinate($1.position) } mapView.animate(with: .fit(bounds, withPadding: 30.0))


Swift 3 - Xcode 8

var bounds = GMSCoordinateBounds() for marker in yourArrayOfMarkers { bounds = bounds.includingCoordinate(marker.position) } let update = GMSCameraUpdate.fit(bounds, withPadding: 60) mapView.animate(with: update)


- (void)focusMapToShowAllMarkers { GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] init]; for (GMSMarker *marker in <An array of your markers>) bounds = [bounds includingCoordinate:marker.position]; [<yourMap> animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:30.0f]]; }

ACTUALIZAR:

¿Estás seguro de que no hay nada de malo en tu conjunto de marcadores y las coordenadas? He intentado este código y está funcionando perfectamente. He puesto esto en el viewDidAppear

NSMutableArray *array = [[NSMutableArray alloc]initWithObjects:[[NSDictionary alloc]initWithObjectsAndKeys:@"44.66",@"latitude",@"21.33",@"longitude", nil], [[NSDictionary alloc]initWithObjectsAndKeys:@"44.66",@"latitude",@"21.453",@"longitude", nil], [[NSDictionary alloc]initWithObjectsAndKeys:@"44.44",@"latitude",@"21.993",@"longitude", nil], [[NSDictionary alloc]initWithObjectsAndKeys:@"44.635",@"latitude",@"21.553",@"longitude", nil], [[NSDictionary alloc]initWithObjectsAndKeys:@"44.3546",@"latitude",@"21.663",@"longitude", nil], [[NSDictionary alloc]initWithObjectsAndKeys:@"44.6643",@"latitude",@"21.212",@"longitude", nil], [[NSDictionary alloc]initWithObjectsAndKeys:@"44.63466",@"latitude",@"21.3523",@"longitude", nil],nil]; GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] init]; CLLocationCoordinate2D location; for (NSDictionary *dictionary in array) { location.latitude = [dictionary[@"latitude"] floatValue]; location.longitude = [dictionary[@"longitude"] floatValue]; // Creates a marker in the center of the map. GMSMarker *marker = [[GMSMarker alloc] init]; marker.icon = [UIImage imageNamed:(@"marker.png")]; marker.position = CLLocationCoordinate2DMake(location.latitude, location.longitude); bounds = [bounds includingCoordinate:marker.position]; marker.title = dictionary[@"type"]; marker.map = mapView_; } [mapView_ animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:30.0f]];

Este es mi resultado:


@IBOutlet weak var mapView: GMSMapView! let camera = GMSCameraPosition.cameraWithLatitude(23.0793, longitude: 72.4957, zoom: 5) mapView.camera = camera mapView.delegate = self mapView.myLocationEnabled = true *** arry has dictionary object which has value of Latitude and Longitude. *** let path = GMSMutablePath() for i in 0..<arry.count { let dict = arry[i] as! [String:AnyObject] let latTemp = dict["latitude"] as! Double let longTemp = dict["longitude"] as! Double let marker = GMSMarker() marker.position = CLLocationCoordinate2D(latitude: latTemp, longitude: longTemp) marker.title = "Austrilia" marker.appearAnimation = kGMSMarkerAnimationNone marker.map = self.mapView path.addCoordinate(CLLocationCoordinate2DMake(latTemp, longTemp)) } let bounds = GMSCoordinateBounds(path: path) self.mapView!.animateWithCameraUpdate(GMSCameraUpdate.fitBounds(bounds, withPadding: 50.0))