如何在MongoDB =中的两个圆的差异内执行地理搜索

时间:2012-08-02 04:22:53

标签: mongodb mongoid geospatial

是否可以从两个圆的差异在结果区域中执行MongoDB中的地理空间搜索。假设我有一个半径为x的圆圈A和另一个半径为y的圆圈,其中y> 0。 X。我需要找到B-A内的所有点。这是否可以使用MongoDB。我知道MongoDB支持多边形搜索,但也许有更好的方法。请记住,我正在使用mongoid从rails应用程序中使用Mongo。

1 个答案:

答案 0 :(得分:4)

是的,有可能。 使用$within运算符。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-Querying

  

Bounds Queries

可以使用

$ within而不是$ near来查找形状中的项目。结果不按距离排序,这可能导致在不需要此排序时更快的查询。支持$ box(矩形),$ center(圆圈)和$ polygon(凹凸多边形)类型的形状。所有边界查询都隐式包含形状边界作为边界的一部分,但由于浮点不准确,这不能严格依赖。

要查询矩形内的所有点,您必须指定左下角和右上角: 圆由中心点和半径指定:

  

center = [50,50]   半径= 10   db.places.find({“loc”:{“$ within”:{“$ center”:[center,radius]}}})

一种方法是你可以在两个圆圈内找到点,然后做一组的交集。 如果圆是同心的,或者如果不是同心但是有一些重叠的区域,这对两种情况都适用。