Entfernung aus GPS-Koordinaten berechnen
Bei der Arbeit mit Koordinaten stoßen Sie oft auf die Aufgabe, die Entfernung zwischen zwei Orten zu bestimmen. Wir zeigen Ihnen, wie das geht.
Lange Zeit haben wir dafür eine einfache Formel verwendet, gewürzt mit einer magischen Konstante:
dist = sqrt( (lat1 - lat2) ^ 2 + (lng1 - lng2) ^ 2 ) * 0.012
wobei lat1, lat2, lng1, lng2 die Koordinaten der Punkte sind, deren Entfernung bestimmt werden soll, und 0.012 eine magische Konstante ist, die das Ergebnis in unseren Breitengraden so anpasst, dass es die Entfernung in Kilometern angibt.
Leider stimmt der vorherige Satz nicht ganz: Das Ergebnis nähert sich der tatsächlichen Entfernung mal mehr, mal weniger nur an. Das hängt davon ab, in welcher Richtung die Punkte zueinander liegen und auf welchem Breitengrad wir uns befinden. Als wir die Berechnung genauer machen mussten, mussten wir die verwendete Formel ändern.
Das Problem dieser Formel ist wohl jedem klar. Leider leben wir nicht auf einer Scheibe, sondern auf einer Kugel (ungefähr), daher reichen ebene Geometrie und der Satz des Pythagoras nicht aus – wir müssen mit sphärischer Geometrie rechnen. Wir brauchen nicht die direkte Entfernung zwischen den Punkten (es sei denn, Sie sind ein Maulwurf und planen einen Tunnel). Uns interessiert die Entfernung zwischen den Punkten entlang des Umfangs eines Kreises, dessen Radius dem Erdradius entspricht.
Für diesen Fall lässt sich die sogenannte Haversine-Formel herleiten, die sich mit geringem Fehler zu folgendem Ausdruck vereinfachen lässt:
dist = acos (sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lng1 - lng2) ) * 6371
wobei lat1, lat2, lng1, lng2 die Koordinaten der Punkte sind und 6371 der Erdradius in km; das Ergebnis ist die Entfernung in Kilometern. Achtung: Wir gehen hier von einer Berechnung in Grad aus. Für eine Berechnung im Bogenmaß muss die Konstante für den Erdradius entsprechend angepasst werden (auf 6371 / 360 * 2 * Pi = 111.19).
Da Koordinaten meist in Grad angegeben werden, müssen auch diese zunächst ins Bogenmaß umgerechnet werden. Der resultierende Code der Funktion zur Entfernungsberechnung in PHP sieht dann so aus:
function distance($lat1, $lng1, $lat2, $lng2)
{
$theta = $lng1 - $lng2;
$dist = acos(
sin(deg2rad($lat1)) * sin(deg2rad($lat2))
+ cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta))
);
return $dist * 111.19;
}