MongoDB:选择点半径内的所有多边形

时间:2015-10-12 22:36:26

标签: mongodb geospatial

我的数据库中有两个集合:Post和Gallery。 Post有一个GeoJSON Point位置,gallery是一个帖子集合。画廊的位置是GeoJSON Polygon,它限制了画廊的帖子(使用quickhull算法)。我现在需要查询某个点x英里内的所有画廊,但即使我从我的多边形旁边查询,我也没有得到任何结果。

我希望该行为与以下内容完全相同:

db.posts.find({
    'location': {
        $geoWithin: {
            $centerSphere: [[-70, 30], 1000/3959]
        }
    }
});

此处,返回半径内的所有帖子。但是,当我以这种方式运行相同类型的函数时,我什么都没有返回,这是不正确的:

db.galleries.find({
    'location': {
        $geoWithin: {
            $centerSphere: [[-70, 30], 1000/3959]
        }
    }
});

我的一个画廊有以下位置(是2dsphereIndexVersion = 2的2dsphere索引):

"location": {
  "type": "Polygon",
  "coordinates": [
    [
      [
        -73.986882,
        40.682829
      ],
      [
        -73.971089,
        40.6672045
      ],
      [
        -73.955296,
        40.65158
      ],
      [
        -73.986882,
        40.682829
      ]
    ]
  ]
}

如何查询至少与我的半径相交的位置多边形?

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并尝试了您最初尝试过的完全相同的查询。我不确定为什么它不起作用,但我最终能够$near完成这项工作。请记住,$ near在计算$ maxDistance时使用米,所以我不得不将我的10英里所需距离转换为米乘以1609.34。这是我最终使用的查询:

db.maTowns.find(
    {
        'geometry': {
            $near: {
                $geometry: {
                    'type': "Point",
                    'coordinates': [ -71, 42 ]                                    
                },
                $maxDistance: 10 * 1609.34
             }
         }
     }
)

答案 1 :(得分:0)

  

选择点半径内的所有多边形

通过最近发布的MongoDB版本def for_each(action, *iterables): for t in zip(*iterables): action(*t) for_each(os.rename, py_files, dst_py_files) ,您现在可以使用$geoWithin地理空间运算符$centerSphere查询GeoJSON LineStrings和多边形。

有关更改的详细信息,另请参阅SERVER-27968。请注意,此更改有待反向移植。

也可能与3.6.0-rc0相关,而$geoIntersects则为SERVER-30390