본문 바로가기

Database/mongoDB

$geoIntersects

※ MongoDB 공식 매뉴얼에 나와있는 $geoIntersects 부분을 번역해 보도록 하겠습니다. 번역을 안하는게 나을 것 같은 용어들은 한번만 번역하거나 그대로 두었습니다.

 

Definition (정의)

$geoIntersects

 

geospatial data 가 명시된 GeoJSON 객체와 교차되는 documents 를 선택합니다. 다시말해서, data 와 명시된 객체의 교차된 부분이 비어있지 않은 경우입니다.

 

$geoIntersects 연산자는 GeoJSON 객체를 명시하기 위해 $geometry 연산자를 사용합니다. 기본 좌표 참조 시스템 (CRS) 를 사용해서 GeoJSON polygon 혹은 multipolygon 을 명시하려면 다음의 문법을 사용해야 합니다 :

 

{
  <location field>: {
     $geoIntersects: {
        $geometry: {
           type: "<GeoJSON object type>" ,
           coordinates: [ <coordinates> ]
        }
     }
  }
}

 

단일 반구보다 큰 영역의 GeoJSON geometries 를 명시하는 $geoIntersects 의 경우 기본 CRS 를 사용하면 상호 보완적인 geometries 에 대한 쿼리가 생성됩니다.

 

커스텀 MongoDB CRS 와 함께 단일 링 GeoJSON polygon 을 명시하려면 $geometry 표현식에서 커스텀 MongoDB CRS 를 명시하는 다음의 프로토타입을 사용하세요 :

 

{
  <location field>: {
     $geoIntersects: {
        $geometry: {
           type: "Polygon" ,
           coordinates: [ <coordinates> ],
           crs: {
              type: "name",
              properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
           }
        }
     }
  }
}

 

커스텀 MongoDB CRS 는 시계 반대 방향으로 감는 순서를 사용하고, $geoIntersects 는 단일 반구보다 크거나 같은 영역의 단일 링 GeoJSON polygon 을 사용하여 쿼리를 지원할 수 있습니다. 만약 명시된 polygon 이 단일 반구보다 작으면, MongoDB CRS 와 함께 사용한 $geoIntersects 의 동작은 기본 CRS 를 사용한 것과 같습니다. "Big" Polygon 을 참고하세요.

 

중요

위도 경도 좌표를 명시하려면, 경도 - 위도 순으로 명시하세요 :

  • -180 <= 경도 <= 180
  • -90 <= 위도 <= 90

Behavior (동작)

Geospatial Indexes

$geoIntersects 는 구형의 geometry 를 사용하고, geospatial index 를 필요로 하지 않습니다. 그러나 geospatial index 는 쿼리 성능을 향상시킬 것입니다. 2dsphere geospatial index 만 $geoIntersects 를 지원합니다.

 

Degenerate Geometry

$geoIntersects 는 polygon 이 자체 모서리 / 자체 정점 / 정점과 모서리는 공유하지만 내부 공간이 없는 또다른 polygon 과 교차할 것이라고 보장하지 않습니다. 

 

“Big” Polygons

$geoIntersects 에서 단일 반구보다 더 큰 영역의 단일 링 polygon 을 명시하려면, 커스텀 MongoDB 좌표 참조 시스템을 $geometry 표현식에 포함해야 합니다. 그렇지 않으면, $geoIntersects 는 상호 보완적인 geometry 에 대한 쿼리를 수행합니다. 

반구보다 더 큰 영역을 가진 다른 모든 GeoJSON polygon 의 경우 $geoIntersects 는 상호 보완적인 geometry 에 대한 쿼리를 수행합니다.

 

Examples (예시)

Intersects a Polygon (Polygon 과 교차)

다음의 예시는 좌표 배열로 정의된 Polygon 과 교차하는 모든 위치 데이터를 선택하기 위해 $geoIntersects 를 사용합니다. polygon 의 영역은 단일 반구의 영역보다 작습니다 :

 

db.places.find(
   {
     loc: {
       $geoIntersects: {
          $geometry: {
             type: "Polygon" ,
             coordinates: [
               [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ]
             ]
          }
       }
     }
   }
)

 

단일 반구보다 더 큰 영역의 단일 링 polygon 의 경우엔 이 링크를 보세요.

Intersects a “Big” Polygon ("Big" polygon 과 교차)

단일 반구보다 더 큰 영역의 단일 링 GeoJSON polygon 으로 쿼리하기 위해선, $geomoetry 표현식은 반드시 커스텀 MongoDB 좌표 참조 시스템을 명시해야 합니다. 예시 :

 

db.places.find(
   {
     loc: {
       $geoIntersects: {
          $geometry: {
             type : "Polygon",
             coordinates: [
               [
                 [ -100, 60 ], [ -100, 0 ], [ -100, -60 ], [ 100, -60 ], [ 100, 60 ], [ -100, 60 ]
               ]
             ],
             crs: {
                type: "name",
                properties: { name: "urn:x-mongodb:crs:strictwinding:EPSG:4326" }
             }
          }
       }
     }
   }
)

 

 

출처 : https://docs.mongodb.com/manual/reference/operator/query/geoIntersects/#op._S_geoIntersects

 

$geoIntersects — MongoDB Manual

 

docs.mongodb.com

 

'Database > mongoDB' 카테고리의 다른 글

$near  (0) 2020.04.05
$geoWithin  (0) 2020.03.31
Geospatial Query Operators (Geospatial 쿼리 연산자)  (0) 2020.03.25
GeoJSON Objects (GeoJSON 객체)  (0) 2020.03.18
MongoDB - Find Restaurants with Geospatial Queries  (0) 2020.03.10