2014-06-16 2 views
0

다른 영역을 나타내는 많은 다각형 좌표가있는 콜렉션이 있습니다. 내 목표는 mongodb 쿼리에서 lat, long 및 radius를 보내어 원 영역 내에있는 다각형 좌표를 반환해야합니다.MongoDB 단일 점과 반경을 사용하여 다각형 좌표 찾기

다각형 좌표 :

{ 
    "_id" : "300", 
    "name" : "MeKesler", 
    "centroid" : [ 
     0, 
     0 
    ], 
    "type" : "cnbd_id", 
    "coords" : [ 
     [ 
      39.8620784017, 
      -86.14614844330004 
     ], 
     [ 
      39.8625395793, 
      -86.15442037579999 
     ], 
     [ 
      39.8593030353, 
      -86.156373024 
     ], 
     [ 
      39.8586935926, 
      -86.15669488909998 
     ], 
     [ 
      39.8534225112, 
      -86.15854024890001 
     ], 
     [ 
      39.850391456, 
      -86.1589050293 
     ], 
     [ 
      39.8511657057, 
      -86.1479830742 
     ], 
     [ 
      39.8511986523, 
      -86.14598751070002 
     ], 
     [ 
      39.856881704, 
      -86.14605188370001 
     ], 
     [ 
      39.8575241063, 
      -86.14605188370001 
     ], 
     [ 
      39.8620784017, 
      -86.14614844330004 
     ] 
    ] 
} 

내 쿼리 :

db.collection.find({ 
    "coords" : { 
     "$within" : { 
      "$center" : [ 
       [ 39.863110, -86.168456], 
       2/69.1 
      ] 
     } 
    } 
}) 

는 사람이에 도와 드릴까요?

+0

다각형 정의의 구문을 인식하지 못합니다. geojson이되어야하나요? "cnbd_id"는 무엇을 의미합니까? – amenadiel

+0

이것은 내 전체 문서이며 geoJson입니다. "cnbd_id"는 유형 중 하나입니다. "coords"는 모든 다각형의 좌표를 포함하는 배열입니다. – Prakki

답변

2

나는 문서가 유효한 geojson이 아니라는 것이 문제라고 생각합니다. 당신의 다각형에 대한 유효한 구문은 지오메트리 필드에 2dsphere index을 만드는 고려해야한다, 또한

{ 
    "_id": "300", 
    "name": "MeKesler", 
    "centroid": { 
     type: "Point", 
     coordinates: [0, 0] 
    }, 
    "type": "cnbd_id", 

    "geometry": { 
     "type": "Polygon", 
     "coordinates": [ 
      [ 
       [39.8620784017, -86.14614844330004], 
       [39.8625395793, -86.15442037579999], 
       [39.8593030353, -86.156373024], 
       [39.8586935926, -86.15669488909998], 
       [39.8534225112, -86.15854024890001], 
       [39.850391456, -86.1589050293], 
       [39.8511657057, -86.1479830742], 
       [39.8511986523, -86.14598751070002], 
       [39.856881704, -86.14605188370001], 
       [39.8575241063, -86.14605188370001], 
       [39.8620784017, -86.14614844330004] 
      ] 
     ] 
    } 
} 

될 것이다.

마지막으로 geo 쿼리는 $geoWithin 연산자를 사용하고 해당 좌표와 다르게 다각형에 대해 실행해야합니다.

db.collection.find({ 
    "geometry" : { 
     "$geoWithin" : { 
      "$center" : [ 
       [ 39.863110, -86.168456], 
       2/69.1 
      ] 
     } 
    } 
}) 
+0

내가 게시 한 문서는 개발을 위해 얻은 것입니다. 친절한 답장을 보내 주셔서 감사합니다. 나는 당신의 대본을 시험해보고 당신에게 돌아갈 것입니다. – Prakki

+0

레거시 좌표 쌍처럼 취급하는 경우 데이터를 사용할 수 있습니다. coord 필드에 2d 인덱스 대신 2d 인덱스를 작성해야합니다. [Geospatial Query Compatibility] (http://docs.mongodb.org/manual/reference/operator/query-geospatial/#geospatial-query-compatibility-chart)를 참조하십시오. – amenadiel