Кодер и декодер геохеша
Приватность по умолчанию — работает полностью в вашем браузере
В режиме encode введите широту и долготу (со слайдером точности), чтобы получить строку геохеша. В режиме decode вставьте хеш, чтобы увидеть центр ячейки и координаты её юго-западного и северо-восточного углов. Подходит для пространственных индексов, поиска по близости и псевдонимизированного хранения локации.
Что в действительности кодирует геохеш
Геохеш чередует биты долготы и широты, а затем кодирует результат в base32 со специальным алфавитом (0–9 и b–z без a/i/l/o). Каждый символ добавляет 5 бит точности, поочерёдно уточняя долготу и широту. На выходе короткая URL-безопасная строка, у которой совпадение по префиксу означает пространственное вложение: любой геохеш, начинающийся с «dr5ru», лежит внутри ячейки dr5ru.
Точность и размер ячейки
При точности 1 мир делится на 32 ячейки шириной ≈ 5000 км. Точность 5 (≈ 4,9 км около экватора) подходит для группировки на уровне района. Точность 9 (≈ 5 м) — это масштаб отдельного здания. Точность 12 ≈ 4 см, и она нужна редко вне геодезии. Ячейки уменьшаются по мере приближения к полюсам.
Зачем использовать геохеши
Префиксы строк отлично индексируются в PostgreSQL, Redis, DynamoDB и SQLite. Чтобы найти точки в радиусе 5 км от цели, посчитайте её геохеш на точности 5 и ищите по префиксу — это гораздо дешевле запросов по большому кругу. Эффект границы ячейки реален, поэтому в проде запрашивают целевой хеш плюс восемь соседей. Геохеш проще и старше S2/H3 и остаётся самой лёгкой схемой индексирования для горячих запросов по близости.
Часто задаваемые вопросы
- Почему точность 5 покрывает целый город?
- Каждый символ — это 5 бит, поэтому точность 5 = 25 бит ≈ ячейки 4,9 км × 4,9 км около экватора. Города в пару километров умещаются в одной ячейке, поэтому многие сервисы такси и доставки группируют водителей и заказы по геохешу точности 5 для быстрого сопоставления.
- Две близкие точки оказались с разными геохешами — это баг?
- Нет, это особенность сетки. Точки по разные стороны границы ячейки могут не иметь общего префикса даже на расстоянии метра. В проде вместе с целевым хешем запрашивают восемь соседей (кольцо 3×3).
- Какой алфавит у геохеша?
- 0–9 плюс b–z кроме a, i, l, o. Эти буквы исключены, чтобы их не путали с 0/1 в шрифтах с низким контрастом. Это base32 с нестандартным алфавитом, отличный от base32 RFC 4648.
- Чем геохеш отличается от S2 и H3?
- Геохеш самый простой и старый из трёх. S2 (куб на сфере) и H3 (гексагональная сетка) лучше справляются с искажениями у полюсов, но требуют больше кода. Для большинства задач близости в приложениях геохеша достаточно; на планетарных масштабах S2/H3 окупаются.
- Можно ли безопасно индексировать геохеши в PostgreSQL?
- Можно. Сохраняйте хеш как text-колонку с btree-индексом и префиксный поиск (LIKE 'dr5ru%') станет очень быстрым. Для пространственных запросов добавьте PostGIS, но в большинстве случаев хватает префиксов.
- Сохраняет ли Toova координаты, которые я кодирую?
- Нет. Кодирование и декодирование выполняется JavaScript этой страницы. Координаты и итоговый хеш не попадают на сервер Toova.