web-dev-qa-db-fra.com

Comment "Afficher ma position actuelle sur Google Maps lorsque j'ouvre ViewController?" à Swift?

J'utilise Google Maps SDK d'iOS (Swift).

Quelqu'un sait-il comment "Afficher ma position actuelle sur Google Maps lorsque j'ouvre ViewController"?

En fait, cela ressemble à Google Maps App. Lorsque vous ouvrez Google Maps, le point bleu indique votre position actuelle. Vous n'avez pas besoin d'appuyer sur "myLocationButton" lors de la première utilisation.

Donc, voici le 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'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()
        } 
    }
}

Quelqu'un aide? Merci beaucoup!

18
Eric Huang

Pour la solution Swift 3.x , veuillez vérifier ceci réponse

Vous devez d'abord tous entrer une clé dans le fichier Info.plist NSLocationWhenInUseUsageDescription

enter image description here

Après avoir ajouté cette clé, créez une variable CLLocationManager et procédez comme suit:

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

}

Lorsque vous exécutez le code, vous obtenez une fenêtre contextuelle Autoriser et Ne pas autoriser pour l'emplacement. Cliquez simplement sur Autoriser et vous verrez votre position actuelle.

Assurez-vous de le faire sur un périphérique plutôt que sur un simulateur. Si vous utilisez le simulateur, vous devez choisir un emplacement personnalisé et vous seul pourrez alors voir le point bleu.

enter image description here

34
Rajan Maheshwari

Utilisez ce code,

Vous manquez la méthode addObserver et du contenu,

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

Méthode d'observateur:

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

j'espère que c'est utile

11
Iyyappan Ravi
  • commencez par ajouter ce qui suit à votre info.plist

    1. NSLocationWhenInUseUsageDescription
    2. LSApplicationQueriesSchemes (de type array et ajoute deux éléments à ce tableau item 0: googlechromes, item 1: comgooglemaps
  • en second lieu à https://developers.google.com/maps/documentation/ios-sdk/start et suivez les étapes jusqu'à l'étape 5

  • la dernière chose à faire après avoir tout configuré est d’aller dans votre ViewController et de coller ce qui suit.

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

(n'oubliez pas d'ajouter une vue dans le storyboard et de la connecter au MapViw)

maintenant, vous pouvez créer et exécuter pour voir votre position actuelle sur la carte Google, tout comme lorsque vous ouvrez l'application Google Map.

profiter de la programmation :)

3
Neen