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

时间:2010-10-07 04:34:01

标签: mongodb geospatial distance getdistance

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

我想要做的是给出用户的纬度,纬度和搜索半径(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。

谢谢!

2 个答案:

答案 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