当前位置:  开发笔记 > 数据库 > 正文

MongoDB绑定查询:如何将里程转换为弧度?

如何解决《MongoDB绑定查询:如何将里程转换为弧度?》经验,为你挑选了1个好方法。

我有一个商店的集合,在地理位置上有一个地理指数.

我想要做的是给出用户的纬度,纬度和搜索半径(mi),我想返回这些参数内的商店列表.

我在MongoDB文档(http://www.mongodb.org/display/DOCS/Geospatial+Indexing)上看到了以下示例,但看起来距离是弧度.

center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})

那么,将里程转换为弧度的公式是什么?

解决方案 mongodb-user的优秀人员帮助我找到答案.基本上,我真正想要的是一种限制距离的方法.

每个,更新的文档,$ near查询有一个第三个参数:你也可以使用$ near与最大距离

db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)

$ maxDistance的值以弧度为单位; 所以,我不得不用英里的距离把它除以69.

谢谢!



1> walla..:

正如文档所说:

所有距离都使用弧度.这使您可以轻松乘以地球半径(约6371公里或3959英里),以获得您所选单位的距离.相反,在进行查询时,除以地球的半径.

所以你需要将半径除以地球半径.在你的例子中它将是:

radius = 10/3959


如果其他人对此答案感到困惑并仍然得到不正确的结果,我会尝试乘以或除以地球的半径*pi/180,而不仅仅是半径.
实际上,如果有人仍然有这个问题,上面的计算是正确的.1弧度= 3959英里(在地球上),所以要将里程转换为弧度,你只需要除以3959.真正的问题是你应该使用$ centerSphere而不是$ center.我自己也做同样的事情.
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有