确定经度&纬度坐标是以英里和千米为单位的半径内
Determine if a Longitude & Latitude Co-ordinate is Inside a Radius in Miles and Kilometers
只使用伪代码或JavaScript,任何人都可以描述确定对象数组中哪些项目的最佳方法,这些项目由:
{
"lat": float,
"lng": float
}
在给定的半径范围内是英里还是公里?
我正在将基于地理位置的查询添加到ForerunnerDB(https://github.com/irrelon/ForerunnerDB)并且希望能够从搜索中产生快速结果。
如果您能够描述一种索引策略,该策略将加快数组上的查询速度,则可获得额外的积分。我从头开始就编写了ForerunnerDB数据库,因此可以灵活地将答案集成到代码中,但主要关注的是查询性能。
虽然这个问题涉及ForerunnerDB的一个新功能,但它不需要你去阅读该项目的源代码或熟悉该系统,伪代码或独立的JS示例将非常受欢迎!
这里有一个简单的"直接的";使用Haversine公式的方法:
//This function takes in latitude and longitude of two locations
// and returns the distance between them as the crow flies (in meters)
function calcCrow(coords1, coords2)
{
// var R = 6.371; // km
var R = 6371000;
var dLat = toRad(coords2.lat-coords1.lat);
var dLon = toRad(coords2.lng-coords1.lng);
var lat1 = toRad(coords1.lat);
var lat2 = toRad(coords2.lat);
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
}
// Converts numeric degrees to radians
function toRad(Value)
{
return Value * Math.PI / 180;
}
我相信这个代码可能来自这里:计算两个坐标之间距离的函数显示错误的
我看到的唯一优化是为纬度和经度添加切线,以删除搜索区域之外的结果。
附言:我真的很喜欢ForerunnerDB,迫不及待地想看看地理相关功能
我想这或多或少会在"如何计算两个经纬度点之间的距离?"中得到答案?
无论如何,使用现成的API(如HERE Maps API的地理坐标类)可能比自己创建计算功能更容易。
相关文章:
- 如果宽度是百分比,如何设置以px为单位的图像高度
- 如何将datetime转换为以毫秒为单位的epoch时间javascript
- 每小时倒计时一次,但以30分钟为单位
- 以天为单位计算年龄-Javascript
- 是否可以使用javascript获取以em为单位的窗口宽度
- 获取以屏幕像素为单位的旋转SVG元素的边界
- GridStack项的高度和宽度(以像素为单位)
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- JQPlot's仪表-以针为单位显示值
- Moment.js unix时间戳,以分钟为单位显示以前的时间
- 从Javascript到C#获取正确的日期(以毫秒为单位)
- 远距离变换元素的宽度/高度(以像素为单位)
- jquery匹配以px为单位的样式字体大小的元素
- 以周为单位计算日期差异(Javascript)
- 以非像素为单位获取HTML DOM元素的CSS高度,在我的例子中是英寸
- Three.js从相机中提取以弧度为单位的旋转
- 为什么setInterval不是以千毫秒为单位
- JavaScript-从HTML img src中获取以字节为单位的大小
- 使用本地存储以毫秒为单位占用时间
- 确定经度&纬度坐标是以英里和千米为单位的半径内