suit: Umkreisberechnung

Beitrag lesen

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.