5

http://www.movable-type.co.uk/scripts/latlong.htmlのアルゴリズムを使用して、2 点間の距離を見つけました。

私の2つのポイントは

long1 = 51.507467;
lat1 = -0.08776;

long2 = 51.508736;
lat2 = -0.08612;

Movable Type Scriptによると、答えは 0.1812km です。

私のアプリケーションは結果 ( d) を 0.230km として返します

Haversine 式を確認してください: http://www.movable-type.co.uk/scripts/latlong.html

    double R = 6371; // earth’s radius (mean radius = 6,371km)
    double dLat =  Math.toRadians(lat2-lat1);

    double dLon =  Math.toRadians(long2-long1); 
    a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
            Math.sin(dLon/2) * Math.sin(dLon/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double d = R * c;
4

3 に答える 3

9

独自の距離計算機を再発明する理由として、 Locationクラスに組み込まれているものがあります。

チェックアウト

distanceBetween(double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results) 
Computes the approximate distance in meters between two locations, and optionally the initial and final bearings of the shortest path between them.
于 2010-07-15T17:41:23.867 に答える
3

あなたの実装は正しいです。これらの経度と緯度が与えられた距離は、 の距離を生成する必要があり0.230 kmます。ただし、座標の通常の入力は (緯度、経度) です。それらを逆方向 (経度、緯度) に配置すると、不正確な距離 が生成され0.1812 kmます。

于 2010-07-15T17:25:18.330 に答える
1
public double CalculationByDistance(GeoPoint StartP, GeoPoint EndP) {  
  double lat1 = StartP.getLatitudeE6()/1E6;  
  double lat2 = EndP.getLatitudeE6()/1E6;  
  double lon1 = StartP.getLongitudeE6()/1E6;  
  double lon2 = EndP.getLongitudeE6()/1E6;  
  double dLat = Math.toRadians(lat2-lat1);  
  double dLon = Math.toRadians(lon2-lon1);  
  double a = Math.sin(dLat/2) * Math.sin(dLat/2) +  
     Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *  
     Math.sin(dLon/2) * Math.sin(dLon/2);  
  double c = 2 * Math.asin(Math.sqrt(a));  
  return Radius * c;  
 }  

味方のコンセプトは正しかった。この行で少し変わるかもしれないdouble c = 2 * Math.asin(Math.sqrt(a));

于 2012-05-15T11:16:43.047 に答える