Строковые идентификаторы, которые кодируют географические координаты (широту и долготу) в короткую строку из букв и цифр, представляющую определенную область (ячейку) на Земле. Чем длиннее строка геохеша, тем меньше размер ячейки и выше точность местоположения. Это позволяет эффективно искать и индексировать географические данные, так как точки, расположенные близко друг к другу, имеют схожие префиксы в своих геохешах.
Как считается:
Москва, Красная площадь: 55.7539, 37.6208 → geohash = ucftvnjd9
- Координата:
- широта (latitude) = 55.7539
- долгота (longitude) = 37.6208
- Диапазоны
- Широта: от −90 до +90
- Долгота: от −180 до +180
- Берём долготу, делим диапазон пополам: [−180…0], [0…180].
37.6 в правой половине → бит 1.
- Потом берём широту, делим диапазон [−90…90] → [−90…0], [0…90].
55.7 в верхней → бит 1.
- Потом снова долгота: [0…180] → [0…90], [90…180].
37.6 в [0…90] → бит 0.
- Потом широта: [0…90] → [0…45], [45…90].
55.7 в [45…90] → бит 1.
… и так далее. Каждый шаг уточняет координату.
-
Получение бинарной строки Из долготы/широты делаем биты, чередуя их:
lonbit, latbit, lonbit, latbit...
. Это даёт бинарное число. -
Кодирование base32 Каждые 5 бит группируются и переводятся в base32-символ по таблице:
0 → 0, 1 → 1, 2 → 2, …, 9 → 9,
10 → b, 11 → c, 12 → d, …, 31 → z
Так появляются буквы u, c, f, t, v, n, j, d, 9.