私はその式を実装してみました緯度と経度に基づいて距離を調べるこのアプレットは、私がテストしている 2 つの点では優れています。
しかし、私のコードは動作しません。
from math import sin, cos, sqrt, atan2
R = 6373.0
lat1 = 52.2296756
lon1 = 21.0122287
lat2 = 52.406374
lon2 = 16.9251681
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))**2 + cos(lat1) * cos(lat2) * (sin(dlon/2))**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
distance = R * c
print "Result", distance
print "Should be", 278.546
距離5447.05546147を返します。なぜでしょうか?
ベストアンサー1
ヴィンセンティ距離は今GeoPy バージョン 1.13 以降では非推奨-使用すべきgeopy.distance.distance()
その代わり!
以前の回答のいくつかは、ハーフサイン式は地球が球体であると仮定しており、その結果、最大約0.5%の誤差が生じる( によるhelp(geopy.distance)
)。ヴィンセンティ距離より正確な楕円体モデルを使用する。WGS-84、および実装されていますジオピー。 例えば、
import geopy.distance
coords_1 = (52.2296756, 21.0122287)
coords_2 = (52.406374, 16.9251681)
print(geopy.distance.geodesic(coords_1, coords_2).km)
279.352901604
デフォルトの楕円体 WGS-84 を使用してキロメートル単位の距離を印刷します。(または.miles
他のいくつかの距離単位のいずれかを選択することもできます。)