2013-11-23 56 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

我對兩者的語法都不熟悉。抱歉。 –

相關問題