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; } [...] }
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; }
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; }
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!