was hältst du davon:
Das hält sich hartnäckig :)
distance = acos(sin(bl=deg2rad(bb))*sin(al=deg2rad(ba))+cos(bl)*cos(al)*cos(deg2rad(lb)-deg2rad(la)))*6380;
Prinzipiell ist die Formel nicht falsch, was mich hier stört sind die 6380 und die "Kommentarlosigkeit" hier ist eine Kopie der Funktion ich in einer meiner Kartenanwendungen verwende (kommentiert):
/**
* Calculation of distance of two points on earth
*
* @param array(float,float) $origin latitude and longitude of origin point
* @param array(float,float) $destination latitude and longitude of destination point
* @param float $factor calculation is done in meters, the default factor is 0.001 which results in an output in km (m·10^3)
*
* @return The calculated distance in the given unit
*/
function calc_distance($origin = array(0, 0), $destination = array(0, 0), $factor = 0.001) {
// 0 = lat; 1 = lon
$earth_radius = 6371000.785; // Average earth radius in metre (GRS 80, WGS84 ellipsoid)
$distance = $earth_radius * acos(sin(deg2rad($origin[0])) * sin(deg2rad($destination[0])) + cos(deg2rad($origin[0])) * cos(deg2rad($destination[0])) * cos(deg2rad($origin[1] - $destination[1])));
return (float)$distance * $factor;
}
Per Vorgabe gibt die Funktion die Distanz in km aus (Faktor 0,001) - intern berechnet wird aber in SI-Einheiten.
Der Erdradius wird hierbei nicht mit 6380 km angegeben (wo dieser Wert herkommt, war mir nie sonderlich klar - sogar der Radius am Äquator ist kleiner) sondern per Definition aus WGS84 - das ist zwar bei der Entfernungsberechnug zwischen zwei nahe zusammenliegenden Orten weitgehend vernachlässigbar, bei Transatlantikflügen kommen da aber schon recht große Abweichungen zusammen.