2013-12-12 5 views
1

메신저 및 지형 공간으로 내 머리가 부러 지므로 누군가가이 문제를 해결할 방법이나 해결책을 가지고있을 수 있습니다. 내 개체 스키마는 http://geojson.org/geojson-spec.html에서 가져온 geoJSON의 샘플과 같습니다.mongodb 및 geospatial 스키마

{ 
"name":"name", 
"geoJSON":{ 
"type":"FeatureCollection", 
"features":[ 
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":{}}, 
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":{}}, 
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]},"properties":{}} 
]}} 

추가 정보 : 스프링 데이터를 사용하고 있지만 답변에 영향을 미치지 않아야합니다. 주요 문제는이 스키마에 인덱스를 배치하는 방법/위치입니다. 일부 다각형이 교차하는 경우 주어진 Point에 대한 모든 문서를 찾기 위해 쿼리를 작성해야합니다.

미리 감사드립니다.

답변

2

geoJSON.features.geometry에 2d 또는 2dsphere 색인을 생성하면 모든 geoJSON 개체를 포함하는 색인을 생성 할 수 있습니다.

features 배열의 하위 오브젝트 중 적어도 하나는 특정 지점을 포함 모든 문서를 얻으려면, 당신은 geoJSON 포인트로 $geoIntersects 연산자를 사용할 수 있습니다 :

db.yourcollection.find( 
      { `geoJSON.features.geometry` : 
       { $geoIntersects : 
       { $geometry : 
        { type : "Point" , 
        coordinates: [ 100.5 , 0.5 ] 
        } 
       } 
       } 
      } 
     ) 
+0

이 도움말 경우, 나는거야 너 한테 맥주 사다. – Zemzela

+0

같은 인덱스를 추가하여 : db. .jpure 인덱스 ({ "geoJSON.features.geometry": "2dsphere"})와 다음 쿼리를 사용하여 . db. .find ({ "geoJSON.features.geometry": {$ geoIntersects : {$ geometry : {type : "Point", 좌표 : [100,0]}}}}) – Zemzela