将gps坐标转换为距离并将距离转换为十进制度数的半径
Posted
技术标签:
【中文标题】将gps坐标转换为距离并将距离转换为十进制度数的半径【英文标题】:Converting gps coords to distance and converting distance to radius in decimal degrees 【发布时间】:2013-10-11 06:58:26 【问题描述】:根据我从用户那里获得的 GPS 坐标,我想查找用户周围某个半径(以米为单位)内的游戏。我希望该半径是可配置的,因此它必须可以传递给将指定距离转换为十进制度半径的函数。
我将用户 GPS 坐标和游戏 GPS 坐标存储在 MongoDB 中,并使用 inside.center(center: [user.pos[0], user.pos[1]], radius: 1;) 查询查找用户位置附近的游戏。
该查询中的 radius 属性是我想要配置的。假设我想将 50 米转换为十进制度的半径:
convertDistanceToRadiusDegrees('50') -> 0.123
然后我使用该函数的结果作为半径属性的值。
并且我想计算用户和每个找到的游戏之间的距离:
calcDistance(pos1, pos2) -> 50
是否有可以同时完成这两个功能的 Node.JS 模块/JS 插件?到目前为止,我只找到了计算点之间距离的 Node.JS 模块,而不是将距离以米为单位转换为十进制度。
这样的模块存在吗?如果没有,是否有任何模块可以将米半径转换为十进制度?有没有可能?
【问题讨论】:
有很多关于如何计算的资源,只需谷歌搜索即可。为什么不编写自己的模块? 【参考方案1】:我最近一直在使用leafletjs,它是用于GIS 计算的完整API。
API - http://leafletjs.com/reference.html
一种距离方法,
http://leafletjs.com/reference.html#latlng-distanceto
【讨论】:
【参考方案2】:ad "该查询中的 radius 属性是我想要配置的。假设我想将 50 米转换为十进制度的半径: convertDistanceToRadiusDegrees('50') -> 0.123 "
这是错误的方式,因为 1° 纬度差异与 1* 经度差异不同
正确的是: 计算 currentLocation 和目标中心圆坐标之间的距离。 要么使用用户melc在leafletjs API中发布的缓慢但准确的haversine公式,要么在互联网上搜索haverisen公式,它的一些代码行,你可以复制和粘贴。不需要额外的库。 (如果到圆心的距离小于或等于半径,则该位置在圆内)
Tr 如果您可以接受该公式,如果您需要每秒检查数千个目的地,则需要更多的努力。 (例如,空间索引可将计算量减少到附近的几个点)
【讨论】:
以上是关于将gps坐标转换为距离并将距离转换为十进制度数的半径的主要内容,如果未能解决你的问题,请参考以下文章