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

Abe*_*Abe 16 distance geospatial mongodb getdistance

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

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

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

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

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

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

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

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

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

谢谢!

wal*_*lla 15

正如文档所说:

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

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

radius = 10/3959
Run Code Online (Sandbox Code Playgroud)

  • 如果其他人对此答案感到困惑并仍然得到不正确的结果,我会尝试乘以或除以地球的半径*pi/180,而不仅仅是半径. (13认同)
  • 实际上,如果有人仍然有这个问题,上面的计算是正确的.1弧度= 3959英里(在地球上),所以要将里程转换为弧度,你只需要除以3959.真正的问题是你应该使用$ centerSphere而不是$ center.我自己也做同样的事情. (3认同)