首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定经度和纬度坐标是否在半径内,以英里和公里为单位

确定经度和纬度坐标是否在半径内,以英里和公里为单位
EN

Stack Overflow用户
提问于 2014-04-16 16:44:39
回答 2查看 7.2K关注 0票数 3

仅使用伪代码或JavaScript,任何人都可以描述确定由下列对象组成的对象数组中哪些项的最佳方法:

代码语言:javascript
复制
{
"lat": float,
"lng": float
}

是在给定半径范围内的英里还是公里?

我正在向ForerunnerDB (https://github.com/irrelon/ForerunnerDB)添加基于地理位置的查询,并希望能够通过搜索生成快速结果。

如果您可以描述一个索引策略来加速对数组的查询,那么就可以得到额外的分数。我已经从头开始编写了ForerunnerDB数据库,这样就可以灵活地将答案集成到代码中,但主要关注的是查询性能。

虽然这个问题涉及到ForerunnerDB的一个新特性,但它并不要求您去阅读该项目的源代码或熟悉该系统,并且非常欢迎使用伪代码或独立JS示例!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-23 12:20:02

下面是使用Haversine公式的一种简单的“直接”方法

代码语言:javascript
复制
//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,迫不及待地想看一下与地理相关的功能

票数 4
EN

Stack Overflow用户

发布于 2014-04-16 18:28:20

我想这在如何计算两个经纬度点之间的距离?中或多或少会得到回答。

无论如何,使用现成的API(如这里是Maps的地理坐标类 )可能比自己创建计算功能更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23115375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档