ここで提供されている式を 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 フィートの出力が得られます。