Функции для работы с индексами H3
Индекс H3
H3 — это система географического индексирования, в которой поверхность Земли разбита на сетку равновеликих шестиугольных ячеек. Эта система иерархическая, т. е. каждый шестиугольник на верхнем уровне («родитель») может быть разделён на семь таких же, но меньших («потомки»), и так далее.
Уровень иерархии называется resolution и может принимать значения от 0 до 15, где 0 — это базовый уровень (base) с наибольшими и наиболее грубыми ячейками.
Пара «широта–долгота» может быть преобразована в 64-битный индекс H3, идентифицирующий ячейку сетки.
Индекс H3 используется в первую очередь для разбиения (bucketing) местоположений и других геопространственных операций.
Полное описание системы H3 доступно на сайте Uber Engineering.
h3IsValid
Проверяет, является ли число допустимым индексом H3.
Синтаксис
Параметр
h3index— номер шестиугольного индекса. UInt64.
Возвращаемые значения
- 1 — число является допустимым H3-индексом. UInt8.
- 0 — число не является допустимым H3-индексом. UInt8.
Пример
Запрос:
Результат:
h3GetResolution
Определяет разрешение заданного индекса H3.
Синтаксис
Параметр
h3index— номер шестиугольного индекса. UInt64.
Возвращаемые значения
- Разрешение индекса. Диапазон:
[0, 15]. UInt8. - Если индекс некорректен, функция возвращает случайное значение. Используйте h3IsValid для проверки индекса. UInt8.
Пример
Запрос:
Результат:
h3EdgeAngle
Вычисляет среднюю длину ребра шестиугольной ячейки H3 в градусах.
Синтаксис
Параметр
resolution— разрешение индекса. UInt8. Диапазон:[0, 15].
Возвращаемые значения
Пример
Запрос:
Результат:
h3EdgeLengthM
Вычисляет среднюю длину ребра шестиугольной ячейки H3 в метрах.
Синтаксис
Параметр
resolution— разрешение индекса. UInt8. Диапазон:[0, 15].
Возвращаемое значение
Пример
Запрос:
Результат:
h3EdgeLengthKm
Вычисляет среднюю длину ребра шестиугольника H3 в километрах.
Синтаксис
Параметр
resolution— Разрешение индекса. UInt8. Диапазон:[0, 15].
Возвращаемые значения
Пример
Запрос:
Результат:
geoToH3
Возвращает индекс точки H3 для координат (lat, lon) с указанным разрешением.
Синтаксис
Аргументы
lat— широта. Float64.lon— долгота. Float64.resolution— разрешающая способность индекса. Диапазон:[0, 15]. UInt8.
Возвращаемые значения
Примечание: в ClickHouse v25.4 и более ранних версиях geoToH3() принимает аргументы в порядке (lon, lat). Начиная с ClickHouse v25.5, входные значения передаются в порядке (lat, lon). Предыдущее поведение можно восстановить с помощью настройки geotoh3_argument_order = 'lon_lat'.
Пример
Запрос:
Результат:
h3ToGeo
Возвращает широту и долготу центроида, соответствующие указанному индексу H3.
Синтаксис
Аргументы
h3Index— индекс H3. UInt64.
Возвращаемые значения
Примечание: в ClickHouse v24.12 и более ранних версиях h3ToGeo() возвращает значения в порядке (lon, lat). Начиная с ClickHouse v25.1, возвращаемые значения идут в порядке (lat, lon). Предыдущее поведение можно восстановить с помощью настройки h3togeo_lon_lat_result_order = true.
Пример
Запрос:
Результат:
h3ToGeoBoundary
Возвращает массив пар (lat, lon), соответствующих границе указанного индекса H3.
Синтаксис
Аргументы
h3Index— индекс H3. UInt64.
Возвращаемые значения
Пример
Запрос:
Результат:
h3kRing
Перечисляет все шестиугольники H3 в радиусе k от указанного шестиугольника в случайном порядке.
Синтаксис
Аргументы
Возвращаемые значения
Пример
Запрос:
Результат:
h3PolygonToCells
Возвращает шестиугольники (при указанном разрешении), которые находятся внутри заданной геометрии — кольца или (мульти)полигона.
Синтаксис
Аргументы
geometryможет быть одним из следующих гео-типов данных или их соответствующих примитивных типов:resolution— разрешение индекса. Диапазон:[0, 15]. UInt8.
Возвращаемые значения
Пример
Запрос:
Результат:
h3GetBaseCell
Возвращает номер базовой ячейки индекса H3.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
- номер базовой ячейки шестиугольника. UInt8.
Пример
Запрос:
Результат:
h3HexAreaM2
Возвращает среднюю площадь шестиугольника в квадратных метрах для указанного разрешения.
Синтаксис
Параметр
resolution— Разрешение индекса. Диапазон значений:[0, 15]. UInt8.
Возвращаемое значение
- Площадь в квадратных метрах. Float64.
Пример
Запрос:
Результат:
h3HexAreaKm2
Возвращает среднюю площадь шестигранной ячейки в квадратных километрах для заданного разрешения.
Синтаксис
Параметр
resolution— Разрешение индекса. Диапазон значений:[0, 15]. UInt8.
Возвращаемое значение
- Площадь в квадратных километрах. Float64.
Пример
Запрос:
Результат:
h3IndexesAreNeighbors
Возвращает, являются ли указанные индексы H3 соседними.
Синтаксис
Аргументы
Возвращаемое значение
Пример
Запрос:
Результат:
h3ToChildren
Возвращает массив дочерних индексов для заданного индекса H3.
Синтаксис
Аргументы
index— номер H3-индекса (шестиугольника). UInt64.resolution— разрешение индекса. Диапазон:[0, 15]. UInt8.
Возвращаемые значения
Пример
Запрос:
Результат:
h3ToParent
Возвращает родительский (более крупного уровня) индекс, содержащий заданный индекс H3.
Синтаксис
Аргументы
index— номер шестиугольного индекса H3. UInt64.resolution— разрешение индекса. Диапазон:[0, 15]. UInt8.
Возвращаемое значение
- Родительский индекс H3. UInt64.
Пример
Запрос:
Результат:
h3ToString
Преобразует представление индекса типа H3Index в строковое представление.
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
- Строковое представление индекса H3. String.
Пример
Запрос:
Результат:
stringToH3
Преобразует строковое представление в представление типа H3Index (UInt64).
Синтаксис
Параметр
index_str— Строковое представление индекса H3. String.
Возвращаемое значение
- Номер шестиугольника индекса. В случае ошибки возвращает 0. UInt64.
Пример
Запрос:
Результат:
h3GetResolution
Возвращает уровень разрешения индекса H3.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
- Разрешение индекса. Диапазон:
[0, 15]. UInt8.
Пример
Запрос:
Результат:
h3IsResClassIII
Возвращает, имеет ли индекс H3 разрешение с ориентацией класса III.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
1— индекс имеет разрешение с ориентацией класса III. UInt8.0— индекс не имеет разрешения с ориентацией класса III. UInt8.
Пример
Запрос:
Результат:
h3IsPentagon
Возвращает, представляет ли этот индекс H3 пятиугольную ячейку.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
1— индекс соответствует пятиугольной ячейке. UInt8.0— индекс не соответствует пятиугольной ячейке. UInt8.
Пример
Запрос:
Результат:
h3GetFaces
Возвращает грани икосаэдра, пересекаемые заданным индексом H3.
Синтаксис
Параметр
index— номер шестиугольного индекса H3. UInt64.
Возвращаемые значения
Пример
Запрос:
Результат:
h3CellAreaM2
Возвращает точную площадь указанной ячейки в квадратных метрах, соответствующей заданному входному H3-индексу.
Синтаксис
Параметр
index— индекс шестиугольной ячейки. UInt64.
Возвращаемое значение
- Площадь ячейки в квадратных метрах. Float64.
Пример
Запрос:
Результат:
h3CellAreaRads2
Возвращает точную площадь указанной ячейки в квадратных радианах, соответствующей заданному входному H3-индексу.
Синтаксис
Параметр
index— индекс шестиугольника. UInt64.
Возвращаемое значение
- Площадь ячейки в квадратных радианах. Float64.
Пример
Запрос:
Результат:
h3ToCenterChild
Возвращает центральный дочерний (более детализированный) индекс H3, содержащийся в заданном индексе H3 на указанном уровне разрешения.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.resolution— разрешение индекса. Диапазон:[0, 15]. UInt8.
Возвращаемые значения
Пример
Запрос:
Результат:
h3ExactEdgeLengthM
Возвращает точную длину однонаправленного ребра, представленного заданным индексом h3, в метрах.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
- Точная длина ребра в метрах. Float64.
Пример
Запрос:
Результат:
h3ExactEdgeLengthKm
Возвращает точную длину однонаправленного ребра, представленного переданным h3‑индексом, в километрах.
Синтаксис
Параметр
index— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Точная длина ребра в километрах. Float64.
Пример
Запрос:
Результат:
h3ExactEdgeLengthRads
Возвращает точную длину однонаправленного ребра, заданного входным h3-индексом, в радианах.
Синтаксис
Параметр
index— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Точная длина ребра в радианах. Float64.
Пример
Запрос:
Результат:
h3NumHexagons
Возвращает количество уникальных индексов H3 при заданном разрешении.
Синтаксис
Параметр
resolution— разрешение индекса. Диапазон:[0, 15]. UInt8.
Возвращаемое значение
- Количество H3-индексов. Int64.
Пример
Запрос:
Результат:
h3PointDistM
Возвращает расстояние по дуге большого круга («great circle») или по формуле гаверсинуса («haversine») между парами точек GeoCoord (широта/долгота) в метрах.
Синтаксис
Аргументы
lat1,lon1— широта и долгота точки 1 в градусах. Float64.lat2,lon2— широта и долгота точки 2 в градусах. Float64.
Возвращаемые значения
- Расстояние гаверсинуса или по дуге большого круга в метрах. Float64.
Пример
Запрос:
Результат:
h3PointDistKm
Возвращает расстояние по дуге большого круга (формула гаверсинусов, haversine) между парами точек GeoCoord (широта/долгота), в километрах.
Синтаксис
Аргументы
lat1,lon1— широта и долгота первой точки в градусах. Float64.lat2,lon2— широта и долгота второй точки в градусах. Float64.
Возвращаемые значения
- Расстояние по формуле гаверсина (по дуге большого круга) в километрах. Float64.
Пример
Запрос:
Результат:
h3PointDistRads
Возвращает расстояние по «большой окружности» (great-circle distance) или по формуле «haversine» между парами точек GeoCoord (широта/долгота) в радианах.
Синтаксис
Аргументы
lat1,lon1— широта и долгота точки 1 в градусах. Float64.lat2,lon2— широта и долгота точки 2 в градусах. Float64.
Возвращаемые значения
- Расстояние по формуле гаверсинуса (по дуге большого круга) в радианах. Float64.
Пример
Запрос:
Результат:
h3GetRes0Indexes
Возвращает массив всех индексов H3 разрешения 0.
Синтаксис
Возвращаемые значения
Пример
Запрос:
Результат:
h3GetPentagonIndexes
Возвращает все пятиугольные индексы H3 на указанном разрешении.
Синтаксис
Параметр
resolution— Разрешение индекса. Диапазон:[0, 15]. UInt8.
Возвращаемое значение
Пример
Запрос:
Результат:
h3Line
Возвращает последовательность индексов между двумя заданными индексами.
Синтаксис
Параметр
start— номер гексагона, представляющий начальную точку. UInt64.end— номер гексагона, представляющий конечную точку. UInt64.
Возвращаемое значение
Массив индексов H3, представляющий цепочку индексов между двумя заданными индексами. Array(UInt64).
Пример
Запрос:
Результат:
h3Distance
Возвращает расстояние в ячейках сетки между двумя указанными индексами.
Синтаксис
Параметр
start— индекс гексагона, представляющий начальную точку. UInt64.end— индекс гексагона, представляющий конечную точку. UInt64.
Возвращаемое значение
- Количество ячеек сетки. Int64.
Возвращается отрицательное число, если не удалось определить расстояние.
Пример
Запрос:
Результат:
h3HexRing
Возвращает индексы шестиугольного кольца с центром в заданном исходном индексе h3Index и длиной k.
Возвращает 0, если при вычислении не было обнаружено пятиугольного искажения.
Синтаксис
Параметр
Возвращаемые значения
Пример
Запрос:
Результат:
h3GetUnidirectionalEdge
Возвращает однонаправленный индекс ребра H3 на основе указанных исходной и конечной ячеек и возвращает 0 при ошибке.
Синтаксис
Параметр
originIndex— номер исходного индекса Hexagon. UInt64.destinationIndex— номер целевого индекса Hexagon. UInt64.
Возвращаемое значение
- Номер индекса однонаправленного ребра Hexagon. UInt64.
Пример
Запрос:
Результат:
h3UnidirectionalEdgeIsValid
Определяет, является ли заданный H3Index допустимым индексом однонаправленного ребра. Возвращает 1, если это индекс однонаправленного ребра, и 0 — в противном случае.
Синтаксис
Параметр
index— номер шестиугольного индекса. UInt64.
Возвращаемое значение
- 1 — индекс H3 является корректным однонаправленным ребром. UInt8.
- 0 — индекс H3 не является корректным однонаправленным ребром. UInt8.
Пример
Запрос:
Результат:
h3GetOriginIndexFromUnidirectionalEdge
Возвращает индекс исходного шестиугольника по однонаправленному ребру H3Index.
Синтаксис
Параметр
edge— индекс шестиугольника, представляющий однонаправленное ребро. UInt64.
Возвращаемое значение
- Индекс исходного шестиугольника. UInt64.
Пример
Запрос:
Результат:
h3GetDestinationIndexFromUnidirectionalEdge
Возвращает индекс конечного шестиугольника на основании однонаправленного ребра H3Index.
Синтаксис
Параметр
edge— индекс гексагона, представляющего ориентированное ребро. UInt64.
Возвращаемое значение
- Индекс целевого гексагона. UInt64.
Пример
Запрос:
Результат:
h3GetIndexesFromUnidirectionalEdge
Возвращает индексы исходной и конечной шестиугольных ячеек для заданного однонаправленного ребра H3Index.
Синтаксис
Параметр
edge— индекс гексагона, представляющий однонаправленное ребро. UInt64.
Возвращаемое значение
Кортеж из двух значений tuple(origin,destination):
Возвращает (0,0), если переданный аргумент некорректен.
Пример
Запрос:
Результат:
h3GetUnidirectionalEdgesFromHexagon
Возвращает все однонаправленные рёбра для указанного H3Index.
Синтаксис
Параметр
index— номер шестиугольного индекса, представляющего однонаправленное ребро. UInt64.
Возвращаемое значение
Массив индексов H3, представляющих каждое однонаправленное ребро. Array(UInt64).
Пример
Запрос:
Результат:
h3GetUnidirectionalEdgeBoundary
Возвращает координаты, определяющие ориентированное ребро.
Синтаксис
Параметр
index— номер шестиугольного индекса, представляющего однонаправленное ребро. UInt64.
Возвращаемое значение
Пример
Запрос:
Результат: