1

Je travaille sur une application iPhone qui utilise l'API Google Maps et je rencontre des problèmes pour obtenir l'emplacement actuel de l'utilisateur, de sorte que la carte s'ouvre sur son emplacement.Problèmes d'obtention de l'emplacement de l'utilisateur à partir de CLLocationManager (API Google Maps)

J'ai passé quelques jours dessus maintenant et je me suis débarrassé des erreurs du compilateur, mais cela ne fonctionne toujours pas correctement. La carte apparaît, mais seulement aux coordonnées initiales que je fournis pour les variables long et lat. Je pense que cela a quelque chose à voir avec le CLLoationManager().

Mise à jour de l'emplacement sur le simulateur ne donne aucun résultat, et je me sens comme si je fais une erreur de débutant, je ne sais pas quoi. Et des suggestions?

import UIKit 
    import CoreLocation 
    import GoogleMaps 


class ViewController: UIViewController, CLLocationManagerDelegate { 

var long:Double = -0.13 
var lat:Double = 51.0 

let locationManager = CLLocationManager() 

override func loadView() { 
    // Create a GMSCameraPosition that tells the map to display the 

    //user location stuff 
    self.locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestAlwaysAuthorization() 
    locationManager.startUpdatingLocation() 


    let camera = GMSCameraPosition.camera(withLatitude: CLLocationDegrees(lat), longitude: CLLocationDegrees(long), zoom: 5.0) 
    let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera) 

    view = mapView 
    mapView.showUserLocation = true 
    // Creates a marker in the center of the map. 
    let marker = GMSMarker() 
    marker.position = CLLocationCoordinate2D(latitude: 51.51 , longitude: -0.13) 
    marker.title = "Test" 
    marker.snippet = "This is a test" 
    marker.map = mapView 
} 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { //i think this is the problem area 
    let userLocation = locations.last! 
    long = userLocation.coordinate.longitude 
    lat = userLocation.coordinate.latitude 

    self.locationManager.stopUpdatingLocation() 

} 
} 

Répondre

0

Lorsque vous obtenez l'emplacement de l'utilisateur, vous ne mettez pas à jour l'emplacement actuel de la carte. Vous devez faire quelque chose comme:

// property to store map view instead of just a local variable in loadView() 
var mapView: GMSMapView? 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { //i think this is the problem area 
    let userLocation = locations.last! 
    long = userLocation.coordinate.longitude 
    lat = userLocation.coordinate.latitude 

    let newCamera = GMSCameraPosition.camera(withLatitude: lat, longitude: long) 
    mapView.camera = newCamera 
    self.locationManager.stopUpdatingLocation() 

}