我希望能夠估計兩個(緯度,經度)點之間的距離。我想低調,因爲這將是A *圖搜索,我希望它是快速。這些點將相距最多800公里。如何快速估算兩個(緯度,經度)點之間的距離?
回答
Haversine Formula in Python (Bearing and Distance between two GPS points)的答案提供了可以解答您的問題的Python實現。
使用下面的實現I 在較舊的筆記本電腦上在不到1秒的時間內執行了100,000次重複操作。我認爲你的目的應該是足夠的。但是,在優化性能之前,您應該分析任何內容。
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
# Radius of earth in kilometers is 6371
km = 6371* c
return km
要低估haversine(lat1, long1, lat2, long2) * 0.90
或任何你想要的因素。我不明白如何將錯誤引入低估是有用的。
1000s,但這是蟒蛇,我需要慷慨低估。 – fread2281
速度的一個想法是將long/lat座標轉換爲3D(x,y,z)座標。對點進行預處理後,使用點之間的歐幾里得距離作爲實際距離的快速計算下衝。
對於最大速度,您可以創建類似於座標距離的rainbow table。這聽起來像你已經知道你正在使用的領域,所以它似乎預先計算它們可能是可行的。然後,您可以加載最近的組合並使用它。
例如,在美國大陸,經度是55度跨度,緯度是20,這將是1100個整數點。所有可能的組合之間的距離是handshake problem,其通過(n-1)(n)/ 2或大約600k組合來回答。這似乎是非常可行的存儲和檢索。如果您提供有關您的要求的更多信息,我可以更具體。
由於距離相對較小,因此可以使用equirectangular距離近似值。這種近似比使用Haversine公式更快。因此,要獲得從參考點(lat1/lon1)到您正在測試的點(lat2/lon2)的距離,請使用下面的公式。重要提示:您需要將所有經/緯度點轉換爲弧度:
R = 6371 // radius of the earth in km
x = (lon2 - lon1) * cos(0.5*(lat2+lat1))
y = lat2 - lat1
d = R * sqrt(x*x + y*y)
由於「R」是公里,距離「d」將成爲公里。
請使用下面的代碼。
def distance(lat1, lng1, lat2, lng2):
#return distance as meter if you want km distance, remove "* 1000"
radius = 6371 * 1000
dLat = (lat2-lat1) * math.pi/180
dLng = (lng2-lng1) * math.pi/180
lat1 = lat1 * math.pi/180
lat2 = lat2 * math.pi/180
val = sin(dLat/2) * sin(dLat/2) + sin(dLng/2) * sin(dLng/2) * cos(lat1) * cos(lat2)
ang = 2 * atan2(sqrt(val), sqrt(1-val))
return radius * ang
在我的情況下,其他代碼對我來說效果不佳。 所以,我只是transtlate在這個答案的功能http://stackoverflow.com/questions/6981916/how-to-calculate-distance-between-two-locations-using-their-longitude-and-latitu – uher
- 1. 如何計算經度和緯度兩點之間的距離?
- 2. 計算兩個緯度 - 經度點之間的距離? - 鈦
- 3. 兩個經緯度之間的距離
- 4. 計算兩點之間的距離(經度,緯度)
- 5. 如何找到緯度/經度/緯度點之間的距離?
- 6. 測量兩個緯度/經度點之間的距離
- 7. 獲取兩個經度緯度點之間的駕駛距離
- 8. PHP兩點之間的距離緯度經度
- 9. 計算兩個長/經緯度之間的距離
- 10. 如何使用angulajs計算兩個緯度和經度之間的距離?
- 11. 分別計算兩個緯度和兩個經度之間的距離
- 12. 經典ASP中兩個緯度/長點之間的距離
- 13. 如何根據緯度和經度獲得兩個地點之間的距離?
- 14. 兩個經度和緯度之間的距離
- 15. 使用rethinkdb 2個經緯度點之間計算距離
- 16. 使用緯度經度和海拔(海拔)計算兩點之間的距離
- 17. 在excel中,如何計算兩組大點與經緯度之間的距離?
- 18. 如何計算距離另一點一定距離的點的緯度/經度?
- 19. PIG:計算緯度和經度對之間的最大距離
- 20. Sql查詢計算2緯度和經度之間的距離
- 21. SQL Server計算2組經度/緯度列之間的距離
- 22. J2ME - 計算2緯度和經度之間的距離
- 23. 計算兩個緯度和經度地理座標之間的距離
- 24. 用於計算兩個緯度和經度之間距離的MySQL函數
- 25. Android Maps v2 API ...如何計算兩個位置之間的距離(經緯度)
- 26. 計算距離另一緯度/經度點米的緯度和經度
- 27. 如何檢查兩個緯度和經度coorindates之間的距離?
- 28. 計算兩個緯度/經度點之間的夾角
- 29. 找到2個經緯度點之間的距離(單位:米)
- 30. 如何使用相應的緯度和經度值計算兩個地點之間的距離?
我們應該推斷這些點位於* sphere *嗎? – phs
請參閱http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points或http://stackoverflow.com/questions/4913349/haversine-formula-在蟒蛇方向和距離之間的兩個GPS點(蟒蛇) –
是的,在地球上,但速度。 AFAIK複雜的數學不夠快。 – fread2281