[問題] 利用經緯度計算距離

看板Python作者 (台中陳奕迅)時間4年前 (2020/03/13 21:21), 4年前編輯推噓3(307)
留言10則, 4人參與, 4年前最新討論串1/1
小弟最近要建立矩陣,因不熟悉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

03/13 23:06, 4年前 , 1F
geopy可以直接算吧?
03/13 23:06, 1F
我查看看geopy的原理

03/13 23:09, 4年前 , 2F
code沒問題,可能是data有問題
03/13 23:09, 2F
也有這可能性 有從小到大測試不同的M 但經緯度是從Google地圖抓的 真奇怪

03/13 23:27, 4年前 , 3F
之後也許可以改成numpy
03/13 23:27, 3F
※ 編輯: c2578910 (61.70.244.68 臺灣), 03/14/2020 00:50:56 ※ 編輯: c2578910 (61.70.244.68 臺灣), 03/14/2020 00:52:20

03/14 02:01, 4年前 , 4F
先檢查 acos 裡面算出來的東西有沒有絕對值超過 1 的
03/14 02:01, 4F
好的 由於是書上的公式 也不太好直接講出來怕有業配嫌疑 下次會講清楚變數 謝謝

03/14 02:32, 4年前 , 5F
看起來是用 Great-circle distance 的公式,那你應該說清楚
03/14 02:32, 5F

03/14 02:33, 4年前 , 6F
X[] Y[] 哪個是經度,哪個是緯度。公式裡 X[] 應該要放緯度
03/14 02:33, 6F

03/14 02:35, 4年前 , 7F
下次問問題記得把用到的公式跟你的變數交待一下...
03/14 02:35, 7F
※ 編輯: c2578910 (223.140.224.209 臺灣), 03/14/2020 12:48:17

03/14 20:04, 4年前 , 8F
你有檢查 X[] 確定是放緯度了嗎?因為我看 Google 給出來資
03/14 20:04, 8F
確定X放緯度 Y放經度沒錯 遇到的問題是 改成不同的M時突然就出現error 目前已用版友私訊的其他公式解決了 謝謝

03/14 20:05, 4年前 , 9F
料是把經度放前面。如果是這個問題,你把運算式裡面的 X[]
03/14 20:05, 9F

03/14 20:05, 4年前 , 10F
Y[] 部份互調就可以了
03/14 20:05, 10F
※ 編輯: c2578910 (61.70.244.68 臺灣), 03/16/2020 10:04:15
文章代碼(AID): #1UQuZg_p (Python)