17

我在位置属性上有一组带有地理空间索引的商店。

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

谢谢!

4

2 回答 2

16

正如文档所说:

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

所以你只需要将你的半径除以地球半径。在您的示例中,它将是:

radius = 10/3959
于 2010-10-07T09:42:39.230 回答
0

为了使用带有 km 边界的 mongodb $near 查询,您需要将半径值转换为 km。默认情况下 mongodb $near 接受 $maxDistance 作为半径。

使用 km 时将距离转换为 111.12(1 度约为 111.12 公里),或使用度时保持距离不变

如果您的半径以公里为单位,请使用

 db.places.find( { loc : { $near : [50,50] , $maxDistance : 10/111.12 } } )

但是如果您的半径以英里为单位,则将其转换为公里

于 2018-06-08T07:36:17.237 回答