将gps坐标转换为距离并将距离转换为半径,以十进制度表示

时间:2013-10-11 06:58:26

标签: javascript node.js gps

基于我从用户那里获得的GPS坐标,我想在用户周围的特定半径(以米为单位)内查找游戏。我希望该半径是可配置的,因此它必须能够传递给将指定距离转换为十进制度半径的函数。

我在MongoDB中存储用户GPS坐标和游戏GPS坐标并使用within.center({center:[user.pos [0],user.pos [1]],radius:1};)查询到找到靠近用户位置的游戏。

该查询中的radius属性是我想要配置的。假设我想将50米转换为十进制度的半径:

convertDistanceToRadiusDegrees('50') -> 0.123

然后我使用该函数的结果作为radius属性的值。

我想计算用户与每个找到的游戏之间的距离:

calcDistance(pos1, pos2) -> 50

是否有可以同时执行这两项功能的Node.JS模块/ JS插件?到目前为止,我只设法找到Node.JS模块来计算点到点之间的距离,而不是将距离以米为单位转换为十进制度。

这样的模块是否存在?如果没有,是否有任何模块可以将半径转换为十进制度?它甚至可能吗?

2 个答案:

答案 0 :(得分:0)

我最近使用的是leafletjs,它是用于GIS计算的完整API。

API - http://leafletjs.com/reference.html

其中一种距离方法,

http://leafletjs.com/reference.html#latlng-distanceto

答案 1 :(得分:0)

ad“该查询中的radius属性是我想要配置的。假设我想将50米转换为十进制度半径: convertDistanceToRadiusDegrees('50') - > 0.123 “

这是错误的方法,因为1°纬度差异不同于1 *纵向差异

正确的是: 计算currentLocation和目标中心圆坐标之间的距离。 要么使用缓慢但准确的半正式公式,由用户melc在leafletjs API中发布,要么在互联网上搜索haverisen公式,它的一些代码行,你可以复制和粘贴。不需要附加库。 (如果距离圆心的距离小于或等于半径,则位置在圆圈内)

如果您可以使用该公式,如果您需要每秒检查目的地的数量,则需要更多努力。 (例如,空间索引可以减少附近的几个计算量)