我有一个带有地理空间索引的商店集合,该索引是基于位置属性建立的。
我的目标是根据用户提供的纬度、经度和搜索半径(以英里为单位),返回在这些参数范围内的商店列表。
我在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。
谢谢!
$near
查询(这意味着$maxDistance
必须与坐标使用相同的单位),而不是一个球形查询(这种查询需要$maxDistance
以弧度为单位)。 - John Flatness