Перейти к основному содержанию

Geohash

Geohash — это система геокодирования, которая разбивает поверхность Земли на ячейки сетки и кодирует каждую ячейку короткой строкой из букв и цифр. Это иерархическая структура данных, поэтому чем длиннее строка Geohash, тем точнее определяется географическое местоположение. Если вам нужно вручную преобразовать географические координаты в строки Geohash, вы можете воспользоваться geohash.org

geohashEncode

Кодирует широту и долготу в строку geohash. Синтаксис
geohashEncode(longitude, latitude, [precision])
Входные значения
  • longitude — Долгота координаты, которую нужно закодировать. Число с плавающей запятой в диапазоне [-180°, 180°]. Float.
  • latitude — Широта координаты, которую нужно закодировать. Число с плавающей запятой в диапазоне [-90°, 90°]. Float.
  • precision (необязательно) — Длина итоговой закодированной строки. По умолчанию — 12. Целое число в диапазоне [1, 12]. Int8.
  • Все параметры координат должны быть одного типа: либо Float32, либо Float64.
  • Для параметра precision любое значение меньше 1 или больше 12 без предупреждения преобразуется в 12.
Возвращаемые значения
  • Буквенно-цифровая строка с закодированной координатой (используется модифицированная версия алфавита кодирования base32). String.
Пример
Query
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res;
Response
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘

geohashDecode

Декодирует любую строку в формате geohash в долготу и широту. Синтаксис
geohashDecode(hash_str)
Входные значения
  • hash_str — строка, закодированная в формате Geohash.
Возвращаемые значения
  • Tuple (longitude, latitude) со значениями Float64, представляющими долготу и широту. Tuple(Float64)
Пример
SELECT geohashDecode('ezs42') AS res;
┌─res─────────────────────────────┐
│ (-5.60302734375,42.60498046875) │
└─────────────────────────────────┘

geohashesInBox

Возвращает массив строк в кодировке Geohash заданной точности, которые покрывают указанный прямоугольник, находясь внутри него или пересекая его границы; по сути, это двумерная сетка, развернутая в массив. Синтаксис
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)
Аргументы
  • longitude_min — Минимальная долгота. Диапазон: [-180°, 180°]. Float.
  • latitude_min — Минимальная широта. Диапазон: [-90°, 90°]. Float.
  • longitude_max — Максимальная долгота. Диапазон: [-180°, 180°]. Float.
  • latitude_max — Максимальная широта. Диапазон: [-90°, 90°]. Float.
  • precision — Точность Geohash. Диапазон: [1, 12]. UInt8.

Все параметры координат должны быть одного типа: либо Float32, либо Float64.
Возвращаемые значения
  • Массив строк Geohash длины precision, покрывающих указанную область; порядок элементов не гарантируется. Array(String).
  • [] — Пустой массив, если минимальные значения широты и долготы не меньше соответствующих максимальных значений.

Функция генерирует исключение, если итоговый массив содержит более 10’000’000 элементов.
Пример
Query
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos;
Response
┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘
Последнее изменение 10 июня 2026 г.