回答
首先,我们必须写一个基本功能,计算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