[JAVA] Berechnen Sie den Abstand zwischen Breiten- und Längengrad zweier Punkte

Hintergrund

Ich habe in der Berufsschule mit Karten gearbeitet und dachte, ich würde diese Gelegenheit nutzen, um die Funktionen beizubehalten, die ich damals gemacht habe.

Kommentar

Ich habe die in Mountain full erläuterte Hubeni-Formel verwendet. Zeremonie

\sqrt{(d_yM)^2+(d_zN \cos µ_y)^2}

ist.

Wenn Sie es auf leicht verständliche Weise in Wörter übersetzen

\sqrt{(Breitengraddifferenz x meridionaler Kurvenradius)^2 + (Längenunterschied x Krümmungsradius der Linie cos 酉 Linie x cos Durchschnittswert des Breitengrads)^2}

Ich fragte mich, was ich tat. Wenn man genau hinschaut

\sqrt{(c−a)^2+(d−b)^2}

Es ist eine Formel, um den Abstand zwischen zwei Punkten zu ermitteln. Es scheint, dass die Formel den Fehler korrigiert, wenn angenommen wird, dass die Erde eine Ellipse ist.

Code

HubenyDistance.java


public class HubenyDistance {

    //Weltbeobachtungssystem
    public static final double GRS80_A = 6378137.000;//Langer Radius a(m)
    public static final double GRS80_E2 = 0.00669438002301188;//Erste Zentrifuge e im Quadrat

    public static double deg2rad(double deg){
        return deg * Math.PI / 180.0;
    }

    public static double calcDistance(double lat1, double lng1, double lat2, double lng2){
        double my = deg2rad((lat1 + lat2) / 2.0); //Durchschnittlicher Breitengrad
        double dy = deg2rad(lat1 - lat2); //Breitengradunterschied
        double dx = deg2rad(lng1 - lng2); //Längenunterschied

        //Finden Sie den Krümmungsradius der Uro-Linie(Radius der Linie zwischen Ost und West)
        double sinMy = Math.sin(my);
        double w = Math.sqrt(1.0 - GRS80_E2 * sinMy * sinMy);
        double n = GRS80_A / w;

        //Finden Sie den Radius der Meridional-Kurve(Radius der Linie zwischen Nord und Süd)
        double mnum = GRS80_A * (1 - GRS80_E2);
        double m = mnum / (w * w * w);

        //Hubenis Beamter
        double dym = dy * m;
        double dxncos = dx * n * Math.cos(my);
        return Math.sqrt(dym * dym + dxncos * dxncos);
    }
}

Recommended Posts

Berechnen Sie den Abstand zwischen Breiten- und Längengrad zweier Punkte
[Android] Berechnen Sie einfach die Differenz zwischen zwei Daten
So ermitteln Sie den Abstand und den Winkel zwischen zwei Punkten in einer Ebene
Finden Sie den Winkel zwischen zwei Vektoren
Berechnen Sie die Differenz zwischen Zahlen in einem Ruby-Array