2

ここで提供されている式を Java に変換しました。しかし、精度が問題です。GPS座標を使用しています。

小数点以下 10 桁までの精度の iPhone 提供の GPS 位置情報を使用しています。

/*
 * Latitude and Longitude are in Degree
 * Unit Of Measure : 1 = Feet,2 = Kilometer,3 = Miles
 */
//TODO 3 Change Unit of Measure and DISTANCE_IN_FEET constants to Enum
public static Double calculateDistance(double latitudeA,double longitudeA,double latitudeB,double longitudeB,short unitOfMeasure){

    Double distance;

    distance = DISTANCE_IN_FEET * 
               Math.acos(       

                               Math.cos(Math.toRadians(latitudeA)) * Math.cos(Math.toRadians(latitudeB)) 
                           *
                               Math.cos(Math.toRadians(longitudeB) - Math.toRadians(longitudeA))
                           +
                               Math.sin(Math.toRadians(latitudeA))
                           *
                               Math.sin(Math.toRadians(latitudeB))

                       );

    return distance;

}

参考までに: public static final int DISTANCE_IN_FEET = 20924640;

そして、Math.round(distance); を使用します。ロングに変換します。

実際の 25 フィートに対して、7 フィートの出力が得られます。

4

2 に答える 2