2008년 2월, 구스타보 니마이어는 geohash를 소개하고 geohash.org를 출시했다. 이는 지리적 위치를 문자와 숫자로 된 짧은 문자열로 인코딩하는 퍼블릭 도메인 지오코드 시스템이다. 아이디어는 좌표를 이메일, URL 또는 데이터베이스 키에 쓸 수 있는 무언가로 만드는 것이었다.

핵심은 접두사에 담긴 계층 구조다. geohash는 위도와 경도의 비트를 교차 배치하고 이를 base32로 인코딩한다. 문자 하나가 추가될 때마다 5비트의 정밀도가 더해지고, 이전 셀의 32개 하위 셀 중 하나를 식별한다. 가까운 위치는 일반적으로 접두사를 공유하며, 끝에서 문자를 잘라내면 코드는 유효한 채로 영역이 줄어든다.

이러한 특성이 geohash를 표준으로 만들었다. Elasticsearch는 지오포인트가 geohash, 즉 위도와 경도 비트를 교차 배치한 base32 문자열로 표현될 수 있다고 문서화하고, 이를 인덱싱과 그리드 집계에 사용한다. 따라서 근접 검색은 이미 존재하는 인덱스에 대한 문자열 접두사 검색이 된다.

접두사가 근접성을 뜻하는 하나의 문자열

접두사 길이가 정밀도와 근접성을 동시에 담당하므로, 하나의 필드가 둘 다 수행한다.

짧은 문자열은 좌표 쌍보다 공유하기 쉽다.

기존 문자열 인덱스는 지리공간 작업을 위해 새로운 장치가 필요 없다.

퍼블릭 도메인으로 공개되어 이를 거부할 라이선스상 이유가 사라졌다.

2차원 문제를 1차원 키로 압축하면 모든 기존 문자열 인덱스가 공간 인덱스가 된다. 접두사 길이가 정밀도와 근접성을 모두 인코딩하므로 새로운 장치가 필요 없다.

geohash는 위치를 표현하고 인덱싱하는 표준 방식이 되었다. Elasticsearch는 geohash 지오포인트와 geohash 그리드 집계를 문서화하며, 문자열 형태 덕분에 캐시, URL, 데이터베이스 키에 자연스럽게 어울렸다. 이제 geohash는 지리공간 인덱스 뒤에 있는 기본 인코딩 중 하나이다.

근거 확인하기

출처

  1. Geohash (lat/lon encoding) Movable Type Scripts · movable-type.co.uk
  2. Geo-point field type Elastic · elastic.co
  3. Geohash Wikipedia · en.wikipedia.org