📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。此页面由 AI 自动翻译,英文原文请见此处。

Geospatial Functions



TiDB Cloud Lake 提供两组互补的地理空间能力:用于构建和分析形状的 PostGIS 风格几何函数,以及用于全局六边形索引的 H3 工具。下表按任务对这些函数进行了分组,便于你快速找到合适的工具,布局方式类似于 Snowflake 文档。

构造函数

函数描述说明示例
ST_MAKEGEOMPOINT / ST_GEOM_POINT构造 Point 几何对象仅 GEOGRAPHYST_MAKEGEOMPOINT(-122.35, 37.55) → POINT(-122.35 37.55)
ST_MAKEPOINT / ST_POINT构造 Point geography 对象仅 GEOGRAPHYST_MAKEPOINT(-122.35, 37.55) → POINT(-122.35 37.55)
ST_MAKELINE / ST_MAKE_LINE由点创建 LineStringST_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 创建 PolygonST_MAKEPOLYGON(ST_MAKELINE(...)) → POLYGON(...)
ST_POLYGON由坐标环创建 Polygon仅 GEOGRAPHYST_POLYGON(...) → POLYGON(...)

转换

函数描述说明示例
ST_GEOMETRYFROMTEXT / ST_GEOMFROMTEXT将 WKT 转换为 geometry仅 GEOGRAPHYST_GEOMETRYFROMTEXT('POINT(-122.35 37.55)') → POINT(-122.35 37.55)
ST_GEOMETRYFROMWKB / ST_GEOMFROMWKB将 WKB 转换为 geometry仅 GEOGRAPHYST_GEOMETRYFROMWKB(...) → POINT(...)
ST_GEOMETRYFROMEWKT / ST_GEOMFROMEWKT将 EWKT 转换为 geometry仅 GEOGRAPHYST_GEOMETRYFROMEWKT('SRID=4326;POINT(-122.35 37.55)') → POINT(-122.35 37.55)
ST_GEOMETRYFROMEWKB / ST_GEOMFROMEWKB将 EWKB 转换为 geometry仅 GEOGRAPHYST_GEOMETRYFROMEWKB(...) → POINT(...)
ST_GEOGRAPHYFROMWKT / ST_GEOGFROMWKT将 WKT/EWKT 转换为 geography仅 GEOGRAPHYST_GEOGRAPHYFROMWKT('POINT(-122.35 37.55)') → POINT(-122.35 37.55)
ST_GEOGRAPHYFROMWKB / ST_GEOGFROMWKB将 WKB/EWKB 转换为 geography仅 GEOGRAPHYST_GEOGRAPHYFROMWKB(...) → POINT(...)
ST_GEOMFROMGEOHASH将 GeoHash 转换为 geometry仅 GEOGRAPHYST_GEOMFROMGEOHASH('9q8yyk8') → POLYGON(...)
ST_GEOMPOINTFROMGEOHASH将 GeoHash 转换为 Point 几何对象仅 GEOGRAPHYST_GEOMPOINTFROMGEOHASH('9q8yyk8') → POINT(...)
ST_GEOGFROMGEOHASH将 GeoHash 转换为 geography 多边形仅 GEOGRAPHYST_GEOGFROMGEOHASH('9q8yyk8') → POLYGON(...)
ST_GEOGPOINTFROMGEOHASH将 GeoHash 转换为 geography 点仅 GEOGRAPHYST_GEOGPOINTFROMGEOHASH('9q8yyk8') → POINT(...)
TO_GEOMETRY将多种格式解析为 geometry仅 GEOGRAPHYTO_GEOMETRY('POINT(-122.35 37.55)') → POINT(-122.35 37.55)
TO_GEOGRAPHY / TRY_TO_GEOGRAPHY将多种格式解析为 geography仅 GEOGRAPHYTO_GEOGRAPHY('POINT(-122.35 37.55)') → POINT(-122.35 37.55)

输出

函数描述说明示例
ST_ASTEXT将 geometry 转换为 WKTST_ASTEXT(ST_MAKEGEOMPOINT(-122.35, 37.55)) → 'POINT(-122.35 37.55)'
ST_ASWKT将 geometry 转换为 WKTST_ASWKT(ST_MAKEGEOMPOINT(-122.35, 37.55)) → 'POINT(-122.35 37.55)'
ST_ASBINARY / ST_ASWKB将 geometry 转换为 WKBST_ASBINARY(ST_MAKEGEOMPOINT(-122.35, 37.55)) → WKB representation
ST_ASEWKT将 geometry 转换为 EWKTST_ASEWKT(ST_MAKEGEOMPOINT(-122.35, 37.55)) → 'SRID=4326;POINT(-122.35 37.55)'
ST_ASEWKB将 geometry 转换为 EWKBST_ASEWKB(ST_MAKEGEOMPOINT(-122.35, 37.55)) → EWKB representation
ST_ASGEOJSON将 geometry 转换为 GeoJSONST_ASGEOJSON(ST_MAKEGEOMPOINT(-122.35, 37.55)) → '{"type":"Point","coordinates":[-122.35,37.55]}'
ST_GEOHASH将 geometry 转换为 GeoHashST_GEOHASH(ST_MAKEGEOMPOINT(-122.35, 37.55), 7) → '9q8yyk8'
TO_STRING将 geometry 转换为字符串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_CENTROID返回 geometry 的质心仅 GEOMETRYST_CENTROID(TO_GEOMETRY('LINESTRING(0 0, 2 0)')) → POINT(1 0)
ST_ENVELOPE返回最小外接矩形仅 GEOMETRYST_ENVELOPE(TO_GEOMETRY('LINESTRING(0 0, 2 3)')) → POLYGON((0 0,2 0,2 3,0 3,0 0))
ST_SRID返回 geometry 的 SRIDST_SRID(ST_MAKEGEOMPOINT(-122.35, 37.55)) → 4326
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_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

