Abstand zwischen Koordinaten in PHP messen
Einführung
Das Berechnen des Abstands zwischen geografischen Koordinaten ist eine grundlegende Aufgabe in verschiedenen Anwendungen. Ein gängiger Ansatz ist die Verwendung der Haversine-Formel. Insbesondere bei Antipodenpunkten kann es jedoch zu ungenauen Ergebnissen kommen. In diesem Artikel wird eine alternative Methode unter Verwendung der Vincenty-Formel untersucht, die zuverlässigere Ergebnisse für alle Entfernungen liefert.
Implementierung
Der bereitgestellte PHP-Code versucht, die Haversine-Formel für zu implementieren Entfernungen berechnen. Allerdings kann es bei großen Entfernungen zu Ungenauigkeiten aufgrund von Rundungsfehlern kommen. Stattdessen empfehlen wir die Verwendung der Vincenty-Formel, wie im folgenden Codeausschnitt dargestellt:
public static function vincentyGreatCircleDistance( $latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000) { // Convert from degrees to radians $latFrom = deg2rad($latitudeFrom); $lonFrom = deg2rad($longitudeFrom); $latTo = deg2rad($latitudeTo); $lonTo = deg2rad($longitudeTo); $lonDelta = $lonTo - $lonFrom; $a = pow(cos($latTo) * sin($lonDelta), 2) + pow(cos($latFrom) * sin($latTo) - sin($latFrom) * cos($latTo) * cos($lonDelta), 2); $b = sin($latFrom) * sin($latTo) + cos($latFrom) * cos($latTo) * cos($lonDelta); $angle = atan2(sqrt($a), $b); return $angle * $earthRadius; }
Hinweis:
Standardmäßig wird die Entfernung in Metern berechnet ein Erdradius von 6371000 Metern. Um die Maßeinheit zu ändern, passen Sie den Wert von $earthRadius entsprechend an.
Fehlerbehandlung
Für antipodale Punkte (d. h. Punkte auf gegenüberliegenden Seiten der Erde) Die Vincenty-Formel liefert im Vergleich zur Haversine-Formel genauere Ergebnisse. Es ist jedoch wichtig zu beachten, dass bei beiden Formeln Rundungsfehler auftreten oder bei sehr kleinen Abständen ungenaue Ergebnisse entstehen können.
Das obige ist der detaillierte Inhalt vonWie berechnet man Entfernungen zwischen geografischen Koordinaten in PHP genau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!