有兩點座標在地球表面上, 要計算兩點的距離, 會用到 haversine (半正矢公式)來進行計算.
- https://zh.wikipedia.org/wiki/%E5%8D%8A%E6%AD%A3%E7%9F%A2%E5%85%AC%E5%BC%8F
- https://en.wikipedia.org/wiki/Haversine_formula
其中 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/calculating-distance-between-two-geolocations-in-python-26ad3afe287b