Coordenadas de ubicación del usuario actual de iPhone que muestran como (0,0)

votos
8

Estoy tratando de obtener la latitud y la longitud actual de los usuarios con este método viewDidLoad. El mapa resultante indica correctamente la ubicación actual, sin embargo, el NSLog muestra constantemente:

2009-09-19 16:45:29.765 Mapper[671:207] user latitude = 0.000000
2009-09-19 16:45:29.772 Mapper[671:207] user longitude = 0.000000

¿Alguien sabe lo que me falta aquí? ¡Gracias de antemano por tu ayuda!

- (void)viewDidLoad {
    [super viewDidLoad];
    [mapView setMapType:MKMapTypeStandard];
    [mapView setZoomEnabled:YES];
    [mapView setScrollEnabled:YES];
    [mapView setShowsUserLocation:YES];

    CLLocation *userLoc = mapView.userLocation.location;
    CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

    NSLog(@user latitude = %f,userCoordinate.latitude);
    NSLog(@user longitude = %f,userCoordinate.longitude);
}
Publicado el 19/09/2009 a las 21:50
fuente por usuario
En otros idiomas...                            


8 respuestas

votos
9

El mapa no intentará obtener la ubicación de los usuarios hasta que realmente se muestre, hasta donde yo sé. Una buena prueba de esto es, ¿cuándo aparece el cuadro de diálogo preguntándole si está bien que la aplicación obtenga la ubicación de los usuarios? En mi experiencia, eso siempre ha surgido solo después de que el mapa se muestra en la pantalla.

La mejor manera de abordar este problema si debe tener una ubicación al inicio es implementar el código de controlador de ubicación central clásico y obtener la ubicación desde el principio. Puede dejar de recibir actualizaciones una vez que el mapa esté activo y obtener más cambios a partir de allí (aunque si necesita actualizaciones constantes, es mejor que se quede con las actualizaciones estándar de Core Location. Si lo piensa bien, cuando tenga "shows user") ubicación "habilitada en el mapa El uso adicional de la ubicación central por parte de su aplicación es esencialmente gratuito, ya que el GPS se activará todo el tiempo de todos modos.

Respondida el 20/09/2009 a las 03:05
fuente por usuario

votos
4

Si intenta obtener coordenadas de usuario en el método viewDidLoad (), siempre dará 0,0 resultado, porque aún no se ha inicializado.

Debería echarle un vistazo al código de ejemplo "Dónde estoy" del sitio de Apple. Explica lo que necesitas. Necesita usar la clase CLLocationManager . También necesitarás el método

*-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation*

Este método se invocará automáticamente cada vez que se actualice la ubicación del usuario. Si está utilizando un simulador, este método se invocará solo una vez y devolverá algunas coordenadas predeterminadas.

Espero eso ayude.

Respondida el 21/09/2009 a las 06:36
fuente por usuario

votos
2

Del documento sobre CLLocation , si la precisión horizontal o la precisión vertical es negativa, significa que no puede encontrar un valor. Sospecho que eso es lo que está sucediendo aquí. Tenga en cuenta que si solo mira una vez, puede darle una última ubicación conocida aproximada antes de mejorar el resultado de precisión.

Precisión horizontal La latitud y la longitud de la coordenada identifican el centro del círculo y este valor indica el radio de ese círculo. Un valor negativo indica que la latitud y la longitud de la coordenada no son válidas.

Respondida el 19/09/2009 a las 21:55
fuente por usuario

votos
1

Como Kendall dijo, el MKMapView no tiene una ubicación de usuario hasta que se termina de cargar, y el método viewDidLoad suele ser demasiado pronto para que lo solicite. Una forma más sencilla de utilizar CoreLocation es poner en práctica el método MKMapViewDelegate -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation. Se le dará la ubicación del usuario tan pronto como se encuentra, sin tener que lidiar con un CLLocationManager.

Respondida el 08/01/2013 a las 18:33
fuente por usuario

votos
1

Debería obtener la coordenada de CoreLocation en lugar de MapKit. MapView mostrará la ubicación del usuario después de que realmente tenga la ubicación actual. Antes de que se determine la ubicación, la latitud y la longitud se establecen en 0. 3

Debe crear un instalador CLLocationManager, establecer delegado. Se le notificará cuando se determine la ubicación.

Respondida el 20/09/2009 a las 06:17
fuente por usuario

votos
0

Pruebe esto en

CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;

NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);

ViewdidAppear: o llame al realizar seletor después de un retraso

Respondida el 05/05/2014 a las 12:32
fuente por usuario

votos
0

Esta respuesta se explica cómo configurar una vista de mapa con una ubicación de usuario:

HowTo inicializar MKMapView con un lugar determinado usuario?

Respondida el 09/03/2010 a las 16:52
fuente por usuario

votos
-1

Agregue esto a su sección viewDidLoad

mapView.showsUserLocation = YES;
Respondida el 02/05/2010 a las 05:56
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more