지리공간적 검색
개요
이 가이드 에서는 지리 공간적 데이터, 데이터 형식, 인덱스 및 쿼리로 작업하는 방법을 학습 수 있습니다.
지리 공간적 데이터는 지구 표면의 지리적 위치 를 나타냅니다.
지리 공간적 데이터의 예시는 다음과 같습니다:
영화관 위치
국가 경계
자전거 라이딩 경로
뉴욕의 반려견 운동 공간
그래프의 포인트
지리 공간적 데이터 형식
MongoDB의 모든 지리 공간적 데이터는 다음 형식 중 하나로 저장됩니다:
GeoJSON은 지구와 같은 구체에 지리 공간적 데이터를 나타내는 형식입니다.
legacy coordinate pairs 으로, 유클리드 평면에서 지리 공간적 데이터를 나타내는 형식입니다.
GeoJSON
지구와 같은 구체에 지리 공간적 정보를 나타내는 데이터를 저장하려면 GeoJSON을 사용합니다. GeoJSON은 하나 이상의 위치와 유형으로 구성됩니다.
위치
위치는 단일 위치 를 나타내며 코드에서 다음 값을 포함하는 배열 로 존재합니다.
첫 번째 위치의 경도(필수)
두 번째 위치의 위도(필수)
세 번째 위치의 고도(선택 사항)
다음은 뉴욕에 있는 MongoDB 본사의 위치 입니다.
GeoJson.Position(-73.986805, 40.7620853)
또는 GeoJson.Geographic()
메서드를 사용하여 좌표 쌍을 구성할 수 있습니다.
GeoJson.Geographic(-73.986805, 40.7620853)
중요
경도, 위도 순서
GeoJSON 은 경도를 먼저, 위도를 두 번째로 좌표를 정렬합니다. OpenStreetMap 및 Google Maps와 같은 널리 사용되는 도구는 위도를 먼저, 경도를 다음으로 좌표를 표시하므로 작업 중인 다른 도구가 어떤 형식을 사용하는지 확인하세요.
유형
GeoJSON 객체 의 유형에 따라 해당 객체가 나타내는 기하학적 모양이 결정됩니다. 기하학적 도형은 위치로 구성됩니다.
다음은 몇 가지 일반적인 GeoJSON 유형과 이를 위치로 지정하는 방법입니다:
Point
: 단일 위치입니다. 다음Point
는 MongoDB 본사의 위치를 나타냅니다.GeoJson.Point(GeoJson.Position(-73.986805, 40.7620853)) LineString
: 일련의 라인 세그먼트를 형성하는 두 개 이상의 위치 배열 입니다.LineString
은 경로, 루트, 경계 또는 기타 선형 지리 공간적 데이터를 나타낼 수 있습니다. 다음LineString
은 중국 만리장성의 세그먼트를 나타냅니다.GeoJson.LineString ( GeoJson.Position(116.572, 40.430), GeoJson.Position(116.570, 40.434), GeoJson.Position(116.567, 40.436), GeoJson.Position(116.566, 40.441) ) Polygon
: 첫 번째 위치와 마지막 위치가 동일하고 일부 공간을 둘러싸는 위치 배열 입니다. 다음Polygon
는 바티칸 시국 내의 땅을 대략적으로 나타냅니다.GeoJson.Polygon ( GeoJson.Position(12.446086, 41.901977), GeoJson.Position(12.457952, 41.901559), GeoJson.Position(12.455375, 41.907351), GeoJson.Position(12.449863, 41.905186), GeoJson.Position(12.446086, 41.901977) }
MongoDB에서 사용할 수 있는 GeoJSON 유형에 대한 자세한 내용은 GeoJSON 수동 항목을 참조하세요.
GeoJSON 형식에 대한 자세한 내용은 공식 IETF 사양을 참조하세요.
레거시 좌표 쌍
legacy coordinate pairs 을 사용하여 2차원 평면에 지리 공간적 정보를 나타내는 데이터를 저장 합니다.
legacy coordinate pairs 은 두 값의 배열 로 표시되며, 첫 번째 값은 x
축 값을 나타내고 두 번째 값은 y
축 값을 나타냅니다.
레거시 좌표 쌍에 대한 자세한 내용은 레거시 좌표 쌍에 대한 MongoDB 서버 매뉴얼 페이지를 참조하세요.
지리 공간적 인덱스
지리 공간적 데이터에 대한 쿼리를 활성화하려면 데이터 형식에 해당하는 인덱스를 생성해야 합니다. 다음 인덱스 유형은 지리 공간적 쿼리를 활성화합니다.
2dsphere
, GeoJSON 데이터에 사용2d
, legacy coordinate pairs에 사용
지리 공간적 인덱스를 만드는 방법에 학습 보려면 인덱스 가이드 의 지리 공간적 인덱스 섹션을 참조하세요.
쿼리 연산자
지리 공간적 데이터를 쿼리 하려면 다음 쿼리 연산자 중 하나를 사용합니다.
$near
$geoWithin
$nearSphere
$geoIntersects
( 2dsphere 인덱스 필요)
$near
연산자를 사용할 때 다음과 같은 거리 연산자를 지정할 수 있습니다.
$minDistance
$maxDistance
$geoWithin
연산자를 사용할 때 다음과 같은 도형 연산자를 지정할 수 있습니다:
$box
$polygon
$center
$centerSphere
지리 공간적 쿼리 연산자에 대한 자세한 내용은 서버 매뉴얼의 지리 공간적 쿼리 연산자 를 참조하세요.
예시
다음 예제에서는 MongoDB Atlas 샘플 데이터 세트를 사용합니다. 이 샘플 데이터 세트를 얻으려면 빠른 시작을 참조하세요.
이 예에서는 샘플 데이터 집합의 sample_mflix
데이터베이스에 있는 theaters
컬렉션을 사용합니다. 2} 컬렉션에 필드에 theaters
2dsphere
인덱스가 포함되어 location.geo
있습니다.
근접성 기준 쿼리
다음 예시 에서는 뉴욕주 뉴욕에 있는 MongoDB 본사에서 1000 미터 이내에 있는 location.geo
필드 값이 있는 문서를 쿼리합니다. 가장 가까운 문서부터 가장 먼 문서까지 반환합니다.
// Point representation of the MongoDB Headquarters var point = GeoJson.Point(GeoJson.Position(-73.986805, 40.7620853)); // Specifies a maxDistance of 1000 meters and a minDistance of 0 meters var filter = Builders<Theater>.Filter.Near(m => m.Location.Geo, point, 1000.0, 0.0); // Only fetches the _id and theaterId fields var projection = Builders<Theater>.Projection.Include("theaterId"); var results = collection.Find(filter).Project(projection);
이전 예시의 결과에는 다음 문서가 포함됩니다.
{ "_id" : ObjectId("59a47287cfa9a3a73e51e8e2"), "theaterId" : 1908 } { "_id" : ObjectId("59a47286cfa9a3a73e51e838"), "theaterId" : 1448 }
다각형별 쿼리
다음 예시 에서는 맨해튼 경계 내에 존재하는 location.geo
필드 값이 있는 문서를 쿼리합니다.
// Polygon representation of Manhattan var polygon = GeoJson.Polygon ( GeoJson.Position(-73.925492, 40.877410), GeoJson.Position(-73.910372, 40.872366), GeoJson.Position(-73.935127, 40.834020), GeoJson.Position(-73.929049, 40.798569), GeoJson.Position(-73.976485, 40.711432), GeoJson.Position(-74.015747, 40.701229), GeoJson.Position(-74.018859, 40.708367), GeoJson.Position(-74.008007, 40.754307), GeoJson.Position(-73.925492, 40.877410) ); var filter = Builders<Theater>.Filter.GeoWithin(m => m.Location.Geo, polygon); // Only fetches the _id and theaterId fields var projection = Builders<Theater>.Projection.Include("theaterId"); var results = collection.Find(filter).Project(projection);
이전 예시의 결과에는 다음 문서가 포함됩니다.
{ "_id" : ObjectId("59a47287cfa9a3a73e51e8e2"), "theaterId" : 1908 } { "_id" : ObjectId("59a47287cfa9a3a73e51eccb"), "theaterId" : 835 } { "_id" : ObjectId("59a47286cfa9a3a73e51e838"), "theaterId" : 1448 } { "_id" : ObjectId("59a47286cfa9a3a73e51e744"), "theaterId" : 1028 } { "_id" : ObjectId("59a47287cfa9a3a73e51ebe1"), "theaterId" : 609 } { "_id" : ObjectId("59a47287cfa9a3a73e51e8ed"), "theaterId" : 1906 } { "_id" : ObjectId("59a47287cfa9a3a73e51e87d"), "theaterId" : 1531 } { "_id" : ObjectId("59a47287cfa9a3a73e51eb63"), "theaterId" : 482 }
추가 리소스
지리 공간적 데이터 작업에 대한 자세한 내용은 지리 공간적 데이터 수동 입력 문서를 참조하세요.
지원되는 GeoJSON 유형에 대한 자세한 내용은 GeoJSON 수동 항목을 참조하세요.
지리 공간적 쿼리 연산자에 대한 자세한 내용은 지리 공간적 쿼리 수동 항목 문서를 참조하세요.