有兩點座標在地球表面上, 要計算兩點的距離, 會用到 haversine (半正矢公式)來進行計算.
其中 Haversine 公式就是用來計算這個球面上的大圓距離, 公式如下:
利用這個公式, 可以建立一個 python function (半徑為地球半徑: 6371km):
import numpy as np
def haversine_distance(lat1, lon1, lat2, lon2):
r = 6371
phi1 = np.radians(lat1)
phi2 = np.radians(lat2)
delta_phi = np.radians(lat2 - lat1)
delta_lambda = np.radians(lon2 - lon1)
a = np.sin(delta_phi / 2)**2 + np.cos(phi1) * np.cos(phi2) * np.sin(delta_lambda / 2)**2
res = r * (2 * np.arctan2(np.sqrt(a), np.sqrt(1 -a)))
return np.round(res, 2)
不過其實 python 原本就有函數庫: haversine 也可以直接引用:
import haversine as hs
loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)
(上面預設單位就是 km 了)
程式碼範例與執行結果請參考:
https://colab.research.google.com/drive/1Tap7kaY-yG09OvpJKhja9ni2T8yMdxJZ?usp=sharing
參考資料:
https://towardsdatascience.com/heres-how-to-calculate-distance-between-2-geolocations-in-python-93ecab5bbba4
https://towardsdatascience.com/calculating-distance-between-two-geolocations-in-python-26ad3afe287b