ho latitudine e longitudine di un luogo particolare e voglio calcolare la distanza, quindi come posso calcolarlo?Come si calcola la distanza tra due punti di latitudine e longitudine?
risposta
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2];
NSLog(@"Distance i meters: %f", [location1 distanceFromLocation:location2]);
[location1 release];
[location2 release];
È inoltre necessario aggiungere CoreLocation.framework
al progetto, e aggiungere l'istruzione import:
#import <CoreLocation/CoreLocation.h>
questo potrebbe non essere il metodo più efficiente di farlo, ma funzionerà.
Le due posizioni specificate in latitudine e longitudine possono essere considerate vettori. Supponendo che le coordinate siano state convertite in coordinate di cartesione, calcola il prodotto punto dei due vettori.
v1 Dato = (x1, y1, z1) e v2 = (x2, y2, z2), quindi ...
v1 dot v2 = magnitude(v1) * magnitude(v2) * cos (theta)
comoda, la grandezza di v2 v1 e sarà lo stesso .. il raggio della terra (R).
x1*x2 + y1*y2 + z1*z2 = R*R*cos(theta)
Risolvere per theta.
theta = acos ((x1*x2 + y1*y2 + z1*z2)/(R * R));
Ora si ha un angolo tra i due vettori in radianti. La distanza betwen i due punti quando si viaggia attraverso la superficie della terra è così ...
distance = theta * R.
Probabilmente c'è un modo più semplice per fare questo tutto nel contesto di coordinate sferiche, ma la mia matematica in quella zona è troppo fuzzy - da qui la conversione in coordinate cartesiane.
Per convertire le coordinate cartesiane ...
Let alfa essere la latitudine, e beta essere la longitudine.
x = R * cos (alpha) * cos (beta)
y = R * sin (alpha)
z = R * cos (alpha) * sin (beta)
Non dimenticare che la funzione matematica si occupa in genere di radianti e l'accordo di latitudine/longitudine in gradi.
Nota che questa è un'approssimazione, poiché la terra è più di uno sferoide oblato (è andato a forma di pera, per essere più preciso) e la sua superficie non è piana. – outis
Vedere il sito Web 'proj.4' per una discussione dell'errore nell'utilizzo di un modello sferico (http://trac.osgeo.org/proj/wiki/GeodesicCalculations) per la terra. In conclusione, dicono che se scegli un buon valore per R, puoi raggiungere l'1% con questo approccio. – mtrw
+1. Presumibilmente questa risposta potrebbe essere intitolata "Come calcolare un grande percorso circolare" (termine di navigazione nautica). ESCLUSIONE DI RESPONSABILITÀ: Ho zero possibilità di convalidare la matematica su questo. Invidio solo l'abilità che l'ha prodotto, e stimo la presentazione chiara. – Smandoli
Ho superato la matematica e ora posso semplificare notevolmente la soluzione.
Immaginate se giriamo la terra in modo che il nostro primo vettore sia a 0 gradi di latitudine e 0 gradi di longitudine. Il secondo vettore sarebbe a gradi (alfa2 - alfa1) e latitudine (beta2 - beta1).
Dal ...
sin(0) = 0 and cos(0) = 1
nostri simplies prodotto punto a ...
cos(delta_alpha) * cos(delta_beta) = cos(theta)
Il resto della matematica rimane invariato.
theta = acos (cos(delta_alpha) * cos(delta_beta))
distance = radius * theta
Spero che questo aiuti.
Non è possibile ottenere la distanza dalla latitudine e dalla longitudine. La distanza richiede due latitudini e longitudini. –
Questo è stato l'argomento di alcune recenti domande su SO, dare un'occhiata in giro. –
ho 2 latitudine e longitudine ... –