🔥

【Python】緯度・経度から距離を算出する

2023/09/13に公開

Pythonで緯度・経度から距離を算出する方法についてご紹介します。
機械学習でも役にたつスキルだと思います。

1.計算式

弧度法のラジアンを単位とした緯度を\phi、経度を\lambdaとします。
地点Aの緯度・経度を\phi_1・\lambda_1
地点Bの緯度・経度を\phi_2・\lambda_2とします。
また、地球の半径は6,371kmとします。
この時、地点Aと地点Bの距離は、以下の公式で計算されます。

distance = 6371 \times arccos(sin\phi_1 \times sin\phi_2 + cos\phi_1 \times cos\phi_2 \times cos(\lambda_1 - \lambda_2))

arccosはcosの逆三角関数です。

2.Pythonでの実装

緯度・経度情報を変数に格納

#名古屋市の緯度・経度
lat1 =35.180
lon1 = 136.907
#東京都の緯度・経度
lat2 = 35.689
lon2 =139.692

上記の公式を関数にして、実行します。

def calc_distance(lat1,lon1,lat2,lon2):
    R = 6371
    distance = R * math.acos(
        math.sin(math.radians(lat1))*
        math.sin(math.radians(lat2))+
        math.cos(math.radians(lat1))*
        math.cos(math.radians(lat2))*
        math.cos(math.radians(lon1)-math.radians(lon2)))
    return distance

calc_distance(lat1,lon1,lat2,lon2)

距離が出ました

258.86282959979485

(参考)ライブラリーを使った場合

Pythonにはgeopyというライブラリーもあります。
これを使って計算することもできます。
少し計算式が減ります。

from geopy.distance import geodesic

def geopy_distance(lat1, lon1, lat2, lon2):
    point1 = (lat1, lon1)
    point2 = (lat2, lon2)
    distance = geodesic(point1, point2).kilometers
    return distance

geopy_distance(lat1, lon1, lat2, lon2)

さきほどの距離とは少し違う結果になりました。

259.10494941966067

Discussion