次のように Location クラスを使用distanceBetween()
して、2 点間の距離を計算します。
private float getDistanceInMiles(GeoPoint p1, GeoPoint p2) {
double lat1 = ((double)p1.getLatitudeE6()) / 1e6;
double lng1 = ((double)p1.getLongitudeE6()) / 1e6;
double lat2 = ((double)p2.getLatitudeE6()) / 1e6;
double lng2 = ((double)p2.getLongitudeE6()) / 1e6;
float [] dist = new float[1];
Log.i("destination coordinates", "Latitude:" + lat2 + ", Longitude: " + lng2);
Location.distanceBetween(lat1, lng1, lat2, lng2, dist);
return dist[0] * 0.000621371192f;
}
ドキュメントによると、distanceBetween() は「2 つの場所の間のおおよその距離をメートル単位で計算し、必要に応じてそれらの間の最短経路の最初と最後の方位を計算します。」ただし、distanceBetween() によって返される結果と実際の GPS デバイスまたは Google ナビゲーション アプリとの違いはかなり大きいです。たとえば、私のメソッドは 6.2 マイルを返しますが、Google マップは同じ場所に対して 10 マイルを表示します。始点 p1 と終点 p2 の座標を再確認したところ、正しいようです。それが distanceBetween() メソッドの仕組みですか、それとも何か間違っていますか? ところで、Google Place API を使用して距離を JSON 応答として取得する方法はありますか?
Google マップで計算した距離: 6.1 マイル
そして結果は
Location.distanceBetween(41.742964, -87.995971, 41.811511, -87.967923, dist) is
4.947700