Функции для работы с индексами 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.
Возвращаемое значение
Пример
Запрос:
Результат: