如何“在谷歌地图上显示我当前的位置,当我打开ViewController?”在Swift?

我使用iOS(Swift)的Google maps sdk。

有谁知道如何“显示我的当前位置在谷歌地图,当我打开ViewController”?

其实它就像谷歌地图应用程序。 当您打开Goog​​le地图时,蓝色地点会显示您的当前位置。 您不需要第一次按“myLocationButton”。

所以这是代码:

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'S 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() } } } 

任何人帮助? 非常感谢!

对于Swift 3.x解决scheme,请查看本答复

首先你要在Info.plist文件NSLocationWhenInUseUsageDescriptioninput一个密钥

在这里输入图像说明

添加这个键之后,只需创build一个CLLocationManagervariables并执行以下操作

 @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() } 

当你运行代码时,你会popup一个允许和不允许的位置。 只需点击允许,你会看到你的当前位置。

确保在设备上而不是模拟器上执行此操作。 如果你正在使用模拟器,你必须select一些自定义的位置,然后只有你将能够看到蓝点。

在这里输入图像说明

使用这个代码,

你错过了addObserver方法和一些内容,

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; }); 

观察者方法:

 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) } } 

希望它有帮助

  • 首先将以下添加到您的info.plist

    1. NSLocationWhenInUseUsageDescription
    2. LSApplicationQueriesSchemes(的types数组,并将两个项目添加到此数组项目0:googlechromes,项目1:comgooglemaps
  • 然后转到https://developers.google.com/maps/documentation/ios-sdk/start并按照步骤操作,直到步骤5

  • 设置完所有东西之后要做的最后一件事就是去你的ViewController并粘贴以下内容

     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) } } } 

(不要忘记在故事板中添加一个视图并将其连接到MapViw)

现在您可以构build并运行,以便像在打开Goog​​le地图应用程序时一样在Google地图上查看您的当前位置

享受编码:)

 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!!!!" } } } } } }