2013-11-23 55 views
5

我在MongoDB(2.4.8)中插入了很多多边形,并希望找到一个指定Point所在的多边形。这似乎是一个常见问题。但从谷歌阅读所有文档后,我没有得到结果。所以创建这个问题。MongoDB如何查找哪个多边形包含指定的点?

例如

db.addr_poly.insert(
{ loc : 
    { type : "Polygon" , 
    coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] 
} }) 
db.addr_poly.insert(
{ loc : 
    { type : "Polygon" , 
    coordinates : [ [ [ 0 , 0 ] , [ -3 , -6 ] , [ -6 , -1 ] , [ 0 , 0 ] ] ] 
} }) 

现在如何找到包含Point(1,1)的多边形?

有人可以帮助我吗?非常感谢!

回答

13

使用$geoIntersects operator。它会查询与您传递的GeoJSON对象相交的所有形状。当你通过一个点时,它应该返回包含该点的所有形状。请记住,$ geoIntersects操作符仅适用于2dsphere索引,而不适用于2d索引。

+0

它的工作原理!对不起,我刚刚尝试了$ geoWithin。菲利普,非常感谢! – fanzhou

+0

@fanzhou当此答案正确无误时,请点击旁边的剔号图标。 – Philipp

+0

@Philipp你能解释更多关于查询吗?我需要这个查询的一个例子:) – Emech

2

正如@philipp说,你应该使用$ geoIntesects操作。我试图弄清查询的难度最大。我想我会分享它看起来的样子,并且可能在以后帮助别人解决麻烦。

db.addr_poly.find({ 
    loc:{ 
     $geoIntersects: { 
      $geometry: { 
       type: "Point" , 
       coordinates: [1, 1] 
      } 
     } 
    } 
}); 
+0

你能举一个例子如何使用Mongo Java驱动程序来做到这一点?或MongoTemplate。谢谢。 –

+0

我对两者的语法都不熟悉。抱歉。 –

相关问题