How to show my current location on google maps when I open ViewController? "to Swift?

I am using google sdk maps of iOS (Swift).

Does anyone know how to "Show current location on Google maps when I open ViewController"?

In fact, this is similar to the Google Maps application. When you open Google Maps, a blue dot will show your current location. You do not need to click "myLocationButton" first.

So this is the code:

import UIKit import CoreLocation import GoogleMaps class GoogleMapsViewer: UIViewController { @IBOutlet weak var mapView: GMSMapView! let locationManager = CLLocationManager() let didFindMyLocation = false override func viewDidLoad() { super.viewDidLoad() let camera = GMSCameraPosition.cameraWithLatitude(23.931735,longitude: 121.082711, zoom: 7) let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) mapView.myLocationEnabled = true self.view = mapView // GOOGLE MAPS SDK: BORDER let mapInsets = UIEdgeInsets(top: 80.0, left: 0.0, bottom: 45.0, right: 0.0) mapView.padding = mapInsets locationManager.distanceFilter = 100 locationManager.delegate = self locationManager.requestWhenInUseAuthorization() // GOOGLE MAPS SDK: COMPASS mapView.settings.compassButton = true // GOOGLE MAPS SDK: USER LOCATION mapView.myLocationEnabled = true mapView.settings.myLocationButton = true } } // MARK: - CLLocationManagerDelegate extension GoogleMapsViewer: CLLocationManagerDelegate { func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) { if status == .AuthorizedWhenInUse { locationManager.startUpdatingLocation() mapView.myLocationEnabled = true mapView.settings.myLocationButton = true } } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { if let location = locations.first { mapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 20, bearing: 0, viewingAngle: 0) locationManager.stopUpdatingLocation() } } } 

Anyone help? Thank you very much!

+5
source share
4 answers

To solve Swift 3.x , please check the Answer

First you need to enter the key in the Info.plist NSLocationWhenInUseUsageDescription file

enter image description here

After adding this key, just create the CLLocationManager variable and follow these steps

 @IBOutlet weak var mapView: GMSMapView! var locationManager = CLLocationManager() class YourControllerClass: UIViewController,CLLocationManagerDelegate { //Your map initiation code let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) self.view = mapView self.mapView?.myLocationEnabled = true //Location Manager code to fetch current location self.locationManager.delegate = self self.locationManager.startUpdatingLocation() } //Location Manager delegates func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let location = locations.last let camera = GMSCameraPosition.cameraWithLatitude((location?.coordinate.latitude)!, longitude: (location?.coordinate.longitude)!, zoom: 17.0) self.mapView?.animateToCameraPosition(camera) //Finally stop updating location otherwise it will come again and again in this delegate self.locationManager.stopUpdatingLocation() } 

When you run the code, you will get a "Allow" and "Do not allow for location" pop-ups. Just click "Allow" and you will see your current location.

Be sure to do it on the device , not on the simulator. If you use a simulator, you need to select some kind of custom location, and only then can you see the blue dot.

enter image description here

+16
source

Use this code,

You will skip the addObserver method and some content,

viewDidLoad :

 mapView.settings.compassButton = YES; mapView.settings.myLocationButton = YES; mapView.addObserver(self, forKeyPath: "myLocation", options: .New, context: nil) dispatch_async(dispatch_get_main_queue(), ^{ mapView.myLocationEnabled = YES; }); 

Observer Method:

 override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { if change[NSKeyValueChangeOldKey] == nil { let location = change[NSKeyValueChangeNewKey] as CLLocation gmsMap.camera = GMSCameraPosition.cameraWithTarget(location.coordinate, zoom: 16) } } 

hope it will be useful

+5
source
  • first add the following to your info.plist

    • NSLocationWhenInUseUsageDescription
    • LSApplicationQueriesSchemes (an array of type and add two elements to this array item 0: googlechromes, item 1: comgooglemaps
  • go to https://developers.google.com/maps/documentation/ios-sdk/start and follow the steps to step 5

  • The last thing to do after you configure everything in order to go to your ViewController and insert the following

     import UIKit import GoogleMaps class ViewController: UIViewController,CLLocationManagerDelegate { //Outlets @IBOutlet var MapView: GMSMapView! //Variables var locationManager = CLLocationManager() override func viewDidLoad() { super.viewDidLoad() initializeTheLocationManager() self.MapView.isMyLocationEnabled = true } func initializeTheLocationManager() { locationManager.delegate = self locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { var location = locationManager.location?.coordinate cameraMoveToLocation(toLocation: location) } func cameraMoveToLocation(toLocation: CLLocationCoordinate2D?) { if toLocation != nil { MapView.camera = GMSCameraPosition.camera(withTarget: toLocation!, zoom: 15) } } } 

(do not forget to add the view to the storyboard and connect it to MapViw)

you can now create and run to see your current location on a Google map in the same way as when you open the Google Map application

enjoy coding :)

+3
source
 import UIKit import GoogleMaps import GooglePlaces import CoreLocation class ViewController: UIViewController,CLLocationManagerDelegate,GMSMapViewDelegate { @IBOutlet weak var currentlocationlbl: UILabel! var mapView:GMSMapView! var locationManager:CLLocationManager! = CLLocationManager.init() var geoCoder:GMSGeocoder! var marker:GMSMarker! var initialcameraposition:GMSCameraPosition! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.mapView = GMSMapView() self.geoCoder = GMSGeocoder() self.marker = GMSMarker() self.initialcameraposition = GMSCameraPosition() // Create gms map view-------------> mapView.frame = CGRect(x: 0, y: 150, width: 414, height: 667) mapView.delegate = self mapView.isMyLocationEnabled = true mapView.isBuildingsEnabled = false mapView.isTrafficEnabled = false self.view.addSubview(mapView) // create cureent location label----------> self.currentlocationlbl.lineBreakMode = NSLineBreakMode.byWordWrapping self.currentlocationlbl.numberOfLines = 3 self.currentlocationlbl.text = "Fetching address.........!!!!!" locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation if locationManager.responds(to: #selector(CLLocationManager.requestAlwaysAuthorization)) { self.locationManager.requestAlwaysAuthorization() } self.locationManager.startUpdatingLocation() if #available(iOS 9, *) { self.locationManager.allowsBackgroundLocationUpdates = true } else { //fallback earlier version } self.locationManager.startUpdatingLocation() self.marker.title = "Current Location" self.marker.map = self.mapView // Gps button add mapview let gpbtn:UIButton! = UIButton.init() gpbtn.frame = CGRect(x: 374, y: 500, width: 40, height: 40) gpbtn.addTarget(self, action: #selector(gpsAction), for: .touchUpInside) gpbtn.setImage(UIImage(named:"gps.jpg"), for: .normal) self.mapView.addSubview(gpbtn) } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { var location123 = CLLocation() location123 = locations[0] let coordinate:CLLocationCoordinate2D! = CLLocationCoordinate2DMake(location123.coordinate.latitude, location123.coordinate.longitude) let camera = GMSCameraPosition.camera(withTarget: coordinate, zoom: 16.0) self.mapView.camera = camera self.initialcameraposition = camera self.marker.position = coordinate self.locationManager.stopUpdatingLocation() } func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { self.currentAddres(position.target) } func currentAddres(_ coordinate:CLLocationCoordinate2D) -> Void { geoCoder.reverseGeocodeCoordinate(coordinate) { (response, error) in if error == nil { if response != nil { let address:GMSAddress! = response!.firstResult() if address != nil { let addressArray:NSArray! = address.lines! as NSArray if addressArray.count > 1 { var convertAddress:AnyObject! = addressArray.object(at: 0) as AnyObject! let space = "," let convertAddress1:AnyObject! = addressArray.object(at: 1) as AnyObject! let country:AnyObject! = address.country as AnyObject! convertAddress = (((convertAddress.appending(space) + (convertAddress1 as! String)) + space) + (country as! String)) as AnyObject self.currentlocationlbl.text = "\(convertAddress!)".appending(".") } else { self.currentlocationlbl.text = "Fetching current location failure!!!!" } } } } } } 
0
source

All Articles