h3_tessellateaswkb 函数

适用于:勾选“是” Databricks SQL 勾选“是” Databricks Runtime 14.2 及更高版本

使用指定分辨率的 H3 单元格返回输入地理的分割。 分割由结构数组表示,每个结构都表示分割的一个元素。 分割的每个元素都包含一个 H3 单元格 ID(以长整数表示)、一个指示输入地理是否完全涵盖单元格的布尔值,以及对应于输入地理与 H3 单元格交集的 WKB 说明的 BINARY 值。

返回的 H3 单元格共同构成最小的一组具有指定分辨率且完全涵盖输入地理的六边形或五边形。 返回的地理区域(通过其 WKB 表示形式)构成输入地理的分割。

语法

h3_tessellateaswkb ( geographyExpr, resolutionExpr )

参数

  • geographyExpr:表示地理位置(采用 WKBWKTGeoJSON 格式)的 BINARY 或 STRING 表达式。 地理位置应具有参考 WGS84 坐标参考系统的经纬度坐标(以度为单位)。
  • resolutionExpr:一个 INT 表达式,其值介于 015 之间(含),它为 H3 单元格 ID 指定分辨率。

返回

命名结构的数组,具有三个类型为 BIGINT、BOOLEAN 和 BINARY 的字段,分别命名为 cellidcorechip,表示使用指定分辨率的 H3 单元格分割输入地理。

结构中的第一个字段是 H3 单元格 ID(以长整数表示)。 结构中的第二个字段是一个布尔值,用于指示 H3 单元格是否为核心单元格,如果是,字段的值将为 true;如果不是,字段的值则为 false。 核心单元格是输入地理完全涵盖的 H3 单元格(即,其与输入地理的交集是单元格本身)。 第三个字段是一个 BINARY 值,表示作为输入地理与 H3 单元格交集的地理区域的 WKB 说明。 返回的 H3 单元格共同构成最小的一组有涵盖范围的输入地理。 与返回的 WKB 说明相对应的地理区域共同构成了输入地理的分割(分解)。

如果任一输入表达式为 NULL,则该函数返回 NULL。 如果第一个输入参数的类型为 BINARY,则输入值应为点、线串、多边形、点集合、线串集合或多边形集合的 WKB 说明。 如果第一个输入参数的类型为 STRING,则输入值应为点、线串、多边形、点集合、线串集合或多边形集合的 WKTGeoJSON 说明。 输入地理的维度可以是 2D、3DZ、3DM 或 4D。

错误条件

  • 如果 geographyExpr 的类型为 BINARY,并且值是无效的 WKB 或代表地理集合,则该函数会返回 WKB_PARSE_ERROR
  • 如果 geographyExpr 的类型为 STRING,并且值是无效的 WKT 或代表地理集合,则该函数会返回 WKT_PARSE_ERROR
  • 如果 geographyExpr 的类型为 STRING,并且值是无效的 GeoJSON 或代表地理集合,则该函数会返回 GEOJSON_PARSE_ERROR
  • 如果 resolutionExpr 小于 0 或大于 15,则该函数返回 H3_INVALID_RESOLUTION_VALUE

示例

> SELECT h3_h3tostring(cellid), core, hex(chip) FROM (SELECT inline(h3_tessellateaswkb('MULTIPOINT(20 0,20 10,40 30)', 0))) ORDER BY 1
  802dfffffffffff     false 010100000000000000000044400000000000003E40
  806bfffffffffff     false 010400000002000000010100000000000000000034400000000000000000010100000000000000000034400000000000002440

-- Feeding an empty geometry collection in GeoJSON format (geometry collections are not supported).
> SELECT h3_tessellateaswkb('{"type":"GeometryCollection","geometries":[]}', 2)
  [GEOJSON_PARSE_ERROR] Error parsing GeoJSON: Invalid or unsupported type '"GeometryCollection"' at position 9 SQLSTATE: 22023

-- Feeding an invalid WKB (invalid endianness value)
> SELECT h3_tessellateaswkb(unhex('020700000000'), 2)
  [WKB_PARSE_ERROR] Error parsing WKB: Invalid byte order 2 at position 1 SQLSTATE: 22023

-- Feeding an invalid polygon in WKT (polygon is not closed)
> SELECT h3_tessellateaswkb('POLYGON((-122.4194 37.7749,-118.2437 34.0522,-74.0060 40.7128,-74.0060 40.7128))', 2)
  [WKT_PARSE_ERROR] Error parsing WKT: Found non-closed ring at position 80 SQLSTATE: 22023

-- Resolution is out of range.
> SELECT h3_tessellateaswkb('POLYGON((-122.4194 37.7749,-118.2437 34.0522,-74.0060 40.7128,-122.4194 37.7749))', 16)
  [H3_INVALID_RESOLUTION_VALUE] H3 resolution 16 must be between 0 and 15, inclusive SQLSTATE: 22023