跳到主要内容

地理空间函数

Databend 内置两套互补的地理空间能力:PostGIS 风格的几何(Geometry)函数,用于构建与分析形状;以及 H3 实用工具,用于全球六边形索引。下表按任务对函数进行分组,方便您快速定位所需工具,布局方式与 Snowflake 文档类似。

几何构造函数

函数描述示例
ST_MAKEGEOMPOINT / ST_GEOM_POINT构造 Point(点)几何体ST_MAKEGEOMPOINT(-122.35, 37.55)POINT(-122.35 37.55)
ST_MAKELINE / ST_MAKE_LINE由若干 Point 创建 LineString(线串)ST_MAKELINE(ST_MAKEGEOMPOINT(-122.35, 37.55), ST_MAKEGEOMPOINT(-122.40, 37.60))LINESTRING(-122.35 37.55, -122.40 37.60)
ST_MAKEPOLYGON由闭合 LineString 创建 Polygon(多边形)ST_MAKEPOLYGON(ST_MAKELINE(...))POLYGON(...)
ST_POLYGON由坐标环创建 PolygonST_POLYGON(...)POLYGON(...)

几何转换

函数描述示例
ST_GEOMETRYFROMTEXT / ST_GEOMFROMTEXT将 WKT 转换为几何体ST_GEOMETRYFROMTEXT('POINT(-122.35 37.55)')POINT(-122.35 37.55)
ST_GEOMETRYFROMWKB / ST_GEOMFROMWKB将 WKB 转换为几何体ST_GEOMETRYFROMWKB(...)POINT(...)
ST_GEOMETRYFROMEWKT / ST_GEOMFROMEWKT将 EWKT 转换为几何体ST_GEOMETRYFROMEWKT('SRID=4326;POINT(-122.35 37.55)')POINT(-122.35 37.55)
ST_GEOMETRYFROMEWKB / ST_GEOMFROMEWKB将 EWKB 转换为几何体ST_GEOMETRYFROMEWKB(...)POINT(...)
ST_GEOMFROMGEOHASH将 GeoHash 转换为几何体ST_GEOMFROMGEOHASH('9q8yyk8')POLYGON(...)
ST_GEOMPOINTFROMGEOHASH将 GeoHash 转换为 Point 几何体ST_GEOMPOINTFROMGEOHASH('9q8yyk8')POINT(...)
TO_GEOMETRY解析多种格式为几何体TO_GEOMETRY('POINT(-122.35 37.55)')POINT(-122.35 37.55)

几何输出

函数描述示例
ST_ASTEXT将几何体转换为 WKTST_ASTEXT(ST_MAKEGEOMPOINT(-122.35, 37.55))'POINT(-122.35 37.55)'
ST_ASWKT将几何体转换为 WKTST_ASWKT(ST_MAKEGEOMPOINT(-122.35, 37.55))'POINT(-122.35 37.55)'
ST_ASBINARY / ST_ASWKB将几何体转换为 WKBST_ASBINARY(ST_MAKEGEOMPOINT(-122.35, 37.55))WKB representation
ST_ASEWKT将几何体转换为 EWKTST_ASEWKT(ST_MAKEGEOMPOINT(-122.35, 37.55))'SRID=4326;POINT(-122.35 37.55)'
ST_ASEWKB将几何体转换为 EWKBST_ASEWKB(ST_MAKEGEOMPOINT(-122.35, 37.55))EWKB representation
ST_ASGEOJSON将几何体转换为 GeoJSONST_ASGEOJSON(ST_MAKEGEOMPOINT(-122.35, 37.55))'{"type":"Point","coordinates":[-122.35,37.55]}'
ST_GEOHASH将几何体转换为 GeoHashST_GEOHASH(ST_MAKEGEOMPOINT(-122.35, 37.55), 7)'9q8yyk8'
TO_STRING将几何体转换为字符串TO_STRING(ST_MAKEGEOMPOINT(-122.35, 37.55))'POINT(-122.35 37.55)'

几何访问器与属性

