Thursday, February 23, 2017

Google Maps zoom out to GPS and markers

Leave a Comment

I am trying to show three things on map : GPS (the current location) , Marker 1 , Marker 2, but I am not sure I am doing it right or not ! Here is my code :

 self.startMarker.position = CLLocationCoordinate2D(latitude: self.startLatitude, longitude: self.startLongitude)  self.startMarker.icon = #imageLiteral(resourceName: "Pin Start")  self.startMarker.map = self.mapView    self.endMarker.position = CLLocationCoordinate2D(latitude: self.endLatitude, longitude: self.endLongitude)  self.endMarker.icon = #imageLiteral(resourceName: "Pin End")  self.endMarker.map = self.mapView    let southWest = CLLocationCoordinate2DMake(self.startLatitude,self.startLongitude)  let northEast = CLLocationCoordinate2DMake(self.endLatitude,self.endLongitude)  let bounds = GMSCoordinateBounds(coordinate: northEast, coordinate: southWest)  let camera = self.mapView.camera(for: bounds, insets:.zero)  self.mapView.camera = camera! 

More Code :

  // MARK: - Google Map  private func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {             if status == CLAuthorizationStatus.authorizedWhenInUse {                 mapView.isMyLocationEnabled = true             }           } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {             let newLocation = locations.last             mapView.camera = GMSCameraPosition.camera(withTarget: newLocation!.coordinate, zoom: 14)             mapView.isMyLocationEnabled = true         } 

The result is like this :

it show only the start pin

What I need :

enter image description here

EDITED

if let myLocation = self.mapView.myLocation {  let path = GMSMutablePath() path.add(myLocation.coordinate) path.add(self.startMarker.position) path.add(self.endMarker.position)  let bounds = GMSCoordinateBounds(path: path)                                         self.mapView.animate(with: GMSCameraUpdate.fit(bounds, withPadding: 40)) 

}

3 Answers

Answers 1

Showing All Markers with screen bound:

Here I am trying to provide you one simple example, hope this will help you. Using this, you can show any number of markers on screen.

Example:

let path = GMSMutablePath() for var i in 0 ..< array.count {     let lat = Double(array.objectAtIndex(i).valueForKey(lattitude) as! String)     let long = Double(arrayr.objectAtIndex(i).valueForKey(longitude) as! String)           marker.position = CLLocationCoordinate2DMake(lat!,long!)     path.addCoordinate(marker.position)     marker.map = self.mapView } let bounds = GMSCoordinateBounds(path: path) self.mapView!.animateWithCameraUpdate(GMSCameraUpdate.fitBounds(bounds, withPadding: 30.0)) 

Answers 2

Can you try the below code, this is converted from ObjC code here is the documentation of includingCoordinate

let bounds = GMSCoordinateBounds() bounds.includingCoordinate(self.startMarker.position) bounds.includingCoordinate(self.endMarker.position) bounds.includingCoordinate(yourCurrentLocationPosition) self.mapView.animateWithCameraUpdate(GMSCameraUpdate(fitBounds:bounds, padding:20.0f)) 

Answers 3

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {     showMarkers(locations)     //stop updating location when you find suitable }  func showMarkers(userLocation: [CLLocation]){      let location1: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: self.startLatitude, longitude: self.startLongitude)     let location2: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: self.endLatitude, longitude: self.endLongitude)     let location3: CLLocationCoordinate2D = userLocation[0].coordinate      var locationArray = []     locationArray.append(location1)     locationArray.append(location2)     locationArray.append(location3)      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) } 

Note:

locationArray contains three locations ie. Marker 1, Marker 2, user location.

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment