web-dev-qa-db-ja.com

Javaで2つのgpsポイント間の距離を計算するにはどうすればよいですか?

私はこのコードを使用しましたが、機能しません:

41.1212、11.2323のような2つのgps座標間の距離が必要です(Java)

double d2r = (180 / Math.PI);
double distance = 0;

try{
    double dlong = (endpoint.getLon() - startpoint.getLon()) * d2r;
    double dlat = (endpoint.getLat() - startpoint.getLat()) * d2r;
    double a =
        Math.pow(Math.sin(dlat / 2.0), 2)
            + Math.cos(startpoint.getLat() * d2r)
            * Math.cos(endpoint.getLat() * d2r)
            * Math.pow(Math.sin(dlong / 2.0), 2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    double d = 6367 * c;

    return d;

} catch(Exception e){
    e.printStackTrace();
}
23
Benni

経度と緯度は度(0〜360)で指定されます。度をラジアン(0〜2π)に変換する場合は、360で除算して2πで乗算する必要があります(または、同等にπ/ 180で乗算)。ただし、コードでは180 /πを掛けますです。

つまり、変化

double d2r = (180 / Math.PI);

double d2r = Math.PI / 180;
21
aioobe

見てください Geocalc

Coordinate lat = new GPSCoordinate(41, .1212);
Coordinate lng = new GPSCoordinate(11, .2323);
Point point = new Point(lat, lng);

lat = new DegreeCoordinate(51.4613418);
lng = new DegreeCoordinate(-0.3035466);
Point point2 = new Point(lat, lng);
System.out.println("Distance is " + EarthCalc.getDistance(point2, point) / 1000 + " km");

距離は1448.7325760822912 km

私は自分のプロジェクト用にそのライブラリを書きました。

10
Romain

http://www.androidsnippets.com/distance-between-two-gps-coordinates-in-meter からのソリューション。

地球が規則的な形状ではないことを省略できるほどポイントが近い場合にのみ機能します。

 
 private double gps2m(float lat_a、float lng_a、float lng_b、float lng_b){
 float pk =(float)(180/3.14169); 
 
 float a1 = lat_a/pk; 
 float a2 = lng_a/pk; 
 float b1 = lat_b/pk; 
 float b2 = lng_b/pk; 
 
 float t1 = FloatMath.cos(a1)* FloatMath.cos(a2)* FloatMath.cos(b1)* FloatMath.cos(b2); 
 float t2 = FloatMath.cos( a1)* FloatMath.sin(a2)* FloatMath.cos(b1)* FloatMath.sin(b2); 
 float t3 = FloatMath.sin(a1)* FloatMath.sin(b1); 
 double tt = Math.acos(t1 + t2 + t3); 
 
 return 6366000 * tt; 
} 
 // 
 

メートル単位の2つのGPS座標間の距離 を参照してください。

8
sherif

2点間の距離(および他の多くの便利なもの)は、次の場所にあります。 http://www.movable-type.co.uk/scripts/latlong.html

2
peSHIr
1
M.Hefny

距離はEsriジオメトリライブラリで計算できます: geodesicDistanceOnWGS84

JTSにも距離を計算する方法があると思います。

0
Randall Whitman