Google Maps iOS SDK, obteniendo la ubicación actual del usuario

Para mi aplicación de iOS ( iOS7 en iOS7 ), necesito mostrar la ubicación actual del usuario cuando se carga la aplicación. Estoy usando Google Maps iOS SDK . Estoy siguiendo este mapa de Google pero no puedo resolverlo. Por favor, ayuda si vas por el camino.

Parece que Google Maps iOS SDK no puede acceder a la posición del dispositivo. Por lo tanto, debe recuperar la posición utilizando CLLocationManager de iOS .

Primero, agregue el CoreLocation.framework a su proyecto:

  • Ir en Project Navigator
  • Seleccione su proyecto
  • Haga clic en la pestaña Build Phases
  • Agregue el CoreLocation.framework en el Link Binary with Libraries

Entonces, todo lo que necesita hacer es seguir el ejemplo básico de la documentación de Apple .

  • Cree un CLLocationManager probablemente en su ViewDidLoad :

     if (nil == locationManager) locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; //Configure Accuracy depending on your needs, default is kCLLocationAccuracyBest locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; // Set a movement threshold for new events. locationManager.distanceFilter = 500; // meters [locationManager startUpdatingLocation]; 

Con CLLocationManagerDelegate cada vez que se actualiza la posición, puede actualizar la posición del usuario en Google Maps :

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { // If it's a relatively recent event, turn off updates to save power. CLLocation* location = [locations lastObject]; NSDate* eventDate = location.timestamp; NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; if (abs(howRecent) < 15.0) { // Update your marker on your map using location.coordinate.latitude //and location.coordinate.longitude); } } 

Olvida mi respuesta anterior. Funciona bien si usa MapKit.framework nativo.

De hecho, GoogleMaps para iOS hace todo el trabajo por ti. No tiene que usar CoreLocation directamente.

Lo único que debe hacer es agregar yourMapView.myLocationEnabled = YES; y el marco hará todo. (Excepto centrar el mapa en su posición).

Lo que hice: simplemente seguí los pasos de la siguiente documentación . Y obtuve un mapa centrado en Sídney, pero si lo alejé y me mudé a mi lugar (si usa un dispositivo real, de lo contrario usaría las herramientas del simulador para centrarse en la ubicación de Apple), podría ver el punto azul en mi posición.

Ahora, si desea actualizar el mapa para seguir su posición, puede copiar el ejemplo de Google MyLocationViewController.m que se incluye en el directorio del marco. Simplemente agregan un observador en la propiedad myLocation para actualizar las propiedades de la cámara:

 @implementation MyLocationViewController { GMSMapView *mapView_; BOOL firstLocationUpdate_; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:12]; mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; mapView_.settings.compassButton = YES; mapView_.settings.myLocationButton = YES; // Listen to the myLocation property of GMSMapView. [mapView_ addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingOptionNew context:NULL]; self.view = mapView_; // Ask for My Location data after the map has already been added to the UI. dispatch_async(dispatch_get_main_queue(), ^{ mapView_.myLocationEnabled = YES; }); } - (void)dealloc { [mapView_ removeObserver:self forKeyPath:@"myLocation" context:NULL]; } #pragma mark - KVO updates - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (!firstLocationUpdate_) { // If the first location update has not yet been recieved, then jump to that // location. firstLocationUpdate_ = YES; CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey]; mapView_.camera = [GMSCameraPosition cameraWithTarget:location.coordinate zoom:14]; } } @end 

Con el documento que te di y las muestras incluidas en el marco, deberías poder hacer lo que quieras.

Xcode 8.1, Swift 3, Google Maps iOS 2.1

Receta paso a paso:

1.) Agregue una cadena clave a Info.plist (abrir como código fuente):

 NSLocationWhenInUseUsageDescription This app needs your location to function properly 

2.) Agregue CLLocationManagerDelegate a su clase de controlador de vista:

 class MapViewController: UIViewController, CLLocationManagerDelegate { ... } 

3.) Agregue CLLocationManager a su clase:

 var locationManager = CLLocationManager() var didFindMyLocation = false 

4.) Pedir permiso:

 override func viewDidLoad() { super.viewDidLoad() locationManager.delegate = self locationManager.requestWhenInUseAuthorization() ... } 

5.) Espere la autorización y habilite la ubicación:

 func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { if status == CLAuthorizationStatus.authorizedWhenInUse { yourMapView.isMyLocationEnabled = true } } 

6.) Agregar observable para el cambio de ubicación:

 override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if !didFindMyLocation { let myLocation: CLLocation = change![NSKeyValueChangeKey.newKey] as! CLLocation // do whatever you want here with the location yourMapView.camera = GMSCameraPosition.camera(withTarget: myLocation.coordinate, zoom: 10.0) yourMapView.settings.myLocationButton = true didFindMyLocation = true print("found location!") } } 

¡Eso es!

En cualquier dispositivo iOS, obtenga la ubicación del usuario con Core Location . Específicamente, desea la clase CLLocation (y CLLocationManager).

¿El método delegate didTapMyLocationButton no es el camino?

https://developers.google.com/maps/documentation/ios/reference/protocol_g_m_s_map_view_delegate-p#ac0e0171b811e839d9021800ca9fd33f4

 - (BOOL)didTapMyLocationButtonForMapView:(GMSMapView *)mapView { return YES; } 

Y puedes obtener ubicación por

 (lldb) po mapView.myLocation < +37.33243033,-122.03088128> +/- 386.93m (speed -1.00 mps / course -1.00) @ 5/19/14, 6:22:28 PM Moscow Standard Time 

La ubicación actual no se mostrará en el simulador … conecte un dispositivo real y pruébelo Pasé 2 días corriendo en el simulador y no sé que no simula ubicaciones

hay muchos métodos … Usé este método y funciona en todos los casos. Google le brinda todo con la respuesta en formato json y le explica cómo maneja esos datos.

Algunos pasos están ahí para cargar google map en su proyecto.

  1. encuentre la clave de la API en este enlace https://developers.google.com/places/ios-api/ inicie sesión con su cuenta de Google y agregue su proyecto y cree una clave ios. luego usa esto en tu proyecto

  2. habilitar toda la API necesaria para el mapa de google

a-googlemaps sdk para ios b-googlemap dirección api c- “” javasripts api d- selector api e-places api para ios f matriz de distancia api

en el método appdelegate …

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [GMSServices provideAPIKey:@"xxxxxxxx4rilCeZeUhPORXWNJVpUoxxxxxxxx"]; return YES; } 
  1. agregue todas las bibliotecas y marcos necesarios en su proyecto si el mapa de Google no funciona, significa que tiene que agregar el marco requerido todo el mejor juego con el mapa de google