[JAVA] Calculez la distance entre la latitude et la longitude de deux points

Contexte

Quand j'étais en école professionnelle, je traitais parfois des cartes, et je pensais profiter de cette opportunité pour conserver les fonctions que je faisais à l'époque.

Commentaire

J'ai utilisé la formule Hubeni expliquée dans Mountain full. la cérémonie

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

est.

Si vous le traduisez en mots d'une manière facile à comprendre

\sqrt{(Différence de latitude x rayon de la courbe méridienne)^2 + (Différence de longitude x rayon de courbure de la ligne 酉 酉 x cos valeur moyenne de la latitude)^2}

Je me suis demandé ce que je faisais. Si vous regardez de près

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

C'est une formule pour trouver la distance entre deux points. Il semble que la formule corrige l'erreur en supposant que la terre est une ellipse.

code

HubenyDistance.java


public class HubenyDistance {

    //Système d'observation du monde
    public static final double GRS80_A = 6378137.000;//Long rayon a(m)
    public static final double GRS80_E2 = 0.00669438002301188;//Première centrifugeuse e au carré

    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); //Latitude moyenne
        double dy = deg2rad(lat1 - lat2); //Différence de latitude
        double dx = deg2rad(lng1 - lng2); //Différence de longitude

        //Trouvez le rayon de courbure de la ligne Uro(Rayon de la ligne reliant l'est et l'ouest)
        double sinMy = Math.sin(my);
        double w = Math.sqrt(1.0 - GRS80_E2 * sinMy * sinMy);
        double n = GRS80_A / w;

        //Trouvez le rayon de la courbe méridienne(Rayon de la ligne reliant le nord et le sud)
        double mnum = GRS80_A * (1 - GRS80_E2);
        double m = mnum / (w * w * w);

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

Recommended Posts

Calculez la distance entre la latitude et la longitude de deux points
[Android] Calculez facilement la différence entre deux dates
Comment trouver la distance et l'angle entre deux points sur un plan
Trouvez l'angle entre deux vecteurs
Calculer la différence entre les nombres dans un tableau Ruby