문서 메뉴
문서 홈
/ / /
C#/.NET
/

지리공간적 검색

이 페이지의 내용

  • 개요
  • 지리 공간적 데이터 형식
  • GeoJSON
  • 레거시 좌표 쌍
  • 지리 공간적 인덱스
  • 쿼리 연산자
  • 예제
  • 근접성 기준 쿼리
  • 다각형별 쿼리
  • 추가 리소스

이 가이드에서는 지리 공간적 데이터, 데이터 형식, 인덱스 및 쿼리로 작업하는 방법을 배울 수 있습니다.

지리 공간적 데이터는 지구 표면의 지리적 위치를 나타냅니다.

지리 공간적 데이터의 예는 다음과 같습니다:

  • 영화관 위치

  • 국가 경계

  • 자전거 라이딩 경로

  • 뉴욕의 반려견 운동 공간

  • 그래프의 포인트

MongoDB의 모든 지리 공간적 데이터는 다음 형식 중 하나로 저장됩니다:

  • 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 사양을 참조하세요.

레거시 좌표 쌍을 사용하여 2차원 평면에 지리 공간적 정보를 나타내는 데이터를 저장합니다.

레거시 좌표 쌍은 두 값의 배열로 표시되며, 첫 번째 값은 x 축 값을 나타내고 두 번째 값은 y 축 값을 나타냅니다.

레거시 좌표 쌍에 대한 자세한 내용은 레거시 좌표 쌍에 대한 MongoDB 서버 매뉴얼 페이지를 참조하세요.

지리 공간적 데이터에 대한 쿼리를 활성화하려면 데이터 형식에 해당하는 인덱스를 생성해야 합니다. 다음 인덱스 유형은 지리 공간적 쿼리를 활성화합니다.

  • 2dsphere, GeoJSON 데이터에 사용

  • 2d, 레거시 좌표 쌍에 사용

지리 공간적 인덱스를 만드는 방법에 대해 자세히 알아보려면 인덱스 가이드의 지리 공간적 인덱스 섹션을 참조하세요.

지리 공간적 데이터를 쿼리하려면 다음 쿼리 연산자 중 하나를 사용합니다.

  • $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 }

돌아가기

사용 중 암호화

다음

FAQ