2009-12-01 4 views
8

위도/경도로 표시되는 가장 가까운 위치를 계산하기 위해지도를 작은 그리드 (약 100x100 미터 격자)로 나누는 것을 고려했습니다. 기본적으로 각 점은 격자에 지정됩니다.글로브를 작은 눈금으로 나누면 눈금에 각 위도/경도 위치를 할당 할 수 있습니까?

나는 또한 MySQL 등에서 공간 인덱스를 사용할 수 있지만 공간 객체에 대한 인덱싱을 수행하기 어려운 Cassandra와 같은 비 관계형 데이터베이스를 사용할 계획이라는 것을 알고 있으므로 일종의 그리드 근사 기법 청초 할 수 있습니다.

그리드 시스템을 만들고 2D 공간 위치를 매핑하는 가장 좋은 방법은 무엇입니까?

편집 1 : 그리드가 완전히 균일하지 않을 경우 폴 주위에 더 잘 맞을 수도 있습니다.

+0

쉽지 않은데 ... 지구는 평평하지 않고 직사각형 그리드로 나눠지지 않습니다. – skaffman

+0

화려한 질문. 끝에서 무엇을 했니? – Zubair

+0

해결책을 얻었습니까? –

답변

4

직사각형 격자는 적당한 추정 일 수 있지만 극에 너무 가깝지 않은 비교적 작은 영역에서만 가능합니다. 풀 글로브 솔루션은 다른 접근법을 필요로합니다. 적절한 기술 수 ​​있습니다 정확한 응용 프로그램 요구 사항 Geohashing을 모른 채

+0

감사합니다 릭. 내 유스 케이스의 경우 그리드가 균일하지 않고 폴 주변의 영역에 적합하지 않은 경우 허용 가능하다고 생각합니다. – Nishith

+0

극좌표 (lat, long, radius)를 각 모서리에서 동일한 각도 거리로 사용하면 비 균일 그리드가 자연스럽게 발생합니다.대신 직교 좌표 (x, y, z)로 변환하면 색인 생성 등이 좀 더 쉬워집니다. 최선의 방법은 정확성과 속도와 같은 특정 요구 사항에 크게 의존합니다. – RickNZ

2

지구본을 균일하게 매핑하는 직사각형 격자를 만들 수 없습니다. 그리드가 균일해야한다면 대신 삼각형을 사용해야합니다. 그러나 일반적으로 이것이 귀하의 문제를 해결할 수 있을지는 의문입니다. 당신이 필요로하는 것은 2D octree입니다 (이것은 Google 검색 링크입니다.이 작품의 쉬운 단서를 위해 이미지를 확인하십시오) : 좌표를 계층으로 나눕니다 (예 : 원점의 북/남/동/서). 첫 번째 단계는 90도 사이).

그러면 기존 좌표를 포함하는 가장 작은 사각형을 신속하게 산출 할 수있는 몇 가지 선택을 할 수 있습니다. 이제 직사각형의 크기를 확인할 수 있습니다. 그것이 < 100m이라면, 해결책을 찾았습니다. 그렇지 않으면 체크 할 위치가 거의 없습니다 (대개 하나).

Google은 "octree sql database"를 구현합니다.

4

:. http://en.wikipedia.org/wiki/Geohash

는 "그것은 격자 모양의 버킷으로 공간을 세분화 계층 공간 데이터 구조입니다 Geohashes 임의의 정밀도와 가능성 등의 특성을 제공 코드의 끝에서 문자를 점차 제거하여 크기를 줄이거 나 점차 정밀도를 떨어 뜨립니다. "

7

2 차원 공간 좌표에서 공간 색인/geohash 로의 매핑은 흥미로운 문제입니다. this article on quadtrees, geohashes and Hilbert curves을보실 수 있습니다. Hilbert curve은 지역을 제공하는 공간 채우기 곡선입니다. 즉, 1 차원 공간 인덱스에서 가까운 항목이 2 차원 공간에서 가까이있을 것입니다.

목표는 다른 응답자가 설명한대로 서버에서 불필요한 데이터를 요청하지 않고 문제의 공간을 포괄하는 데 필요한 쿼리 수를 최소화하는 것입니다. 2 차원 공간에서 1 차원 색인으로 매핑하는 방법은 그 목표에 영향을 미칩니다.