Frage

Also: Ich habe die folgende Funktion aus einer Formel gefunden online angepasst, die zwei lat / lon Koordinaten nimmt und finden den Abstand zwischen ihnen in Meilen (entlang einer kugelförmigen Erde):

public static double distance (double lat1, double lon1, double lat2, double lon2) {
        double theta = toRadians(lon1-lon2);
        lat1 = toRadians(lat1);
        lon1 = toRadians(lon1);
        lat2 = toRadians(lat2);
        lon2 = toRadians(lon2);

        double dist = sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(theta);
        dist = toDegrees(acos(dist)) * 60 * 1.1515 * 1.609344 * 1000;

        return dist;
    }

Soweit ich kann sagen, dass dies ganz gut funktioniert.

Was ich brauche, ist eine zweite Funktion, die genau das gleiche Modell der Geometrie der Erde unter Verwendung eines einzigen lat / lon Paar nimmt [A], eine Überschrift und eine Entfernung und gibt ein neues lat / lon pair [B ], so dass, wenn Sie an dem Punkt gestartet [A], und reisten in der gegebenen Position den gegebenen Abstand, dann werden Sie am Punkt [B aufzuzuwickeln].

Hier ist die Tatsache, dass meine Geometrie Fähigkeiten mich ganz ins Spiel kommt verlassen haben:)

Jede Hilfe wäre sehr geschätzt werden!

Danke, -Dan

War es hilfreich?

Lösung

ich die meisten dieser Arten von Formeln von Die Aviation Formulary.

Die Formel, die er gibt, ist:

  

Lat / lon gegebene radial und Abstand

     

Ein Punkt {Lat, Lon} eine Entfernung heraus d   die tc radial von Punkt 1, wenn:

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF 
     

Dieser Algorithmus Abstände so dass dlon

    lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
     dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat))
     lon=mod( lon1-dlon +pi,2*pi )-pi

Beachten Sie, dass er für die wahren Kurs „tc“ stehen ist mit (in Radianten im Uhrzeigersinn von Norden) und die Abstände er in Radianten des Bogens entlang der Oberfläche der Erde gibt. Dies erklärt sich (zusammen mit Formeln aus nautischen Meilen hin und her konvertieren) in dem ersten Abschnitt des Formulary. Überprüfen Sie auch heraus, die „Hinweise zur Implementierung“ und „Arbeitete Beispiele“ auf dieser Seite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top