跳到主要内容

ST_HILBERT

引入或更新于:v1.2.885

将 GEOMETRY 或 GEOGRAPHY 对象编码为 Hilbert 曲线索引。函数使用几何体包围盒中心作为编码点。如果提供 bounds,会先将该点归一化到指定的包围盒范围再编码。

语法

ST_HILBERT(<geometry_or_geography>)
ST_HILBERT(<geometry_or_geography>, <bounds>)

参数

参数描述
<geometry_or_geography>参数必须是 GEOMETRY 或 GEOGRAPHY 类型的表达式。
<bounds>可选。数组 [xmin, ymin, xmax, ymax],用于在编码前对点进行归一化。
备注
  • Geometry:如果未提供边界,GEOMETRY 坐标不会归一化到特定范围,而是将中心点映射到 float32 的全范围,再编码为 Hilbert 索引。
  • Geography:如果未提供边界,默认边界为 [-180, -90, 180, 90]

返回类型

UInt64。

示例

GEOMETRY 示例

SELECT ST_HILBERT(TO_GEOMETRY('POINT(1 2)')) AS hilbert1, ST_HILBERT(TO_GEOMETRY('POINT(5 5)')) AS hilbert2;

╭───────────────────────────╮
│ hilbert1 │ hilbert2 │
├─────────────┼─────────────┤
33554432002155872256
╰───────────────────────────╯

SELECT ST_HILBERT(TO_GEOMETRY('POINT(1 2)'), [0, 0, 1, 1]) AS hilbert1, ST_HILBERT(TO_GEOMETRY('POINT(5 5)'), [0, 0, 5, 5]) AS hilbert2;

╭───────────────────────────╮
│ hilbert1 │ hilbert2 │
├─────────────┼─────────────┤
28633115302863311530
╰───────────────────────────╯

GEOGRAPHY 示例

SELECT ST_HILBERT(TO_GEOGRAPHY('POINT(113.15 23.06)')) AS hilbert1, ST_HILBERT(TO_GEOGRAPHY('POINT(116.25 39.54)')) AS hilbert2;

╭───────────────────────────╮
│ hilbert1 │ hilbert2 │
├─────────────┼─────────────┤
30702590603033451300
╰───────────────────────────╯

SELECT ST_HILBERT(TO_GEOGRAPHY('POINT(113.15 23.06)'), [73, 4, 135, 53]) AS hilbert1, ST_HILBERT(TO_GEOGRAPHY('POINT(116.25 39.54)'), [73, 4, 135, 53]) AS hilbert2;

╭───────────────────────────╮
│ hilbert1 │ hilbert2 │
├─────────────┼─────────────┤
35336071942330429279
╰───────────────────────────╯
欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验