跳到主要内容
跳到主要内容

处理 H3 索引的函数

H3 索引

H3 是一种地理索引系统,其中地球表面被划分为均匀的六角形单元格网格。该系统是分层的,即每个顶层的六角形("父级")可以分割成七个相等但较小的六角形("子级"),依此类推。

层级的级别称为 resolution,可以取值从 015,其中 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]

返回值

  • H3 六角形边的平均长度(以度数表示)。 Float64

示例

查询:

结果:

h3EdgeLengthM

计算 H3 六角形边的平均长度(以米为单位)。

语法

参数

  • resolution — 索引分辨率。 UInt8。范围:[0, 15]

返回值

  • H3 六角形边的平均长度(以米为单位)。 Float64

示例

查询:

结果:

h3EdgeLengthKm

计算 H3 六角形边的平均长度(以公里为单位)。

语法

参数

  • resolution — 索引分辨率。 UInt8。范围:[0, 15]

返回值

  • H3 六角形边的平均长度(以公里为单位)。 Float64

示例

查询:

结果:

geoToH3

返回具有指定分辨率的 H3 点索引 (lat, lon)

语法

参数

  • lat — 纬度。 Float64
  • lon — 经度。 Float64
  • resolution — 索引分辨率。范围:[0, 15]UInt8

返回值

  • 六角形索引编号。 UInt64
  • 错误时返回 0。 UInt64

注意:在 ClickHouse v25.4 或更早版本中,geoToH3() 采用 (lon, lat) 的顺序。根据 ClickHouse v25.5,输入值的顺序为 (lat, lon)。可以通过设置 geotoh3_argument_order = 'lon_lat' 恢复之前的行为。

示例

查询:

结果:

h3ToGeo

返回与提供的 H3 索引对应的质心经纬度。

语法

参数

  • h3Index — H3 索引。 UInt64

返回值

  • 由两个值组成的元组:tuple(lat,lon)lat — 纬度。 Float64lon — 经度。 Float64

注意:在 ClickHouse v24.12 或更早版本中,h3ToGeo() 返回的值顺序为 (lon, lat)。根据 ClickHouse v25.1,返回值的顺序为 (lat, lon)。可以通过设置 h3togeo_lon_lat_result_order = true 恢复之前的行为。

示例

查询:

结果:

h3ToGeoBoundary

返回与提供的 H3 索引对应的边界的 (lat, lon) 对数组。

语法

参数

  • h3Index — H3 索引。 UInt64

返回值

示例

查询:

结果:

h3kRing

列出与给定六角形的半径为 k 的所有 H3 六角形,以随机顺序返回。

语法

参数

  • h3index — 六角形索引编号。 UInt64
  • k — 半径。 integer

返回值

示例

查询:

结果:

h3GetBaseCell

返回 H3 索引的基单元编号。

语法

参数

  • index — 六角形索引编号。 UInt64

返回值

  • 六角形基单元编号。 UInt8

示例

查询:

结果:

h3HexAreaM2

返回给定分辨率的平均六角形面积(以平方米为单位)。

语法

参数

  • resolution — 索引分辨率。范围:[0, 15]UInt8

返回值

  • 面积(以平方米为单位)。 Float64

示例

查询:

结果:

h3HexAreaKm2

返回给定分辨率的平均六角形面积(以平方公里为单位)。

语法

参数

  • resolution — 索引分辨率。范围:[0, 15]UInt8

返回值

  • 面积(以平方公里为单位)。 Float64

示例

查询:

结果:

h3IndexesAreNeighbors

返回提供的 H3 索引是否是邻居。

语法

参数

  • index1 — 六角形索引编号。 UInt64
  • index2 — 六角形索引编号。 UInt64

返回值

  • 1 — 索引是邻居。 UInt8
  • 0 — 索引不是邻居。 UInt8

示例

查询:

结果:

h3ToChildren

返回给定 H3 索引的子索引数组。

语法

参数

  • index — 六角形索引编号。 UInt64
  • resolution — 索引分辨率。范围:[0, 15]UInt8

返回值

示例

查询:

结果:

h3ToParent

返回包含给定的 H3 索引的父(粗糙)索引。

语法

参数

  • index — 六角形索引编号。 UInt64
  • resolution — 索引分辨率。范围:[0, 15]UInt8

返回值

示例

查询:

结果:

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 索引相交的20面体面。

语法

参数

  • index — 六角形索引编号。 UInt64

返回值

  • 包含与给定 H3 索引相交的 icosahedron 面的数组。 Array(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

返回所有分辨率 0 的 H3 索引数组。

语法

返回值

  • 所有分辨率 0 的 H3 索引数组。 Array(UInt64)。

示例

查询:

结果:

h3GetPentagonIndexes

返回指定分辨率下的所有五边形 H3 索引。

语法

参数

  • resolution — 索引分辨率。范围:[0, 15]UInt8

返回值

示例

查询:

结果:

h3Line

返回提供的两个索引之间的索引线。

语法

参数

  • start — 表示起始点的六角形索引编号。 UInt64
  • end — 表示结束点的六角形索引编号。 UInt64

返回值

表示提供的两个索引之间的索引线的 H3 索引数组。 Array(UInt64)。

示例

查询:

结果:

h3Distance

返回提供的两个索引之间的网格单元距离。

语法

参数

  • start — 表示起始点的六角形索引编号。 UInt64
  • end — 表示结束点的六角形索引编号。 UInt64

返回值

  • 网格单元的数量。 Int64

如果查找距离失败,则返回负数。

示例

查询:

结果:

h3HexRing

返回以所提供的原始 h3Index 为中心的六边形环的索引,长度为 k。

如果未遇到五边形变形,则返回 0。

语法

参数

  • index — 表示原点的六角形索引编号。 UInt64
  • k — 距离。 UInt64

返回值

示例

查询:

结果:

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

返回值

示例

查询:

结果: