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.
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.
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