2011-04-05 13 views
5

Questa è la prima volta che faccio una domanda qui, ma ho trovato molto aiuto dalle domande degli altri.Ordine degli oggetti CLLocation in -distanceFromLocation:

La mia domanda si riferisce alla funzione -distanceFromLocation: in CLLocation. Avevo pensato che trovare la distanza tra il punto A e il punto B sarebbe lo stesso di quello tra il punto B e il punto A, ma ho scoperto che non lo è. Ho testato questo in un caso molto semplice:

CLLocation *test1 = [[CLLocation alloc] initWithLatitude:37.529530 longitude:-122.259232]; 
CLLocation *test2 = [[CLLocation alloc] initWithLatitude:47.900002 longitude:-103.495102]; 
NSLog(@"%f vs %f",[test2 distanceFromLocation:test1],[test1 distanceFromLocation:test2]); 
[test1 release]; 
[test2 release]; 

L'uscita di questo era 1907269,942,754 mila vs 1908105,959,114 mila, con una differenza di quasi 900 metri.

Anche se 900 metri possono essere una piccola percentuale, sto provando a determinare se l'utente è più vicino a qualcosa di un'annotazione e 900 metri possono cambiarlo.

La mia domanda è, quale di questi valori, se presente, è corretto? Inoltre, se il luogo in cui sono confrontato è importante, è necessario testare sempre la stessa posizione (ad esempio, da utente a destinazione e annotazione a destinazione anziché destinazione per utente e annotazione a destinazione)?

Spiacente che il campione sia un po 'fuori contesto, dato che il mio progetto è piuttosto grande e questo illustra il mio problema. Qualsiasi aiuto sarebbe apprezzato in quanto ciò mi ha causato un po 'di confusione e frustrazione.

risposta

1

L'errore che si sta osservando è 1 parte nel 2000. Presumibilmente l'algoritmo utilizzato in questo metodo è ottimizzato per la velocità, quindi l'ordinamento di un elenco di posizioni sulla distanza è veloce, piuttosto che preciso al millimetro.

Se sono necessari risultati accurati, non utilizzare questi metodi ma trovare un altro modo. Se hai bisogno di risultati riproducibili, ordina gli argomenti in un modo definito, ad es. inizia sempre con la latitudine inferiore.

Problemi correlati