2010-04-16 11 views
16

Ich habe Breiten- und Längengrad von bestimmten Ort und ich möchte die Entfernung berechnen, wie kann ich es berechnen?Wie berechne ich den Abstand zwischen zwei Punkten von Längen- und Breitengrad?

+3

Sie können keine Entfernung von Längen- und Breitengrad erhalten. Die Entfernung erfordert zwei Breiten- und Längengrade. –

+1

Dies war das Thema der letzten SO Fragen, schau dich um. –

+0

Ich habe 2 Breitengrad und Längengrad ... –

Antwort

32
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]; 

Sie müssen auch CoreLocation.framework zu einem Projekt hinzuzufügen, und die Import-Anweisung hinzu:

#import <CoreLocation/CoreLocation.h> 
5

Dies ist möglicherweise nicht die effizienteste Methode, es zu tun, aber es wird funktionieren.

Ihre zwei durch Breiten- und Längengrad angegebenen Standorte können als Vektoren betrachtet werden. Unter der Annahme, dass die Koordinaten in Cartesion-Koordinaten umgewandelt wurden, berechnen Sie das Skalarprodukt der beiden Vektoren.

Da v1 = (x1, y1, z1) und v2 = (x2, y2, z2), dann ...

v1 dot v2 = magnitude(v1) * magnitude(v2) * cos (theta) 

Günstig ist die Größe von v1 und v2 wird die gleiche sein .. der Radius der Erde (R).

x1*x2 + y1*y2 + z1*z2 = R*R*cos(theta) 

Lösung für Theta.

theta = acos ((x1*x2 + y1*y2 + z1*z2)/(R * R)); 

Jetzt haben Sie Winkel zwischen den beiden Vektoren im Bogenmaß. Der Abstand betwen die beiden Punkte, wenn sie über die Oberfläche der Erde reisen so ist ...

distance = theta * R. 

Es ist wahrscheinlich ein einfacher Weg, dies im Rahmen der Kugelkoordinaten völlig zu tun, aber meine Mathe in diesem Bereich ist zu Fuzzy - daher die Umwandlung in kartesische Koordinaten.

zu kartesischen Koordinaten zu konvertieren ...

Let alpha kann die Breite und Beta die Länge sein.

Vergessen Sie nicht, dass die mathematische Funktion normalerweise im Bogenmaß und der Längen-/Breitengrad in Grad behandelt.

+3

Beachten Sie, dass dies eine Annäherung ist, da die Erde eher ein abgeplatteter Sphäroid ist (es ist birnenförmig, um genauer zu sein) und seine Oberfläche ist nicht flach. – outis

+1

Auf der Website 'proj.4 'finden Sie eine Erörterung des Fehlers bei der Verwendung eines sphärischen Modells (http://trac.osgeo.org/proj/wiki/GeodesicCalculations) für die Erde. Unterm Strich sagen sie, dass wenn Sie einen guten Wert für R wählen, Sie mit diesem Ansatz auf 1% kommen können. – mtrw

+0

+1. Vermutlich könnte diese Antwort unter der Überschrift "Wie man eine Großkreisroute berechnet" (nautischer Navigationsbegriff) stehen. UPVOTE-HAFTUNGSAUSSCHLUSS: Ich habe keine Möglichkeit, die Mathematik dafür zu validieren. Ich beneide nur die Fähigkeit, die es produziert hat, und ich schätze die klare Präsentation. – Smandoli

1

Ich habe durch die Mathematik gekrönt, und kann jetzt die Lösung erheblich vereinfachen.

Stellen Sie sich vor, wir drehen die Erde so, dass unser erster Vektor bei 0 Grad Breite und 0 Grad Länge liegt. Der zweite Vektor wäre bei (alpha2 - alpha1) Grad Breite und (beta2 - beta1) Grad Breite.

Seit ...

sin(0) = 0 and cos(0) = 1 

unsere Skalarprodukt simplies zu ...

cos(delta_alpha) * cos(delta_beta) = cos(theta) 

Der Rest der Mathematik bleibt unverändert.

theta = acos (cos(delta_alpha) * cos(delta_beta)) 
distance = radius * theta 

Hoffe, das hilft.