iPhone attuale posizione dell'utente coordinate che mostra come (0,0)

voti
8

Sto cercando di ottenere gli utenti latitudine e la longitudine con questo metodo viewDidLoad. La mappa risultante è correttamente indica la posizione corrente tuttavia la NSLog mostra costantemente:

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

Qualcuno sa che cosa mi manca qui? Grazie in anticipo per il vostro aiuto!

- (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);
}
È pubblicato 19/09/2009 alle 21:50
fonte dall'utente
In altre lingue...                            


8 risposte

voti
9

La mappa non cercherà di ottenere la posizione degli utenti fino a quando è effettivamente visualizzato, per quanto ne so. Una buona prova di ciò è, quando si fa a ottenere la finestra di dialogo che chiede se va bene per l'applicazione per ottenere la posizione degli utenti? Nella mia esperienza che ha sempre messo a punto solo dopo che la mappa mostra sullo schermo.

Il modo migliore per affrontare questo problema se è necessario disporre di una posizione all'avvio, è quello di implementare il classico codice Core Location conduttore e ottenere la posizione da quella inizialmente. Si può smettere di ricevere gli aggiornamenti da lì una volta che la mappa è e ottenere ulteriori modifiche da lì (anche se avete bisogno di aggiornamenti costanti si sta meglio solo mantenendo con gli aggiornamenti normali Core Location. Se ci pensate, quando si dispone di "mostra utente posizione" abilitato nella mappa ulteriore utilizzo di core Location per la vostra applicazione è essenzialmente libero dal momento che il GPS sarà licenziato per tutto il tempo in ogni caso.

Risposto il 20/09/2009 a 03:05
fonte dall'utente

voti
4

Se si tenta di ottenere coordinate utente in viewDidLoad metodo (), sarà sempre dare 0,0 risultato, perché non è ancora inizializzato.

Si dovrebbe dare un'occhiata a "Dove mi trovo" sito sotto forma di codice di esempio di Apple. Spiega che cosa avete bisogno. È necessario utilizzare CLLocationManager classe. Sarà inoltre necessario il metodo

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

Questo metodo verrà chiamato automaticamente ogni volta quando posizione dell'utente viene aggiornata. Se si utilizza il simulatore, allora questo metodo sarà chiamato una sola volta e tornerà alcune coordinate di default.

Spero che sia d'aiuto.

Risposto il 21/09/2009 a 06:36
fonte dall'utente

voti
2

Dal documento su CLLocation , se la precisione orizzontale o precisione verticale è negativa, significa che non può trovare un valore. Ho il sospetto che è quello che sta accadendo qui. Tenete a mente che se si guarda una volta, si può dare una ultima posizione approssimativa conosciuta prima di migliorare sempre il risultato precisione.

Precisione orizzontale La latitudine e la longitudine di coordinate identificare il centro del cerchio e questo valore indica il raggio di quel cerchio. Un valore negativo indica che la latitudine e la longitudine di coordinate non sono validi.

Risposto il 19/09/2009 a 21:55
fonte dall'utente

voti
1

Come Kendall ha detto, il MKMapView non ha una posizione utente fino a termine del caricamento, e il metodo viewDidLoad è di solito troppo presto per farne richiesta. Un modo più semplice rispetto all'utilizzo CoreLocation è quello di implementare il metodo MKMapViewDelegate -(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation. Essa vi darà la posizione dell'utente non appena si trova, senza avere a che fare con un CLLocationManager.

Risposto il 08/01/2013 a 18:33
fonte dall'utente

voti
1

Si dovrebbe ottenere la coordinata dal CoreLocation invece di MapKit. MapView visualizzerà la posizione dell'utente dopo che in realtà ha posizione corrente. Prima che la posizione è determinata, la latitudine e la longitudine sono entrambe impostate su 0. 3

È necessario creare un instace CLLocationManager, impostare delegato. Riceverai una notifica quando la posizione è determinata.

Risposto il 20/09/2009 a 06:17
fonte dall'utente

voti
0

Prova questo in

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

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

ViewDidAppear: o telefonare eseguire seletor dopo il ritardo

Risposto il 05/05/2014 a 12:32
fonte dall'utente

voti
0

Questa risposta spiega come impostare un guarda la mappa con una posizione utente:

HowTo inizializzare MKMapView con una data posizione dell'utente?

Risposto il 09/03/2010 a 16:52
fonte dall'utente

voti
-1

Aggiungi questo alla vostra sezione viewDidLoad

mapView.showsUserLocation = YES;
Risposto il 02/05/2010 a 05:56
fonte dall'utente

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