2016-07-28 1 views
5

Я использую карты Google sdk iOS (Swift).Как «Показать текущее местоположение на Google Maps, когда я открываю ViewController?» в Свифт?

Кто-нибудь знает, как «показать свое текущее местоположение на картах Google, когда я открою ViewController»?

На самом деле это похоже на приложение Google Maps. Когда вы откроете Карты Google, синяя точка покажет ваше текущее местоположение. Вам не нужно нажимать «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() 
     } 
    } 
} 

Любой помочь? Спасибо огромное!

+0

этого достаточно для SHW текущего местоположения // GOOGLE MAPS SDK: COM PASS mapView.settings.compassButton = истина // GOOGLE MAPS SDK: МЕСТОПОЛОЖЕНИЯ ПОЛЬЗОВАТЕЛЯ mapView.myLocationEnabled = истина mapView.settings.myLocationButton = истинный –

+0

Да, это достаточно для показа текущего местоположения. Но могу ли я установить камеру в моем текущем местоположении? –

ответ

13

Для Swift решения 3.x, пожалуйста, проверьте этот Answer

Прежде всего вы должны ввести ключ в файле Info.plist NSLocationWhenInUseUsageDescription

enter image description here

После добавив этот ключ, просто введите переменную CLLocationManager и сделайте следующее:

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

} 

При запуске кода вы получите всплывающее окно «Разрешить» и «Не разрешать для местоположения». Просто нажмите «Разрешить», и вы увидите свое текущее местоположение.

Обязательно сделайте это на устройстве , а не на симуляторе. Если вы используете симулятор, вам нужно выбрать какое-то пользовательское местоположение, и тогда вы сможете увидеть синюю точку.

enter image description here

5

Используйте этот код,

Вы пропустите метод 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; 
    }); 

Метод Observer:

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

надеюсь, его полезной

3
  • сначала добавьте следующие строки в информации.PLIST

    1. NSLocationWhenInUseUsageDescription
    2. LSApplicationQueriesSchemes (тип массив и добавить два элемента этого массива элемент 0: googlechromes, Пункт 1: comgooglemaps
  • второй перейти к https://developers.google.com/maps/documentation/ios-sdk/start и следуйте Till Этап 5

  • Последнее, что нужно сделать после того, как вы настроили все, чтобы перейти к вашему ViewController и вставить f ollowing

    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)

теперь вы можете построить и запустить, чтобы увидеть ваше текущее местоположение на карте Google просто как при открытии Google Map App

наслаждаться кодирования :)

0
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!!!!" 
         } 
        } 
       } 
      } 
     } 
    } 
Смежные вопросы