关系与度量

函数描述说明示例
HAVERSINE计算坐标之间的大圆距离HAVERSINE(37.55, -122.35, 37.60, -122.40) → 6.12
ST_AREA测量 geometry 或 geography 对象的面积ST_AREA(TO_GEOMETRY('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))')) → 1.0
ST_CONTAINS测试一个 geometry 是否包含另一个 geometry仅 GEOMETRYST_CONTAINS(ST_MAKEPOLYGON(...), ST_MAKEGEOMPOINT(...)) → TRUE
ST_CONVEXHULL计算 geometry 的凸包仅 GEOMETRYST_CONVEXHULL(TO_GEOMETRY('POLYGON((0 0,2 0,2 2,0 2,0 0))')) → POLYGON((0 0,2 0,2 2,0 2,0 0))
ST_NPOINTS统计 geometry 中的点数ST_NPOINTS(ST_MAKELINE(...)) → 2
ST_NUMPOINTS统计 geometry 中的点数仅 GEOMETRYST_NUMPOINTS(ST_MAKELINE(...)) → 2
ST_INTERSECTS测试两个 geometry 是否相交仅 GEOMETRYST_INTERSECTS(TO_GEOMETRY('LINESTRING(0 0, 2 2)'), TO_GEOMETRY('LINESTRING(0 2, 2 0)')) → TRUE
ST_DISJOINT测试两个 geometry 是否不相交仅 GEOMETRYST_DISJOINT(TO_GEOMETRY('POINT(3 3)'), TO_GEOMETRY('POLYGON((0 0,2 0,2 2,0 2,0 0))')) → TRUE
ST_WITHIN测试一个 geometry 是否位于另一个 geometry 内部仅 GEOMETRYST_WITHIN(TO_GEOMETRY('POINT(1 1)'), TO_GEOMETRY('POLYGON((0 0,2 0,2 2,0 2,0 0))')) → TRUE
ST_EQUALS测试两个 geometry 在空间上是否相等仅 GEOMETRYST_EQUALS(TO_GEOMETRY('POINT(1 1)'), TO_GEOMETRY('POINT(1 1)')) → TRUE
ST_LENGTH测量 LineString 的长度ST_LENGTH(ST_MAKELINE(...)) → 5.57
ST_DISTANCE测量 geometry 之间的距离ST_DISTANCE(ST_MAKEGEOMPOINT(-122.35, 37.55), ST_MAKEGEOMPOINT(-122.40, 37.60)) → 5.57
ST_DWITHIN测试两个 geometry 是否在给定距离内仅 GEOMETRYST_DWITHIN(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)'), 1.5) → TRUE
ST_UNION返回两个输入合并后的 geometry仅 GEOMETRYST_UNION(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)')) → MULTIPOINT(0 0,1 1)
ST_INTERSECTION返回两个 geometry 的共享部分仅 GEOMETRYST_INTERSECTION(TO_GEOMETRY('LINESTRING(0 0, 1 1)'), TO_GEOMETRY('LINESTRING(0 0, 1 1)')) → LINESTRING(0 0,1 1)
ST_DIFFERENCE返回第一个 geometry 中未被第二个覆盖的部分仅 GEOMETRYST_DIFFERENCE(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)')) → POINT(0 0)
ST_SYMDIFFERENCE返回两个 geometry 中不重叠的部分仅 GEOMETRYST_SYMDIFFERENCE(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)')) → MULTIPOINT(0 0,1 1)

变换

函数描述说明示例
ST_HILBERT将 geometry 或 geography 编码为 Hilbert 曲线索引ST_HILBERT(TO_GEOMETRY('POINT(0.5 0.5)'), [0, 0, 1, 1]) → 715827882
ST_SETSRID为 geometry 指定 SRID仅 GEOMETRYST_SETSRID(ST_MAKEGEOMPOINT(-122.35, 37.55), 3857) → POINT(-122.35 37.55)
ST_TRANSFORM将 geometry 转换到新的 SRID仅 GEOMETRYST_TRANSFORM(ST_MAKEGEOMPOINT(-122.35, 37.55), 3857) → POINT(-13618288.8 4552395.0)

空间关系

函数描述示例
ST_CONTAINS测试一个 geometry 是否包含另一个 geometryST_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返回平均六边形面积(km²)H3_HEX_AREA_KM2(10) → 0.0152
H3_HEX_AREA_M2返回平均六边形面积(m²)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
GEO_DISTANCE使用 WGS84 返回近似距离(米)GEO_DISTANCE(0, 0, 0, 0) → 0
GREAT_CIRCLE_DISTANCE返回大圆距离(米)GREAT_CIRCLE_DISTANCE(0, 0, 0, 0) → 0
GREAT_CIRCLE_ANGLE返回大圆中心角(度)GREAT_CIRCLE_ANGLE(0, 0, 45, 0) → 45
POINT_IN_POLYGON检查点是否位于多边形内部POINT_IN_POLYGON([lon, lat], [[p1_lon, p1_lat], ...]) → TRUE
POINT_IN_ELLIPSES检查点是否位于任一椭圆内部POINT_IN_ELLIPSES(10, 10, 10, 9.1, 1, 0.9999) → 1

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

文档内容是否有帮助?