본문으로 건너뛰기
AZ Tools

Geohash 인코더

위경도와 geohash 문자열(Niemeyer 2008) 양방향 변환. 정밀도 1-12 조정, 경계 박스 + 8방 이웃 셀까지 출력.

주요 도시
Geohash
wydm9qy89
중심 좌표
37.566483, 126.977985
경계 박스
S 37.566462, W 126.977963
N 37.566504, E 126.978006
8방 이웃 + 중심
북서
wydm9qy8b
북
wydm9qy8c
북동
wydm9qy8f
서
wydm9qy88
중심
wydm9qy89
동
wydm9qy8d
남서
wydm9qy82
남
wydm9qy83
남동
wydm9qy86

문자당 셀 크기가 반으로 줄어듭니다. 정밀도 9(~5m)는 배송용, 5(~5km)는 도시 단위 근접 검색에 적합.

사용법

  1. Encode 모드: 위도/경도(십진수, 예: 37.5665, 126.978)와 정밀도 선택.
  2. Decode 모드: geohash 붙여넣기 → 중심 좌표와 경계 박스 표시.
  3. 이웃 셀은 자동 계산 — 'X 근처 1km 검색' 같은 쿼리에서 주변 8개 셀까지 OR로 묶을 때 유용.

자세한 설명

펼치기

지오해시는 위도와 경도를 짧은 base-32 문자열로 접어 넣습니다. 세계를 반으로 계속 나누면서 점이 어느 쪽에 떨어졌는지 기록하는 방식입니다. 비트는 경도와 위도를 번갈아 쓰고 한 글자가 5비트이므로, 글자를 하나 더할 때마다 칸이 32분의 1로 줄어듭니다. 좌표를 1에서 12까지 원하는 정밀도로 인코딩하고, 경계 상자와 함께 디코딩하고, 이웃한 여덟 칸을 모두 볼 수 있습니다.

데이터베이스에서 쓸모를 만들어 내는 성질은 접두어입니다. 같은 칸에 있는 두 위치는 접두어를 공유하므로, LIKE 'u4pruy%'나 정렬된 키에 대한 범위 스캔만으로 공간 인덱스 없이 근처의 모든 것을 찾아낼 수 있습니다. 레디스 GEO와 예전 몽고DB 구성, 그리고 직접 만든 수많은 시스템이 바로 이 성질에 기대고 있습니다.

칸은 정사각형이 아니고, 모양이 번갈아 바뀝니다. 비트가 두 축을 번갈아 쓰기 때문에, 길이가 짝수인 지오해시는 위도보다 경도에 비트를 하나 더 쓴 상태입니다. 정밀도 8은 적도에서 가로 약 38미터, 세로 19미터인 칸을 주고, 정밀도 9는 양쪽 다 대략 4.8미터입니다. 정밀도 5는 약 4.9 km 사방이고 정밀도 12는 몇 센티미터입니다. 반경 질의를 위해 정밀도를 고르고 있다면, 기준으로 삼아야 할 값은 더 작은 쪽 치수입니다.

설계에서 감안할 한계가 둘 있습니다. 경도 1도가 그렇듯 칸도 극으로 갈수록 좁아집니다. 적도에서 38미터이던 칸이 서울에서는 가로 30미터, 북위 60도에서는 19미터, 70도에서는 13미터입니다. 한 도시를 기준으로 고른 정밀도는 다른 도시에서 다른 크기입니다. 그리고 접두어 성질은 하필 가장 아쉬운 지점에서 깨집니다. 1미터 떨어진 두 점이 그 사이로 칸 경계가 지나가면 접두어를 전혀 공유하지 않을 수 있고, 주요 경계는 적도와 본초자오선 위에 놓여 있습니다. 여덟 이웃을 곁다리가 아니라 정면에 보여 주는 이유가 그것입니다. 가운데 칸만 확인하는 근접 질의는, 자기가 찾아낸 것보다 더 가까운 점들을 놓칩니다.

자주 묻는 질문

알파벳이 어떻게 되나요?

Base-32, 0-9bcdefghjkmnpqrstuvwxyz — a, i, l, o는 시각적 혼동(4, 1, 1, 0과 비슷) 때문에 제외됩니다. 모든 geohash 라이브러리가 사용하는 표준 Niemeyer 알파벳입니다.

각 정밀도의 크기는?

문자가 하나 늘 때마다 경도·위도가 번갈아 절반으로 줄어듭니다. 적도 기준 대략적 셀 폭: 1→5000km, 3→156km, 5→4.9km, 7→153m, 8→38m, 9→4.8m, 12→3.7cm. 극지방으로 갈수록 좁아집니다.

이웃 셀이 왜 필요한가요?

Geohash 셀은 격자 형태입니다. 경계 근처의 점은 가장 가까운 이웃이 옆 셀에 있을 수 있어, '1km 이내 검색'은 대상 셀만 쿼리하면 안 되고 3×3 블록 전체를 봐야 합니다. 이웃 함수가 주변 8개 해시를 제공해 쿼리에 OR로 묶을 수 있습니다.

가까운 두 지점의 지오해시가 완전히 다른 이유는?

격자의 경계가 고정돼 있어서, 경계 양쪽에 놓인 점들은 접두사를 하나도 공유하지 않기 때문이다. 적도와 본초 자오선이 가장 분명한 예로, 이웃한 점들이 첫 글자부터 다르다. 그래서 접두사 길이는 가까움을 재는 척도가 아니라 하한선이다. 접두사가 같으면 가깝다는 것이 증명되지만, 다르다고 해서 아무것도 증명되지 않는다.

지오해시로 반경 검색은 어떻게 하나?

반경과 비슷한 크기의 셀이 나오는 정밀도에서 중심이 속한 셀을 잡고, 그 여덟 이웃을 더한 뒤, 해시가 그 아홉 접두사 중 하나로 시작하는 것들을 질의하면 된다. 이렇게 하면 원을 조금 더 큰 사각 영역으로 덮게 되므로, 결과는 실제 거리로 한 번 더 걸러야 한다. 접두사는 색인이지 답이 아니다.

관련 도구