函数描述示例
ST_DIMENSION返回拓扑维度ST_DIMENSION(ST_MAKEGEOMPOINT(-122.35, 37.55))0
ST_SRID返回几何体的 SRIDST_SRID(ST_MAKEGEOMPOINT(-122.35, 37.55))4326
ST_SETSRID为几何体设置 SRIDST_SETSRID(ST_MAKEGEOMPOINT(-122.35, 37.55), 3857)POINT(-122.35 37.55)
ST_TRANSFORM将几何体转换到新的 SRIDST_TRANSFORM(ST_MAKEGEOMPOINT(-122.35, 37.55), 3857)POINT(-13618288.8 4552395.0)
ST_NPOINTS / ST_NUMPOINTS统计几何体中的点数ST_NPOINTS(ST_MAKELINE(...))2
ST_POINTN返回 LineString 中的指定点ST_POINTN(ST_MAKELINE(...), 1)POINT(-122.35 37.55)
ST_STARTPOINT返回 LineString 的起点ST_STARTPOINT(ST_MAKELINE(...))POINT(-122.35 37.55)
ST_ENDPOINT返回 LineString 的终点ST_ENDPOINT(ST_MAKELINE(...))POINT(-122.40 37.60)
ST_LENGTH测量 LineString 的长度ST_LENGTH(ST_MAKELINE(...))5.57
ST_X / ST_Y返回 Point 的 X 或 Y 坐标ST_X(ST_MAKEGEOMPOINT(-122.35, 37.55))-122.35
ST_XMIN / ST_XMAX返回最小/最大 X 坐标ST_XMIN(ST_MAKELINE(...))-122.40
ST_YMIN / ST_YMAX返回最小/最大 Y 坐标ST_YMAX(ST_MAKELINE(...))37.60

空间关系

函数描述示例
ST_CONTAINS测试一个几何体是否包含另一个几何体ST_CONTAINS(ST_MAKEPOLYGON(...), ST_MAKEGEOMPOINT(...))TRUE
POINT_IN_POLYGON检查点是否位于多边形内部POINT_IN_POLYGON([lon, lat], [[p1_lon, p1_lat], ...])TRUE

距离与测量

函数描述示例
ST_DISTANCE测量几何体之间的距离ST_DISTANCE(ST_MAKEGEOMPOINT(-122.35, 37.55), ST_MAKEGEOMPOINT(-122.40, 37.60))5.57
HAVERSINE计算坐标间的大圆距离HAVERSINE(37.55, -122.35, 37.60, -122.40)6.12

H3 索引与转换

函数描述示例
GEO_TO_H3将经度/纬度转换为 H3 索引GEO_TO_H3(37.7950, 55.7129, 15)644325524701193974
H3_TO_GEO将 H3 索引转换为经度/纬度H3_TO_GEO(644325524701193974)[37.7950, 55.7129]
H3_TO_STRING将 H3 索引转换为字符串形式H3_TO_STRING(644325524701193974)'8f2830828052d25'
STRING_TO_H3将 H3 字符串转换为索引STRING_TO_H3('8f2830828052d25')644325524701193974
GEOHASH_ENCODE将经度/纬度编码为 GeoHashGEOHASH_ENCODE(37.7950, 55.7129, 12)'ucfv0nzpt3s7'
GEOHASH_DECODE将 GeoHash 解码为经度/纬度GEOHASH_DECODE('ucfv0nzpt3s7')[37.7950, 55.7129]

H3 单元格属性

函数描述示例
H3_GET_RESOLUTION返回 H3 索引的分辨率H3_GET_RESOLUTION(644325524701193974)15
H3_GET_BASE_CELL返回基础单元格编号H3_GET_BASE_CELL(644325524701193974)14
H3_IS_VALID检查 H3 索引是否有效H3_IS_VALID(644325524701193974)TRUE
H3_IS_PENTAGON检查 H3 索引是否为五边形H3_IS_PENTAGON(644325524701193974)FALSE
H3_IS_RES_CLASS_III检查 H3 索引是否为 III 类H3_IS_RES_CLASS_III(644325524701193974)FALSE
H3_GET_FACES返回相交的二十面体面H3_GET_FACES(644325524701193974)[7]
H3_TO_PARENT返回低一级分辨率的父索引H3_TO_PARENT(644325524701193974, 10)622236721289822207
H3_TO_CHILDREN返回高一级分辨率的子索引H3_TO_CHILDREN(622236721289822207, 11)[...]
H3_TO_CENTER_CHILD返回指定分辨率的中心子索引H3_TO_CENTER_CHILD(622236721289822207, 11)625561602857582591
H3_CELL_AREA_M2返回单元格面积(平方米)H3_CELL_AREA_M2(644325524701193974)0.8953
H3_CELL_AREA_RADS2返回单元格面积(平方弧度)H3_CELL_AREA_RADS2(644325524701193974)2.2e-14
H3_HEX_AREA_KM2返回平均六边形面积(平方千米)H3_HEX_AREA_KM2(10)0.0152
H3_HEX_AREA_M2返回平均六边形面积(平方米)H3_HEX_AREA_M2(10)15200
H3_TO_GEO_BOUNDARY返回单元格边界H3_TO_GEO_BOUNDARY(644325524701193974)[[lon1,lat1], ...]
H3_NUM_HEXAGONS返回指定分辨率下的六边形数量H3_NUM_HEXAGONS(2)5882

