0

2 つの緯度と経度の間の距離を計算しています。いくつかの距離で結果が得られますが、NAN として結果が得られることもあります。

これは、私が取得した 2 つの場所の緯度と経度です。

例: 38.655553,-121.091611

38.654875、-121.091324

以下のコードを使用して、以下のリンクを参照して距離を計算しています

2 つの地理的位置間の距離の計算

public static double distanceBetween (double currentLat2, double currentLong2, double mallLat2, double mallLong2)
{
     float pk = (float) (180/3.14169);

        double a1 = currentLat2 / pk;
        double a2 = currentLong2 / pk;
        double b1 = mallLat2 / pk;
        double b2 = mallLong2 / pk;

        double t1 = FloatMath.cos((float) a1)*FloatMath.cos((float) a2)*FloatMath.cos((float) b1)*FloatMath.cos((float) b2);
        double t2 = FloatMath.cos((float) a1)*FloatMath.sin((float) a2)*FloatMath.cos((float) b1)*FloatMath.sin((float) b2);
        double t3 = FloatMath.sin((float) a1)*FloatMath.sin((float) b1);
        double tt = Math.acos(t1 + t2 + t3);

       return 6366000*tt;               
}

ヘルプはありますか?

ありがとう。

4

3 に答える 3

1

のドキュメントは次のようにLocation.distanceTo(LOcation)述べています。

この場所と指定された場所の間のおおよその距離をメートル単位で返します。距離は、WGS84 楕円体を使用して定義されます。

したがって、次の方法で試すことができます。

public static float distanceBetween (double currentLat2, double currentLong2, double mallLat2, double mallLong2) {
        Location loc1 = new Location("");
        loc1.setLatitude(currentLat2);
        loc1.setLongitude(currentLong2);

        Location loc2 = new Location("");
        loc2.setLatitude(mallLat2);
        loc2.setLongitude(mallLong2);

        return loc1.distanceTo(loc2);
}
于 2013-04-23T13:16:43.773 に答える
0

t1、t2、t3 の出力を記録できますか? の議論が的外れな気がしMath.acos()ます。Math.sinまた、 andを使用できるのに、不必要に float にキャストして double に戻す理由もわかりませんMath.cos

編集

Math.PI3.14169 の代わりに使用します。この概算がエラーの原因です。

于 2013-04-23T13:04:10.937 に答える