* DOCSUP-2806: Add meta intro. * DOCSUP-2806: Update meta intro. * DOCSUP-2806: Fix meta. * DOCSUP-2806: Add quotes for meta headers. * DOCSUP-2806: Remove quotes from meta headers. * DOCSUP-2806: Add meta headers. * DOCSUP-2806: Fix quotes in meta headers. * DOCSUP-2806: Update meta headers. * DOCSUP-2806: Fix link to nowhere in EN. * DOCSUP-2806: Fix link (settings to tune) * DOCSUP-2806: Fix links. * DOCSUP-2806:Fix links EN * DOCSUP-2806: Fix build errors. * DOCSUP-2806: Fix meta intro. * DOCSUP-2806: Fix toc_priority in examples datasets TOC. * DOCSUP-2806: Fix items order in toc. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc order. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc index in create * DOCSUP-2806: Fix toc order in create. Co-authored-by: romanzhukov <romanzhukov@yandex-team.ru> Co-authored-by: alexey-milovidov <milovidov@yandex-team.ru>
6.1 KiB
toc_title |
---|
Функции для работы с системой Geohash |
Функции для работы с системой Geohash
Geohash — это система геокодирования, которая делит поверхность Земли на участки в виде "решетки", и каждую ячейку решетки кодирует в виде строки из букв и цифр. Система поддерживает иерархию (вложенность) ячеек, поэтому чем точнее определена геопозиция, тем длиннее строка с кодом соответствующей ячейки.
Для ручного преобразования географических координат в строку geohash можно использовать сайт geohash.org.
geohashEncode
Кодирует широту и долготу в строку geohash.
geohashEncode(longitude, latitude, [precision])
Входные значения
- longitude — долгота. Диапазон —
[-180°, 180°].
- latitude — широта. Диапазон —
[-90°, 90°].
- precision — длина результирующей строки, по умолчанию
12
. Опционально. Целое число в диапазоне[1, 12]
. Любое значение меньше, чем1
или больше12
автоматически преобразуются в12
.
Возвращаемые значения
- Строка с координатой, закодированной модифицированной версией алфавита base32.
Пример
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘
geohashDecode
Декодирует любую строку, закодированную в geohash, на долготу и широту.
geohashDecode(geohash_string)
Входные значения
geohash_string
— строка, содержащая geohash.
Возвращаемые значения
(longitude, latitude)
— широта и долгота. Кортеж из двух значений типа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.
!!! info "Замечание"
Все передаваемые координаты должны быть одного и того же типа: либо Float32
, либо Float64
.
Возвращаемые значения
- Массив строк, описывающих участки, покрывающие заданный участок. Длина каждой строки соответствует точности geohash. Порядок строк — произвольный.
-
!!! info "Замечание" Если возвращаемый массив содержит свыше 10 000 000 элементов, функция сгенерирует исключение.
Пример
Запрос:
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos
Результат:
┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