作者c2578910 (台中陳奕迅)
看板Python
標題[問題] 利用經緯度計算距離
時間Fri Mar 13 21:21:44 2020
小弟最近要建立矩陣,因不熟悉API的原理及運用,打算將住址轉換為經緯度後再計算距
離。
由於資料量不少,打算利用迴圈的形式。
流程大約是:先讀取EXCEL的數值,再進行運算
以下為程式碼:
d = {}
for i in range(0,M):
for j in range (0,M):
d [i,j]= 6371*math.acos(math.sin(math.radians(X[i]))*math.sin(math.radians(X[j]))+
math.cos(math.radians(X[i]))*math.cos(math.radians(X[j]))*
math.cos(math.radians(Y[i]-Y[j])))
6371是地球半徑
M是資料筆數
不過會出現ValueError: math domain error
想請問是哪邊有問題?
求解,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.136.218 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1584105706.A.FF3.html
推 qhair: geopy可以直接算吧? 03/13 23:06
我查看看geopy的原理
推 lycantrope: code沒問題,可能是data有問題 03/13 23:09
也有這可能性 有從小到大測試不同的M 但經緯度是從Google地圖抓的 真奇怪
推 TitanEric: 之後也許可以改成numpy 03/13 23:27
※ 編輯: c2578910 (61.70.244.68 臺灣), 03/14/2020 00:50:56
※ 編輯: c2578910 (61.70.244.68 臺灣), 03/14/2020 00:52:20
→ Hsins: 先檢查 acos 裡面算出來的東西有沒有絕對值超過 1 的 03/14 02:01
好的 由於是書上的公式 也不太好直接講出來怕有業配嫌疑 下次會講清楚變數 謝謝
→ Hsins: 看起來是用 Great-circle distance 的公式,那你應該說清楚 03/14 02:32
→ Hsins: X[] Y[] 哪個是經度,哪個是緯度。公式裡 X[] 應該要放緯度 03/14 02:33
→ Hsins: 下次問問題記得把用到的公式跟你的變數交待一下... 03/14 02:35
※ 編輯: c2578910 (223.140.224.209 臺灣), 03/14/2020 12:48:17
→ Hsins: 你有檢查 X[] 確定是放緯度了嗎?因為我看 Google 給出來資 03/14 20:04
確定X放緯度 Y放經度沒錯 遇到的問題是 改成不同的M時突然就出現error 目前已用版友私訊的其他公式解決了 謝謝
→ Hsins: 料是把經度放前面。如果是這個問題,你把運算式裡面的 X[] 03/14 20:05
→ Hsins: Y[] 部份互調就可以了 03/14 20:05
※ 編輯: c2578910 (61.70.244.68 臺灣), 03/16/2020 10:04:15