Функции для работы с индексами H3
H3 индекс
H3 — это географическая система индексации, в которой поверхность Земли разделена на сетку равных шестиугольных ячеек. Эта система иерархическая, т. е. каждый шестиугольник на верхнем уровне ("родитель") может быть разделен на семь равных, но меньших ("дочерних"), и так далее.
Уровень иерархии называется resolution
и может принимать значение от 0
до 15
, где 0
— это base
уровень с самыми большими и грубыми ячейками.
Пара широты и долготы может быть преобразована в 64-битный H3 индекс, идентифицирующий ячейку сетки.
H3 индекс в основном используется для группировки местоположений и других геопространственных манипуляций.
Полное описание системы 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
от данного шестиугольника в случайном порядке.
Синтаксис
Аргументы
Возвращаемые значения
Пример
Запрос:
Результат:
h3GetBaseCell
Возвращает номер базовой ячейки для H3 индекса.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Номер базовой ячейки шестиугольника. UInt8.
Пример
Запрос:
Результат:
h3HexAreaM2
Возвращает среднюю площадь шестиугольника в квадратных метрах для данного разрешения.
Синтаксис
Параметр
resolution
— разрешение индекса. Диапазон:[0, 15]
. UInt8.
Возвращаемое значение
- Площадь в квадратных метрах. Float64.
Пример
Запрос:
Результат:
h3HexAreaKm2
Возвращает среднюю площадь шестиугольника в квадратных километрах для данного разрешения.
Синтаксис
Параметр
resolution
— разрешение индекса. Диапазон:[0, 15]
. UInt8.
Возвращаемое значение
- Площадь в квадратных километрах. Float64.
Пример
Запрос:
Результат:
h3IndexesAreNeighbors
Возвращает, являются ли предоставленные H3 индексы соседями.
Синтаксис
Аргументы
Возвращаемое значение
Пример
Запрос:
Результат:
h3ToChildren
Возвращает массив дочерних индексов для данного H3 индекса.
Синтаксис
Аргументы
index
— номер индекса шестиугольника. UInt64.resolution
— разрешение индекса. Диапазон:[0, 15]
. UInt8.
Возвращаемые значения
Пример
Запрос:
Результат:
h3ToParent
Возвращает родительский (более грубый) индекс, содержащий данный H3 индекс.
Синтаксис
Аргументы
index
— номер индекса шестиугольника. 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
— номер индекса шестиугольника. UInt64.
Возвращаемые значения
Пример
Запрос:
Результат:
h3CellAreaM2
Возвращает точную площадь конкретной ячейки в квадратных метрах, соответствующую данному входному H3 индексу.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Площадь ячейки в квадратных метрах. Float64.
Пример
Запрос:
Результат:
h3CellAreaRads2
Возвращает точную площадь конкретной ячейки в квадратных радианах, соответствующую данному входному H3 индексу.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Площадь ячейки в квадратных радианах. Float64.
Пример
Запрос:
Результат:
h3ToCenterChild
Возвращает центральный дочерний (более мелкий) H3 индекс, содержащийся в данном H3 индексе при заданном разрешении.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.resolution
— разрешение индекса. Диапазон:[0, 15]
. UInt8.
Возвращаемые значения
- H3 индекс центрального дочернего элемента, содержащегося в данном H3 индексе при заданном разрешении. UInt64.
Пример
Запрос:
Результат:
h3ExactEdgeLengthM
Возвращает точную длину ребра одностороннего ребра, представленного входным h3 индексом, в метрах.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Точная длина ребра в метрах. Float64.
Пример
Запрос:
Результат:
h3ExactEdgeLengthKm
Возвращает точную длину ребра одностороннего ребра, представленного входным h3 индексом, в километрах.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Точная длина ребра в километрах. Float64.
Пример
Запрос:
Результат:
h3ExactEdgeLengthRads
Возвращает точную длину ребра одностороннего ребра, представленного входным h3 индексом, в радианах.
Синтаксис
Параметр
index
— номер индекса шестиугольника. UInt64.
Возвращаемое значение
- Точная длина ребра в радианах. Float64.
Пример
Запрос:
Результат:
h3NumHexagons
Возвращает количество уникальных H3 индексов при заданном разрешении.
Синтаксис
Параметр
resolution
— разрешение индекса. Диапазон:[0, 15]
. UInt8.
Возвращаемое значение
- Количество H3 индексов. Int64.
Пример
Запрос:
Результат:
h3PointDistM
Возвращает расстояние "по большой окружности" или "по формуле гаверсина" между парами GeoCoord точек (широта/долгота) в метрах.
Синтаксис
Аргументы
lat1
,lon1
— Широта и долгота точки 1 в градусах. Float64.lat2
,lon2
— Широта и долгота точки 2 в градусах. Float64.
Возвращаемые значения
- Расстояние по гаверсину или по большой окружности в метрах. Float64.
Пример
Запрос:
Результат:
h3PointDistKm
Возвращает расстояние "по большой окружности" или "по формуле гаверсина" между парами GeoCoord точек (широта/долгота) в километрах.
Синтаксис
Аргументы
lat1
,lon1
— Широта и долгота точки 1 в градусах. Float64.lat2
,lon2
— Широта и долгота точки 2 в градусах. Float64.
Возвращаемые значения
- Расстояние по гаверсину или по большой окружности в километрах. Float64.
Пример
Запрос:
Результат:
h3PointDistRads
Возвращает расстояние "по большой окружности" или "по формуле гаверсина" между парами 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
— номер индекса шестиугольника, представляющий происхождение. UInt64.destinationIndex
— номер индекса шестиугольника, представляющий назначение. UInt64.
Возвращаемое значение
- Номер одностороннего реберного индекса шестиугольника. 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)
:
origin
— номер исходного индекса шестиугольника. UInt64.destination
— номер целевого индекса шестиугольника. UInt64.
Возвращает (0,0)
, если предоставленный ввод недействителен.
Пример
Запрос:
Результат:
h3GetUnidirectionalEdgesFromHexagon
Предоставляет все односторонние ребра из указанного H3Index.
Синтаксис
Параметр
index
— номер индекса шестиугольника, представляющий одностороннее ребро. UInt64.
Возвращаемое значение
Массив h3 индексов, представляющий каждое одностороннее ребро. Array(UInt64).
Пример
Запрос:
Результат:
h3GetUnidirectionalEdgeBoundary
Возвращает координаты, определяющие одностороннее ребро.
Синтаксис
Параметр
index
— номер индекса шестиугольника, представляющий одностороннее ребро. UInt64.
Возвращаемое значение
Пример
Запрос:
Результат: