Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich den Abstand zwischen zwei geografischen Koordinaten in PHP genau berechnen?

Wie kann ich den Abstand zwischen zwei geografischen Koordinaten in PHP genau berechnen?

Linda Hamilton
Freigeben: 2024-12-08 20:53:11
Original
238 Leute haben es durchsucht

How Can I Accurately Calculate the Distance Between Two Geographical Coordinates in PHP?

Berechnen des Abstands zwischen Koordinaten in PHP

Das Bestimmen des Abstands zwischen geografischen Koordinaten ist eine häufige Aufgabe in der Webentwicklung. Es ist jedoch wichtig, unnötige API-Aufrufe zu vermeiden und effiziente Berechnungsmethoden zu implementieren.

Eine beliebte Formel zur Entfernungsmessung ist die Haversine-Formel. Es verwendet den Breiten- und Längengrad zweier Punkte, um den Abstand zwischen ihnen zu berechnen, und berücksichtigt dabei die Kugelform der Erde.

Sie haben zwar eine Implementierung der Haversine-Formel bereitgestellt, diese kann jedoch zu unzuverlässigen Ergebnissen führen. Um das Problem zu untersuchen, überprüfen wir die Formel und identifizieren potenzielle Fehler:

class CoordDistance
{
    [...]
    public function DistAB()
    {
        $delta_lat = $this->lat_b - $this->lat_a;
        $delta_lon = $this->lon_b - $this->lon_a;

        $earth_radius = 6372.795477598;

        $alpha = $delta_lat / 2;
        $beta = $delta_lon / 2;
        $a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($this->lat_a)) * cos(deg2rad($this->lat_b)) * sin(deg2rad($beta)) * sin(deg2rad($beta));
        $c = asin(min(1, sqrt($a)));
        $distance = 2 * $earth_radius * $c;
        $distance = round($distance, 4);

        $this->measure = $distance;
    }
    [...]
}
Nach dem Login kopieren
  • Falsche Umrechnung: Stellen Sie sicher, dass die Umrechnung von Grad in Bogenmaß mit deg2rad() korrekt durchgeführt wird. .
  • Rundungsfehler: Vermeiden Sie mögliche Rundungsfehler, indem Sie hochpräzise Gleitkommazahlen verwenden Berechnungen.
  • Grenzwerte: Die Haversine-Formel weist Einschränkungen bei der Berechnung von Abständen für Punkte in der Nähe der Antipodenpunkte (180 Grad voneinander entfernt) auf. In solchen Fällen sind alternative Formeln wie die Vincenty-Formel besser geeignet.

Um die Zuverlässigkeit Ihrer Entfernungsberechnungen zu erhöhen, berücksichtigen Sie die folgenden Vorschläge:

Haversine-Formel mit verbessert Präzision:

function haversineGreatCircleDistance(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000.0) {
    ...
    $angle = 2 * asin(sqrt(pow(sin($latDelta / 2.0), 2) +
        cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2.0), 2)));
    return $angle * $earthRadius;
}
Nach dem Login kopieren

Vincenty Formel:

function vincentyGreatCircleDistance(float $latitudeFrom, float $longitudeFrom, float $latitudeTo, float $longitudeTo, float $earthRadius = 6371000.0) {
    ...
    $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;
}
Nach dem Login kopieren

Durch die Implementierung dieser verbesserten Formeln können Sie in PHP genauere Abstandsmessungen zwischen Koordinaten erhalten, selbst für große Entfernungen oder Punkte in der Nähe von Antipodenpunkten.

Das obige ist der detaillierte Inhalt vonWie kann ich den Abstand zwischen zwei geografischen Koordinaten in PHP genau berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage