我在地理位置上有一个地理指数的商店集合。
我想要做的是给出用户的纬度,纬度和搜索半径(mi),我想返回这些参数中的商店列表。
我在MongoDB文档(http://www.mongodb.org/display/DOCS/Geospatial+Indexing)上看到了以下示例,但看起来距离是弧度。
center = [50, 50]
radius = 10
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}})
那么,将里程转换为弧度的公式是什么?
解决方案 mongodb用户的精彩人帮我找到了答案。 基本上,我真正想要的是一种限制距离的方法。
Per,更新后的文档,$ near查询有第三个参数: 您也可以使用$ near,最大距离
db.places.find( { loc : { $near : [50,50] , $maxDistance : 5 } } ).limit(20)
$ maxDistance的值以弧度为单位;所以,我不得不以英里为单位将距离除以69。
谢谢!
答案 0 :(得分:15)
正如文档所说:
所有距离都使用弧度。这使您可以轻松乘以地球半径(约6371公里或3959英里),以获得您所选单位的距离。相反,在进行查询时,除以地球的半径。
因此您需要将半径除以地球半径。 在你的例子中它将是:
radius = 10/3959
答案 1 :(得分:0)
为了在km范围内使用mongodb $附近的查询,您需要将radius值转换为km。默认情况下,mongodb $ near接受$ maxDistance作为半径。
使用km时将距离转换为111.12(一度约为111.12公里),或者使用度数保持距离
如果您的半径是以km为单位,那么请使用
db.places.find( { loc : { $near : [50,50] , $maxDistance : 10/111.12 } } )
但如果您的半径以英里为单位,则将其转换为km