2012-11-23 3 views
2

에서 MongoDB는 '2d'및 '3d'공간에서 주어진 위도와 경도 near 문서를 찾는 데 사용할 수있는 색인을 만들 수 있습니다.MongoDB는 지형 좌표계에서 거리를 계산하기 위해 어떤 종류의 수식을 사용합니까?

MongoDB는 주어진 위도/경도 쌍 사이의 거리를 찾기 위해 어떤 종류의 수식을 사용합니까?

내 마음에 와서 그 몇은 다음과 같습니다

  • 유클리드 거리
  • 하버 사인 포뮬러
  • Vincenty 공식

답변

3

MongoDB를 (2.2에서와 같은)에만 2-D 지리 공간 색인을 지원합니다 3-d가 아니다.

개별 위치는 MongoDB B- 트리 색인 위에 시스템 geohash을 사용하여 인코딩됩니다.

MongoDB 1.8+에서는 십진수를 사용하는 쿼리에 Spherical correction을 지원합니다. - Euclidean Distance

+0

Stennie, 그래서 나는이 같은 '2D'색인 컬렉션을 쿼리 할 때'db.runCommand ({geoNear 'my_collection', 가까운 : [my_lon, my_lat, 구형 : 사실, maxDistance : my_dist_in_radiants을})' mongodb는'n-Vector'를 사용할 것입니다, 그렇죠? 코드를 살펴 보겠습니다.하지만 지구를 완벽한 영역으로 취급합니까? – Gevorg

+0

@Stennie MongoDB의 $ near 및 javascript의 Haversine 수식에 의해 반환되는 거리가 다릅니다. 나는 자바 스크립트에서 MongoDB의 구형 인덱스가 사용하는 동일한 메소드를 사용하고자한다. 이걸 좀 도와 주실 래요? –

+0

@SandeepSharma이 답변은 MongoDB의 이전의'2d' 인덱스 유형을 가리키며, MongoDB 2.4 및 그 이후 버전의'2dsphere' 인덱스 유형으로 대체되었습니다. 두 가지 유형 모두 MongoDB 3.4에서 사용할 수 있으며'$ near'에서 사용할 수 있습니다. '2dsphere' 인덱스 계산은 [Haversine 공식] (https://github.com/mongodb/mongo/blob/ac84a0d028eff2b8ca42817d998cb8b34563816c/src/third_party/s2/)을 사용하는's2'라는 Google의 오픈 소스 C++ 라이브러리를 통해 제공됩니다. s2latlng.cC# L37). 그러나 JS에서 부동 소수점 계산은 C++보다 정확하지 않으므로 동일한 결과가 기대되지는 않습니다. – Stennie

관련 문제