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!
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
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.
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
commencez par ajouter ce qui suit à votre info.plist
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 :)