回答
首先,我們必須寫一個基本功能,計算2點之間的距離:
function distance(lat1, lon1, lat2, lon2) {}
在這個例子中首先,我們必須計算delta(經度和緯度之間的距離)和平均緯度(緯度的平均值)之間的距離(delta):
var dLat = lat1 - lat2;
var dLon = lon1 - lon2;
var mLat = (lat1 + lat2)/2;
var earthRadius = 3959; //in miles
然後我們把那些弧度使用d=180/PI rad
:
dLat = dLat * 180/3.1415926535;
dLon = dLon * 180/3.1415926535;
mLat = mLat * 180/3.1415926535;
現在,我們用公式來我們的數據轉換成距離:
var distance = earthRadius * (dLat * dLat + Math.pow(Math.cos(mLat) * dLon, 2));
,並返回的距離
return distance;
現在,只需遍歷所有的點和ch如果每個人的距離都沒有問題,那麼就去吃。比方說,一個點這樣描述:
var p = {
lat = ...
lon = ...
}
而且假定是一個點的列表(例如,名爲點)和參考點(例如,名爲REF)。
var result = []
points.forEach(function (d) {
if (distance(d.lat, d.lon, ref.lat, ref.lon) <= 1) {
result.push(d);
}
};
您還可以檢查緯度邊界框 - 經度需要更復雜的計算,這只是浪費時間。你可以確定一英里的度數爲1/69 deg/mile
(大約0.1449度)。所以,你可以檢查哪些點是這個邊界框之外:
var result = []
var maxLat = ref.lat + 0.1449;
var minLat = ref.lat - 0.1449;
points.forEach(function (d) {
if (d.lat > maxLat || d.lat < minLat) continue;
if (distance(d.lat, d.lon, ref.lat, ref.lon) <= 1) {
result.push(d);
}
};
然後你應該完成與距離參考點越接近1英里點的數組。
我可能在公式中有一個錯誤(我更像是一個程序員而不是數學家)。因此,仔細檢查他們是否與我添加了鏈接的維基百科文章一起工作。
將1英里距離轉換爲「度數距離」,而不是轉換每個座標點的速度會更快嗎?假設1英里對應於0.001度的距離,那麼我們只需檢查'(d.lat-ref.lat)** 2 +(d.lon-ref.lon)** 2 <0.001 ** 2',這需要較少的整數計算。我的提議可能是錯的,只是問。 – Delgan
爲了提高速度,您可以根據最小/最大拉特進行簡單的「提早離開」邊界框檢查,並且長時間丟棄大多數點,並且只對通過它的人進行昂貴的距離計算。 – samgak
@Delgan不完全 - 不同緯度的一英里距離不同。例如,在北緯38N/S處,經度爲69英里,而在北緯90N/S處,經度達到0英里。 –
- 1. 什麼是最快的方式來檢查一個數字是否在python的特定範圍內?
- 2. 什麼是最快的方式來判斷我們是否在特定的小時範圍內工作?
- 3. 在給定座標的一定範圍內查找項目
- 4. 查找數字是否在範圍內的最快方法
- 5. 找出日期是否在特定範圍內的最佳方法是什麼?
- 6. 什麼是查找排序範圍內元素數量的最快方法?
- 7. 什麼是最簡單的方式來製作座標列表?
- 8. if語句來檢查座標是否在一個範圍內
- 9. 什麼是一些最快的方法來處理這個?
- 10. 什麼是最快的方式來查找和刪除文件?
- 11. 什麼是最快,效率最高的內存和最簡潔的方法來計算3d範圍的點
- 12. Facebook FQL:找到位置在一定座標範圍內的朋友
- 13. 使用Excel宏在excel範圍內找到一行的最快方法VBA
- 14. 什麼是獲得範圍補充的最快方法?
- 15. 在地圖上直線繪製座標(Jupyter)的最快方式是什麼?
- 16. 更快的方式來遍歷範圍
- 17. 爲什麼這個查詢在某些範圍的數據上變慢,而在另一些範圍內變快?
- 18. 什麼是最簡單的方法來確定一個字符是否在Unicode範圍內,在Rust中?
- 19. MATLAB找到局部最大值在一定的範圍內
- 20. 什麼是最快的方式來查看最後一次更新到MongoDB
- 21. 確定數字在哪個範圍內的最有效方法?
- 22. 在動態增長範圍內找到中值的最快方法
- 23. 計算一個座標是否在另一個範圍內
- 24. 什麼是一個很好的方式來表示一定的高度範圍內的波形
- 25. 什麼是存儲命名範圍信息的最佳方式?
- 26. 找到最快的方式圍繞一個圓圈?
- 27. 在javascript函數的範圍內定義一個變量的最佳方式是什麼?
- 28. 最好的Excel方法來查找範圍內的數組?
- 29. 什麼是I18N友好的方式來顯示日期範圍?
- 30. 什麼是最好的方式來包裝一些XML文本標籤?
您的座標經緯度還是x/y英里? –
緯度/經度 – algoriddim