2013-11-23 4 views
5

MongoDB (2.4.8)에 많은 폴리곤을 삽입하고, 지정된 Point가있는 폴리곤을 찾기를 희망합니다. 일반적인 질문입니다. 그러나 Google에서 모든 문서를 읽은 후에 결과를 얻지 못했습니다. 그래서이 질문을 만드십시오.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 연산자는 2d 인덱스가 아닌 2dsphere 인덱스에서만 작동합니다.

+0

작동합니다! 방금 $ geo를 시도해 죄송합니다. 필립, 정말 고마워! – 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 Driver를 사용하여 어떻게 수행 할 수 있습니까? 또는 MongoTemplate. 감사. –

+0

나는 둘 중 하나의 문법에 익숙하지 않다. 죄송합니다. –