Ich versuche, die Entfernung zwischen zwei Längen- und Breitengraden zu berechnen. Ich habe einen Code, der meistens funktioniert, den ich aus diesem Beitrag herausgerissen habe, aber ich verstehe nicht wirklich, wie er funktioniert.
Hier ist der Code:
<?php
// POINT 1
$thisLat = deg2rad(44.638);
$thisLong = deg2rad(-63.587);
// POINT 2
$otherLat = deg2rad(44.644);
$otherLong = deg2rad(-63.911);
$MeanRadius = 6378 - 21 * sin($lat1);
$xa = (Cos($thisLat)) * (Cos($thisLong));
$ya = (Cos($thisLat)) * (Sin($thisLong));
$za = (Sin($thisLat));
$xb = (Cos($otherLat)) * (Cos($otherLong));
$yb = (Cos($otherLat)) * (Sin($otherLong));
$zb = (Sin($otherLat));
$distance = $MeanRadius * Acos($xa * $xb + $ya * $yb + $za * $zb);
echo $distance;
?>
Ich habe ein paar Fragen:
- Was sind xa, ya, za? Ich verstehe, dass es sich um Punkte auf einer kartesischen 3D-Ebene handelt, aber wo sind sie relativ? Der Mittelpunkt der Erde?
- Wie
cos($xa * $xb + $ya * $yb + $za * $zb)
berechnet dies den Abstand zwischen den Punkten? Ich weiß, dass ich dies in 2D tun würde:
Pythagorean Theorem
distance^2 = b^2 + a^2
distance = sqr((y2-y1)^2 + (x2 - x1)^2)
- Wie genau wird das sein? Auf der anderen Seite wurde darüber diskutiert. Aber ich möchte die Entfernung speziell nutzen, um festzustellen, ob sich Benutzer innerhalb von 10 m, 20 m oder 50 m voneinander befinden. Kann ich das mit guter Genauigkeit tun?
- Wofür soll ich verwenden
$MeanRadius
? Ist das ein vernünftiger Wert? Ich denke, dass dieser Wert davon ausgeht, dass die Erde eine Elipse ist.