How to fit bounds for coordinate array with google maps sdk for iOS? I need to zoom map for 4 visible markers.
The Maps SDK for iOS uses a pay-as-you-go pricing model.
Type the name of a location or address. This displays a list of matching search results from Google Maps below the search bar at the top. Alternatively, you can tap the blue plus (+) icon in the lower-right corner of the map. Then tap Add new point. Drag the marker on the map to where you want to add a marker.
Here's my solution for this problem. Building a GMSCoordinateBounds
object by multiple coordinates.
- (void)focusMapToShowAllMarkers { CLLocationCoordinate2D myLocation = ((GMSMarker *)_markers.firstObject).position; GMSCoordinateBounds *bounds = [[GMSCoordinateBounds alloc] initWithCoordinate:myLocation coordinate:myLocation]; for (GMSMarker *marker in _markers) bounds = [bounds includingCoordinate:marker.position]; [_mapView animateWithCameraUpdate:[GMSCameraUpdate fitBounds:bounds withPadding:15.0f]]; }
Updated answer: Since GMSMapView
markers property is deprecated, you should save all markers in your own array.
updated swift 3 answer:
func focusMapToShowAllMarkers() { let firstLocation = (markers.first as GMSMarker).position var bounds = GMSCoordinateBoundsWithCoordinate(firstLocation, coordinate: firstLocation) for marker in markers { bounds = bounds.includingCoordinate(marker.position) } let update = GMSCameraUpdate.fitBounds(bounds, withPadding: CGFloat(15)) self.mapView.animate(cameraUpdate: update) }
Swift 3.0 version of Lirik's answer:
func focusMapToShowAllMarkers() { let myLocation: CLLocationCoordinate2D = self.markers.first!.position var bounds: GMSCoordinateBounds = GMSCoordinateBounds(coordinate: myLocation, coordinate: myLocation) for marker in self.markers { bounds = bounds.includingCoordinate(marker.position) self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 15.0)) } }
And here's my own way:
func focusMapToShowMarkers(markers: [GMSMarker]) { guard let currentUserLocation = self.locationManager.location?.coordinate else { return } var bounds: GMSCoordinateBounds = GMSCoordinateBounds(coordinate: currentUserLocation, coordinate: currentUserLocation) _ = markers.map { bounds = bounds.includingCoordinate($0.position) self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 15.0)) } }
And you can call my function above like so:
self.focusMapToShowMarkers(markers: [self.myLocationMarker, currentPokemonMarker])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With