H3 邻域

函数描述示例
H3_DISTANCE返回两个索引之间的网格距离H3_DISTANCE(599119489002373119, 599119491149856767)1
H3_INDEXES_ARE_NEIGHBORS测试两个索引是否相邻H3_INDEXES_ARE_NEIGHBORS(599119489002373119, 599119491149856767)TRUE
H3_K_RING返回 k 距离内的所有索引H3_K_RING(599119489002373119, 1)[599119489002373119, ...]
H3_HEX_RING返回恰好 k 步距离的索引H3_HEX_RING(599119489002373119, 1)[599119491149856767, ...]
H3_LINE返回路径上的索引H3_LINE(from_h3, to_h3)[from_h3, ..., to_h3]

H3 边操作

函数描述示例
H3_GET_UNIDIRECTIONAL_EDGE返回两个相邻单元格之间的边H3_GET_UNIDIRECTIONAL_EDGE(from_h3, to_h3)edge_index
H3_UNIDIRECTIONAL_EDGE_IS_VALID检查边索引是否有效H3_UNIDIRECTIONAL_EDGE_IS_VALID(edge_index)TRUE
H3_GET_ORIGIN_INDEX_FROM_UNIDIRECTIONAL_EDGE从边返回起始单元格H3_GET_ORIGIN_INDEX_FROM_UNIDIRECTIONAL_EDGE(edge_index)from_h3
H3_GET_DESTINATION_INDEX_FROM_UNIDIRECTIONAL_EDGE从边返回目标单元格H3_GET_DESTINATION_INDEX_FROM_UNIDIRECTIONAL_EDGE(edge_index)to_h3
H3_GET_INDEXES_FROM_UNIDIRECTIONAL_EDGE返回边对应的两个单元格H3_GET_INDEXES_FROM_UNIDIRECTIONAL_EDGE(edge_index)[from_h3, to_h3]
H3_GET_UNIDIRECTIONAL_EDGES_FROM_HEXAGON列出从单元格出发的所有边H3_GET_UNIDIRECTIONAL_EDGES_FROM_HEXAGON(h3_index)[edge1, edge2, ...]
H3_GET_UNIDIRECTIONAL_EDGE_BOUNDARY返回边的边界H3_GET_UNIDIRECTIONAL_EDGE_BOUNDARY(edge_index)[[lon1,lat1], [lon2,lat2]]

H3 测量与角度

函数描述示例
H3_EDGE_LENGTH_KM返回平均边长(千米)H3_EDGE_LENGTH_KM(10)0.065
H3_EDGE_LENGTH_M返回平均边长(米)H3_EDGE_LENGTH_M(10)65.91
H3_EXACT_EDGE_LENGTH_KM返回精确边长(千米)H3_EXACT_EDGE_LENGTH_KM(edge_index)0.066
H3_EXACT_EDGE_LENGTH_M返回精确边长(米)H3_EXACT_EDGE_LENGTH_M(edge_index)66.12
H3_EXACT_EDGE_LENGTH_RADS返回精确边长(弧度)H3_EXACT_EDGE_LENGTH_RADS(edge_index)0.00001
H3_EDGE_ANGLE返回两条边之间的夹角(弧度)H3_EDGE_ANGLE(edge1, edge2)1.047