* Geo functions - en/ru sync. * Fixed bug with levels. * Apply suggestions from code review Co-authored-by: Ivan Blinkov <github@blinkov.ru> Co-authored-by: BayoNet <da-daos@yandex.ru> * Geo functions splitted into 3 files. * Links fixed. * Link fixed. * Anchor fixed. * Add into TOC. * Temporarily removed anchors. * Working on TOC. * Links to original article. * TOC and links in English and Russian. * TOC in English, content in index. * Link fixed. * TOC in Russian, with content in index file. * Added index file to geo functions * fixed links in ru Co-authored-by: Olga Revyakina <revolg@yandex-team.ru> Co-authored-by: Ivan Blinkov <github@blinkov.ru> Co-authored-by: BayoNet <da-daos@yandex.ru> Co-authored-by: Sergei Shtykov <bayonet@yandex-team.ru>
11 KiB
toc_title |
---|
H3 Indexes |
Functions for Working with H3 Indexes
H3 is a geographical indexing system where Earth’s surface divided into a grid of even hexagonal cells. This system is hierarchical, i. e. each hexagon on the top level ("parent") can be splitted into seven even but smaller ones ("children"), and so on.
The level of the hierarchy is called resolution
and can receive a value from 0
till 15
, where 0
is the base
level with the largest and coarsest cells.
A latitude and longitude pair can be transformed to a 64-bit H3 index, identifying a grid cell.
The H3 index is used primarily for bucketing locations and other geospatial manipulations.
The full description of the H3 system is available at the Uber Engeneering site.
h3IsValid
Verifies whether the number is a valid H3 index.
Syntax
h3IsValid(h3index)
Parameter
h3index
— Hexagon index number. Type: UInt64.
Returned values
- 1 — The number is a valid H3 index.
- 0 — The number is not a valid H3 index.
Type: UInt8.
Example
Query:
SELECT h3IsValid(630814730351855103) as h3IsValid
Result:
┌─h3IsValid─┐
│ 1 │
└───────────┘
h3GetResolution
Defines the resolution of the given H3 index.
Syntax
h3GetResolution(h3index)
Parameter
h3index
— Hexagon index number. Type: UInt64.
Returned values
- Index resolution. Range:
[0, 15]
. - If the index is not valid, the function returns a random value. Use h3IsValid to verify the index.
Type: UInt8.
Example
Query:
SELECT h3GetResolution(639821929606596015) as resolution
Result:
┌─resolution─┐
│ 14 │
└────────────┘
h3EdgeAngle
Calculates the average length of the H3 hexagon edge in grades.
Syntax
h3EdgeAngle(resolution)
Parameter
resolution
— Index resolution. Type: UInt8. Range:[0, 15]
.
Returned values
Example
Query:
SELECT h3EdgeAngle(10) as edgeAngle
Result:
┌───────h3EdgeAngle(10)─┐
│ 0.0005927224846720883 │
└───────────────────────┘
h3EdgeLengthM
Calculates the average length of the H3 hexagon edge in meters.
Syntax
h3EdgeLengthM(resolution)
Parameter
resolution
— Index resolution. Type: UInt8. Range:[0, 15]
.
Returned values
Example
Query:
SELECT h3EdgeLengthM(15) as edgeLengthM
Result:
┌─edgeLengthM─┐
│ 0.509713273 │
└─────────────┘
geoToH3
Returns H3 point index (lon, lat)
with specified resolution.
Syntax
geoToH3(lon, lat, resolution)
Parameters
lon
— Longitude. Type: Float64.lat
— Latitude. Type: Float64.resolution
— Index resolution. Range:[0, 15]
. Type: UInt8.
Returned values
- Hexagon index number.
- 0 in case of error.
Type: UInt64.
Example
Query:
SELECT geoToH3(37.79506683, 55.71290588, 15) as h3Index
Result:
┌────────────h3Index─┐
│ 644325524701193974 │
└────────────────────┘
h3kRing
Lists all the H3 hexagons in the raduis of k
from the given hexagon in random order.
Syntax
h3kRing(h3index, k)
Parameters
Returned values
- Array of H3 indexes.
Example
Query:
SELECT arrayJoin(h3kRing(644325529233966508, 1)) AS h3index
Result:
┌────────────h3index─┐
│ 644325529233966508 │
│ 644325529233966497 │
│ 644325529233966510 │
│ 644325529233966504 │
│ 644325529233966509 │
│ 644325529233966355 │
│ 644325529233966354 │
└────────────────────┘
h3GetBaseCell
Returns the base cell number of the H3 index.
Syntax
h3GetBaseCell(index)
Parameter
index
— Hexagon index number. Type: UInt64.
Returned value
- Hexagon base cell number.
Type: UInt8.
Example
Query:
SELECT h3GetBaseCell(612916788725809151) as basecell;
Result:
┌─basecell─┐
│ 12 │
└──────────┘
h3HexAreaM2
Returns average hexagon area in square meters at the given resolution.
Syntax
h3HexAreaM2(resolution)
Parameter
resolution
— Index resolution. Range:[0, 15]
. Type: UInt8.
Returned value
- Area in square meters.
Type: Float64.
Example
Query:
SELECT h3HexAreaM2(13) as area;
Result:
┌─area─┐
│ 43.9 │
└──────┘
h3IndexesAreNeighbors
Returns whether or not the provided H3 indexes are neighbors.
Syntax
h3IndexesAreNeighbors(index1, index2)
Parameters
Returned value
1
— Indexes are neighbours.0
— Indexes are not neighbours.
Type: UInt8.
Example
Query:
SELECT h3IndexesAreNeighbors(617420388351344639, 617420388352655359) AS n;
Result:
┌─n─┐
│ 1 │
└───┘
h3ToChildren
Returns an array of child indexes for the given H3 index.
Syntax
h3ToChildren(index, resolution)
Parameters
index
— Hexagon index number. Type: UInt64.resolution
— Index resolution. Range:[0, 15]
. Type: UInt8.
Returned values
- Array of the child H3-indexes.
Example
Query:
SELECT h3ToChildren(599405990164561919, 6) AS children;
Result:
┌─children───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [603909588852408319,603909588986626047,603909589120843775,603909589255061503,603909589389279231,603909589523496959,603909589657714687] │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
h3ToParent
Returns the parent (coarser) index containing the given H3 index.
Syntax
h3ToParent(index, resolution)
Parameters
index
— Hexagon index number. Type: UInt64.resolution
— Index resolution. Range:[0, 15]
. Type: UInt8.
Returned value
- Parent H3 index.
Type: UInt64.
Example
Query:
SELECT h3ToParent(599405990164561919, 3) as parent;
Result:
┌─────────────parent─┐
│ 590398848891879423 │
└────────────────────┘
h3ToString
Converts the H3Index
representation of the index to the string representation.
h3ToString(index)
Parameter
index
— Hexagon index number. Type: UInt64.
Returned value
- String representation of the H3 index.
Type: String.
Example
Query:
SELECT h3ToString(617420388352917503) as h3_string;
Result:
┌─h3_string───────┐
│ 89184926cdbffff │
└─────────────────┘
stringToH3
Converts the string representation to the H3Index
(UInt64) representation.
Syntax
stringToH3(index_str)
Parameter
index_str
— String representation of the H3 index. Type: String.
Returned value
- Hexagon index number. Returns 0 on error. Type: UInt64.
Example
Query:
SELECT stringToH3('89184926cc3ffff') as index;
Result:
┌──────────────index─┐
│ 617420388351344639 │
└────────────────────┘
h3GetResolution
Returns the resolution of the H3 index.
Syntax
h3GetResolution(index)
Parameter
index
— Hexagon index number. Type: UInt64.
Returned value
- Index resolution. Range:
[0, 15]
. Type: UInt8.
Example
Query:
SELECT h3GetResolution(617420388352917503) as res;
Result:
┌─res─┐
│ 9 │
└─────┘