Строковые идентификаторы, которые кодируют географические координаты (широту и долготу) в короткую строку из букв и цифр, представляющую определенную область (ячейку) на Земле. Чем длиннее строка геохеша, тем меньше размер ячейки и выше точность местоположения. Это позволяет эффективно искать и индексировать географические данные, так как точки, расположенные близко друг к другу, имеют схожие префиксы в своих геохешах.

Как считается:

Москва, Красная площадь: 55.7539, 37.6208 → geohash = ucftvnjd9
  1. Координата:
  • широта (latitude) = 55.7539
  • долгота (longitude) = 37.6208
  1. Диапазоны
  • Широта: от −90 до +90
  • Долгота: от −180 до +180
  1. Берём долготу, делим диапазон пополам: [−180…0], [0…180].
37.6 в правой половине → бит 1.
  1. Потом берём широту, делим диапазон [−90…90] → [−90…0], [0…90].
55.7 в верхней → бит 1.
  1. Потом снова долгота: [0…180] → [0…90], [90…180].
37.6 в [0…90] → бит 0.
  1. Потом широта: [0…90] → [0…45], [45…90].
55.7 в [45…90] → бит 1.

… и так далее. Каждый шаг уточняет координату.

  1. Получение бинарной строки Из долготы/широты делаем биты, чередуя их: lonbit, latbit, lonbit, latbit.... Это даёт бинарное число.

  2. Кодирование 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.