You need to enable JavaScript to run this app.
文档中心
ByteHouse云数仓版

ByteHouse云数仓版

复制全文
下载 pdf
函数参考
地理函数
复制全文
下载 pdf
地理函数

几何构造函数

ST_AsWKB

返回几何的WKB表示形式。
语法

ST_AsWKB(geometryA)

参数
geometryA— 几何类型
返回值
WKB格式的二进制字符串
示例

SELECT
    ST_AsWKB(ST_GeomFromText('POINT(0 1)')) AS g1,
    ST_AsWKB(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')) AS g2,
    ST_AsWKB(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')) AS g3
g1─┬─g2──┬─g3────┐
│ �?  │ �?�?��? │ �?�?��?�?�? │
└────┴─────┴───────┘

ST_AsText

返回几何的WKT表示形式。
语法

ST_AsText(geometryA)

参数
geometryA— 几何类型
返回值
WKT格式的二进制字符串
示例

SELECT
    ST_AsText(ST_GeomFromText('POINT(0 1)')),
    ST_AsText(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')),
    ST_AsText(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'))
g1──────────┬─g2──────────────────────────┬─g3──────────────────────────────┐
│ POINT (0 1) │ LINESTRING (1 1, 0 0, -1 1) │ POLYGON ((1 1, 0 0, -1 1, 1 1)) │
└─────────────┴─────────────────────────────┴─────────────────────────────────┘

ST_GeometryFromText

通过WKT构造几何类型对象。
语法

ST_GeometryFromText(WKT)

参数
WKT— WKT字符串
返回值
Geometry类型
示例

SELECT
    ST_GeomFromText('POINT(0 1)') g1,
    ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)') g2,
    ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))') g3
g1────┬─g2───────────────────┬─g3───────────────────────────┐
│ (0,1) │ [(1,1),(0,0),(-1,1)] │ [[(1,1),(0,0),(-1,1),(1,1)]] │
└───────┴──────────────────────┴──────────────────────────────┘

ST_GeomFromBinary

通过WKB构造几何类型对象。
语法

ST_GeomFromBinary(WKB)

参数
WKB— WKB字符串
返回值
Geometry类型
示例

SELECT
    ST_AsText(ST_GeomFromWKB(ST_AsWKB(ST_GeomFromText('POINT(0 1)')))) AS g1,
    ST_AsText(ST_GeomFromWKB(ST_AsWKB(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)')))) AS g2,
    ST_AsText(ST_GeomFromWKB(ST_AsWKB(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')))) AS g3
g1──────────┬─g2──────────────────────────┬─g3──────────────────────────────┐
│ POINT (0 1) │ LINESTRING (1 1, 0 0, -1 1) │ POLYGON ((1 1, 0 0, -1 1, 1 1)) │
└─────────────┴─────────────────────────────┴─────────────────────────────────┘

空间关系函数

ST_Contains

如果几何图形 geometryA 完全包含 geometryB ( geometryB 的所有点都在 geometryA 中且至少一个点在 geometryA 内部)则返回 true ,否则返回 false
语法

ST_Contains(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('POINT(5 5)')) AS contains1,
    ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('POINT(0 0)')) AS contains2,
    ST_Contains(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('POINT(-1 0)')) AS contains3
┌─contains1─┬─contains2─┬─contains3─┐
│         1 │         0 │         0 │
└───────────┴───────────┴───────────┘

ST_ContainsProperly

如果几何图形 geometryA 严格包含 geometryB ,即 geometryB 的所有点都在 geometryA 的内部(不包括边界),则返回 true ,否则返回 false 。
语法

ST_ContainsProperly(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_ContainsProperly(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POINT(5 5),LINESTRING(1 1,2 2))')) AS containsproperly1,
    ST_ContainsProperly(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POINT(10 10), LINESTRING(0 0, 0 10))')) AS containsproperly2,
    ST_ContainsProperly(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POINT(-1 0),LINESTRING(11 5,12 5))')) AS containsproperly3
containsproperly1─┬─containsproperly2─┬─containsproperly3─┐
│                 1 │                 0 │                 0 │
└───────────────────┴───────────────────┴───────────────────┘

ST_Crosses

如果两个输入的geometry对象有部分交集但互相不包含,则该函数返回true。
语法

ST_Crosses(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Crosses(ST_GeomFromText('LINESTRING(0 10, 0 -10)'), ST_GeomFromText('LINESTRING(0 0, 1 1)')) AS crosses1,
    ST_Crosses(ST_GeomFromText('LINESTRING(0 10, 0 -10)'), ST_GeomFromText('LINESTRING(-4 0, 1 1)')) AS crosses2,
    ST_Crosses(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POINT(5 5),LINESTRING(1 1,2 2))')) AS crosses3
─crosses1─┬─crosses2─┬─crosses3─┐
│        0 │        1 │        0 │
└──────────┴──────────┴──────────┘

ST_Disjoint

如果几何对象 geometryA 和 geometryB 没有任何交集(完全不相交),则返回 true;否则返回 false 。
语法

ST_Disjoint(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Disjoint(ST_GeomFromText('POINT(5 5)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS disjoint1,
    ST_Disjoint(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS disjoint2,
    ST_Disjoint(ST_GeomFromText('POINT(-1 0)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS disjoint3
disjoint1─┬─disjoint2─┬─disjoint3─┐
│         0 │         0 │         1 │
└───────────┴───────────┴───────────┘

ST_Equals

如果几何对象 geometryA 和 geometryB 在形状和位置上完全相同,则返回 true;否则返回 false 。
语法

ST_Equals(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Equals(ST_GeomFromText('LINESTRING(0 0, 1 1)'), ST_GeomFromText('LINESTRING(1 1, 0 0)')) AS quals1,
    ST_Equals(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),LINESTRING(0 2, 0 5))')) AS quals2,
    ST_Equals(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POLYGON((0 0, 10 0, 10 10, 0 10, 0 0)),MULTIPOINT(0 2, 0 5))')) AS quals3
quals1─┬─quals2─┬─quals3─┐
│      1 │      1 │      1 │
└────────┴────────┴────────┘

ST_Intersects

如果几何对象 geometryA 和 geometryB 有任何部分相交(包括边界和内部),则返回 true;否则返回 false 。
语法

ST_Intersects(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Intersects(ST_GeomFromText('POINT(5 5)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS intersects1,
    ST_Intersects(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS intersects2,
    ST_Intersects(ST_GeomFromText('POINT(-1 0)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS intersects3
intersects1─┬─intersects2─┬─intersects3─┐
│           1 │           1 │           0 │
└─────────────┴─────────────┴─────────────┘

ST_Overlaps

如果几何对象 geometryA 和 geometryB 部分重叠(即它们相交,且结果集既不是 geometryA 也不是 geometryB ),则返回 true;否则返回 false 。
语法

ST_Overlaps(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Overlaps(ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'), ST_GeomFromText('POLYGON((1 1, 1 3, 3 3, 3 1, 1 1))')) AS overlaps1,
    ST_Overlaps(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POINT(5 5),LINESTRING(1 1,2 2))')) AS overlaps2
┌─overlaps1─┬─overlaps2─┐
│         1 │         0 │
└───────────┴───────────┘

ST_Relate

用于描述两个几何对象之间空间关系的函数,如果两个几何对象之间的关系符合指定的模式,则返回 true;否则返回 false 。
语法

ST_Relate(geometryA, geometryB)
ST_Relate(geometryA, geometryB, pattern_matrix)

参数
geometryA, geometryB— 几何类型
pattern_matrix — 指定关系模式的字符串
返回值
布尔值
示例

SELECT
    ST_Relate(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('LINESTRING(0 0, 1 1)')) AS relate1,
    ST_Relate(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('LINESTRING(0 0, 1 1)'), 'F0FFFF*02') AS relate2,
    ST_Relate(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('LINESTRING(0 0, 1 1)'), 'F0FFF0*02') AS relate3
┌─relate1───┬─relate2─┬─relate3─┐
│ F0FFFF102 │       1 │       0 │
└───────────┴─────────┴─────────┘

ST_Touches

如果几何对象 geometryA 和 geometryB 的边界有接触,但内部没有相交,那么返回 true;否则返回 false 。
语法

ST_Touches(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Touches(ST_GeomFromText('LINESTRING(0 10, 0 -10)'), ST_GeomFromText('LINESTRING(0 0, 1 1)')) AS touches1,
    ST_Touches(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('GEOMETRYCOLLECTION (POINT(5 5),LINESTRING(1 1,2 2))')) AS touches2
─touches1─┬─touches2─┐
│        1 │        0 │
└──────────┴──────────┘

ST_Within

如果几何对象 geometryA 完全在几何对象 geometryB 的内部(包括边界),则返回 true;否则返回 false 。Full
要点:
语法

ST_Within(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Within(ST_GeomFromText('POINT(0 0)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS within1,
    ST_Within(ST_GeomFromText('POINT(521513 5377804)', 32631), ST_GeomFromText('POLYGON((521526 5377783, 521481 5377811, 521494 5377832, 521539 5377804, 521526 5377783))', 32631)) AS within2
┌─within1─┬─within2─┐
│       0 │       1 │
└─────────┴─────────┘

ST_DWithin

用于判断两个几何对象之间的距离是否在给定的阈值内的函数。如果两个几何对象之间的最短距离小于或等于给定的距离阈值,则返回 true;否则返回 false
语法

ST_DWithin(geometryA, geometryB, distance)

参数
geometryA, geometryB— 几何类型
distance— 表示距离阈值
返回值
布尔值
示例

SELECT
    ST_DWithin(ST_GeomFromText('POINT(1 1)'), ST_GeomFromText('POINT(2 2)'), 2.) AS dwithin1,
    ST_DWithin(ST_GeomFromText('POINT(1 1)'), ST_GeomFromText('POINT(5 5)'), 2.) AS dwithin2
dwithin1─┬─dwithin2─┐
│        1 │        0 │
└──────────┴──────────┘

ST_Covers

如果几何对象 geometryA 完全覆盖 geometryB (即 geometryB 完全在 geometryA 内部,并且 geometryA 的边界可以与 geometryB 的边界重合),则返回 true;否则返回 false 。
语法

ST_Covers(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_Covers(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('LINESTRING(1 10, 9 10, 9 8)')) AS covers1,
    ST_Covers(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))'), ST_GeomFromText('POINT(-1 0)')) AS covers2
┌─covers1─┬─covers2─┐
│       1 │       0 │
└─────────┴─────────┘

ST_CoveredBy

如果几何对象 geometryA 被几何对象 geometryB 完全覆盖(即 geometryA 完全在 geometryB 内部,并且 geometryB 的边界可以与 geometryA 的边界重合),则返回 true;否则返回 false 。
语法

ST_CoveredBy(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
布尔值
示例

SELECT
    ST_CoveredBy(ST_GeomFromText('LINESTRING(1 10, 9 10, 9 8)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS coveredby1,
    ST_CoveredBy(ST_GeomFromText('POINT(-1 0)'), ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))')) AS coveredby2
┌─coveredby1─┬─coveredby2─┐
│          1 │          0 │
└────────────┴────────────┘

几何操作函数

ST_Boundary

用于获取几何对象边界的函数
语法

ST_Boundary(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示输入几何对象边界的几何对象
示例

SELECT
    ST_AsText(ST_Boundary(ST_GeomFromText('POINT(0 1)'))) AS boundary01,
    ST_AsText(ST_Boundary(ST_GeomFromText('MULTIPOINT(0 0, 1 1)'))) AS boundary02,
    ST_AsText(ST_Boundary(ST_GeomFromText('LINESTRING(1 1,0 0, -1 1)'))) AS boundary03
─boundary01───────────────┬─boundary02───────────────┬─boundary03─────────────────┐
│ GEOMETRYCOLLECTION EMPTY │ GEOMETRYCOLLECTION EMPTY │ MULTIPOINT ((1 1), (-1 1)) │
└──────────────────────────┴──────────────────────────┴────────────────────────────┘

ST_Buffer

用于为几何对象创建缓冲区的函数。
语法

ST_Buffer(geometryA, distance)

参数
geometryA— 几何类型
distance— 缓冲区的距离,可以是正数或负数。正数表示向外扩展,负数表示向内收缩。
返回值
返回一个新的几何对象,表示输入几何对象的缓冲区
示例

SELECT ST_AsText(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50.)) AS buffer
buffer─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ POLYGON ((150 90, 149.0392640201615 80.24548389919359, 146.19397662556435 70.86582838174552, 141.57348061512727 62.22148834901989, 135.35533905932738 54.64466094067263, 127.77851165098011 48.42651938487274, 119.1341716182545 43.80602337443566, 109.75451610080641 40.960735979838475, 100 40, 90.24548389919359 40.960735979838475, 80.86582838174552 43.80602337443566, 72.2214883490199 48.42651938487273, 64.64466094067262 54.64466094067262, 58.426519384872734 62.22148834901989, 53.80602337443566 70.8658283817455, 50.960735979838475 80.24548389919357, 50 90, 50.960735979838475 99.75451610080641, 53.80602337443566 109.13417161825448, 58.42651938487273 117.7785116509801, 64.64466094067262 125.35533905932738, 72.22148834901989 131.57348061512727, 80.86582838174549 136.19397662556432, 90.24548389919357 139.0392640201615, 99.99999999999999 140, 109.75451610080641 139.0392640201615, 119.1341716182545 136.19397662556435, 127.7785116509801 131.57348061512727, 135.35533905932738 125.35533905932738, 141.57348061512727 117.77851165098011, 146.19397662556432 109.13417161825453, 149.0392640201615 99.75451610080644, 150 90)) │
└────────────────────────────────────────────────────────────────────────────────────────────

ST_Difference

用于计算两个几何对象之间差异的函数。
语法

ST_Difference(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
返回一个新的几何对象,表示 geometryA 中去除与 geometryB 重叠的部
示例

SELECT ST_AsText(ST_Difference(ST_GeomFromText('LINESTRING(50 100, 50 200)'), ST_GeomFromText('LINESTRING(50 50, 50 150)'))) AS difference
┌─difference──────────────────┐
│ LINESTRING (50 150, 50 200) │
└─────────────────────────────┘

ST_Envelope

用于获取几何对象的最小外接矩形的函数,最小外接矩形是能够完全包含输入几何对象的最小矩形。
语法

ST_Envelope(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示输入几何对象最小外接矩形的多边形几何对象
示例

SELECT
    ST_AsText(ST_Envelope(ST_GeomFromText('POINT(521513 5377804)'))) AS envelope_1,
    ST_AsText(ST_Envelope(ST_GeomFromText('LINESTRING(0 2, -1 1,0 0, 0.5 0, 1 0, 2 1, 1 2, 0.5 2, 0 2)'))) AS envelope_2,
    ST_AsText(ST_Envelope(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'))) AS envelope_3
┌─envelope_1─────────────┬─envelope_2─────────────────────────────┬─envelope_3──────────────────────────────┐
│ POINT (521513 5377804) │ POLYGON ((-1 0, 2 0, 2 2, -1 2, -1 0)) │ POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0)) │
└────────────────────────┴────────────────────────────────────────┴─────────────────────────────────────────┘

ST_ExteriorRing

用于获取多边形几何对象外部边界环(即外环)的函数。
语法

ST_ExteriorRing(polygon_geometry)

参数
polygon_geometry— 几何类型
返回值
返回一个表示多边形外部边界环的线串几何对象
示例

SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText('POLYGON((52 18,66 23,73 9,48 6,52 18),(59 18,67 18,67 13,59 13,59 18))'))) AS exteriorring
┌─exteriorring─────────────────────────────────┐
│ LINESTRING (52 18, 66 23, 73 9, 48 6, 52 18) │
└──────────────────────────────────────────────┘

ST_Intersection

用于计算两个几何对象相交部分的函数。
语法

ST_Intersection(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
返回一个表示 geometryA 和 geometryB 相交部分的几何对象
示例

SELECT ST_AsText(ST_Intersection(ST_GeomFromText('LINESTRING(0 10, 0 -10)'), ST_GeomFromText('LINESTRING(0 0, 1 1)'))) AS intersection
┌─intersection─┐
│ POINT (0 0)  │
└──────────────┘

ST_Union

用于合并两个或多个几何对象的函数。
语法

ST_Union(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
返回一个合并了输入几何对象的新几何对象
示例

SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(1 2)'))) AS union_1
─union_1─────┐
│ POINT (1 2) │
└─────────────

ST_Collect

用于将多个几何对象组合成一个集合。
语法

ST_Collect(geometryA, geometryB,...)

参数
通常返回的是一个 GEOMETRYCOLLECTION 类型的几何对象
返回值
布尔值
示例

SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(-1 -1)', 4326), ST_GeomFromText('LINESTRING ( 0 0, 0 2 )', 4326), ST_GeomFromText('POLYGON((0 0, 0 10, 0 51, 50 20, 30 20, 7 32, 0 0), (1 1, 1 3, 18 18, 1 1))', 4326))) AS collect
┌─collect─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ GEOMETRYCOLLECTION (POINT (-1 -1), LINESTRING (0 0, 0 2), POLYGON ((0 0, 0 10, 0 51, 50 20, 30 20, 7 32, 0 0), (1 1, 1 3, 18 18, 1 1))) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

ST_Normalize

用于将几何对象规范化的函数
语法

ST_Normalize(geometryA)

参数
geometryA— 几何类型
返回值
布尔值
示例

SELECT ST_AsText(ST_Normalize(ST_GeomFromText('POLYGON((0 10,0 0,10 0,10 10,0 10),(4 2,2 2,2 4,4 4,4 2),(6 8,8 8,8 6,6 6,6 8))'))) AS normalize
┌─normalize─────────────────────────────────────────────────────────────────────────────────────┐
│ POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0), (6 6, 8 6, 8 8, 6 8, 6 6), (2 2, 4 2, 4 4, 2 4, 2 2)) │
└───────────────────────────────────────────────────────────────────────────────────────────────┘

ST_RemoveRepeatedPoints

用于从线串或多边形的边界中移除重复顶点的函数。
语法

ST_RemoveRepeatedPoints(geometryA)

参数
geometryA— 几何类型
返回值
返回一个新的几何对象,其中输入几何对象中的重复顶点已被移除
示例

SELECT
    ST_AsText(ST_RemoveRepeatedPoints(ST_GeomFromText('LINESTRING(0 0, 1 1, 1 1, 2 2)'))) AS remove1,
    ST_AsText(ST_RemoveRepeatedPoints(ST_GeomFromText('MULTILINESTRING((0 0, 1 1, 1 1, 2 2, 2 2, 2 2, 2 2, 3 3, 3 3),(5 5, 5 5, 5 5, 4 4, 2 2))'))) AS remove2,
    ST_AsText(ST_RemoveRepeatedPoints(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 10 10, 0 10, 0 10, 0 10, 0 0, 0 0, 0 0),(5 5, 5 5, 5 8, 8 8, 8 8, 8 8, 8 5,8 5, 5 5, 5 5, 5 5, 5 5, 5 5))'))) AS remove3
remove1────────────────────┬─remove2─────────────────────────────────────────────────┬─remove3────────────────────────────────────────────────────────────┐
│ LINESTRING (0 0, 1 1, 2 2) │ MULTILINESTRING ((0 0, 1 1, 2 2, 3 3), (5 5, 4 4, 2 2)) │ POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0), (5 5, 5 8, 8 8, 8 5, 5 5)) │
└────────────────────────────┴─────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────┘

ST_Simplify

用于简化几何对象的函数。
语法

ST_Simplify(geometryA, tolerance)

参数
geometryA— 几何类型
tolerance:简化的容差,用于控制简化的程度。值越大,简化程度越高。
返回值
返回一个简化后的几何对象
示例

SELECT
    ST_AsText(ST_Simplify(ST_GeomFromText('LINESTRING(0 0, 0 10, 0 51, 50 20, 30 20, 7 32)'), 2.)) AS simplify1,
    ST_AsText(ST_Simplify(ST_GeomFromText('POLYGON((0 0, 0 10, 0 51, 50 20, 30 20, 7 32, 0 0), (1 1, 1 3, 18 18, 1 1))'), 20.)) AS simplify2
─simplify1──────────────────────────────────┬─simplify2───────────────────────────────┐
│ LINESTRING (0 0, 0 51, 50 20, 30 20, 7 32) │ POLYGON ((0 0, 0 51, 50 20, 7 32, 0 0)) │
└────────────────────────────────────────────┴─────────────────────────────────────────┘

ST_Translate

用于平移几何对象的函数。
语法

ST_Translate(geometryA, x_delta, y_delta)

参数
geometryA, geometryB— 几何类型
x_delta:在 X 轴方向上的平移距离
y_delta:在 Y 轴方向上的平移距离
返回值
返回一个平移后的新几何对象
示例

SELECT
    ST_AsText(ST_Translate(ST_GeomFromText('POINT (0 0)'), 1., -1.)) AS trans1,
    ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING (0 0, 0 1, 1 2)'), 2., -2.)) AS trans2,
    ST_AsText(ST_Translate(ST_GeomFromText('POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'), 1., -1.)) AS trans3
─trans1───────┬─trans2───────────────────────┬─trans3─────────────────────────────────┐
│ POINT (1 -1) │ LINESTRING (2 -2, 2 -1, 3 0) │ POLYGON ((1 -1, 2 -1, 2 0, 1 0, 1 -1)) │
└──────────────┴──────────────────────────────┴────────────────────────────────────────┘

ST_Dump

用于分解复合几何对象(如 MULTIPOINT 、 MULTILINESTRING 、 MULTIPOLYGON )为单个几何对象的函数。
语法

ST_Dump(geometryA)

参数
geometryA— 几何类型
返回值
返回一个包含行的结果集,每行包含一个单独的几何对象和访问路径
示例

SELECT
    ST_AsText(col2.1) AS geom,
    col2.2 AS path
FROM
(
    SELECT arrayJoin(col) AS col2
    FROM
    (
        SELECT ST_Dump(ST_GeomFromText('GEOMETRYCOLLECTION (POINT (1 1), LINESTRING (0 0, 1 1), POLYGON ((0 0, 1 1, 1 0, 0 0)), MULTIPOLYGON (((0 0, 1 1, 1 0, 0 0)), ((2 2, 3 3, 3 2, 2 2))), GEOMETRYCOLLECTION (POINT (3 3)))')) AS col
    )
) AS dump
─geom───────────────────────────┬─path──┐
│ POINT (1 1)                    │ [1]   │
│ LINESTRING (0 0, 1 1)          │ [2]   │
│ POLYGON ((0 0, 1 1, 1 0, 0 0)) │ [3]   │
│ POLYGON ((0 0, 1 1, 1 0, 0 0)) │ [4,1] │
│ POLYGON ((2 2, 3 3, 3 2, 2 2)) │ [4,2] │
│ POINT (3 3)                    │ [5,1] │
└────────────────────────────────┴───────┘

ST_Transform

用于将几何对象从一个空间参考系统转换到另一个空间参考系统的函数。
语法

ST_Transform(geometryA, target_srid)
ST_Transform(geometryA, from_srid_text, to_srid_text)

参数
geometryA— 几何类型
target_srid:目标空间参考系统的标识符(SRID)
from_srid_text,to_srid_text:字符串表示的空间参考系统标识
返回值
返回转换到指定空间参考系统后的几何对象
示例

SELECT ST_AsText(p),
    ST_SRID(p)
from (
        SELECT ST_Transform(
                ST_GeomFromText('POINT(52.3676 4.9041)', 4326),
                3857
            ) as p
    );
─ST_AsText(p)────────────────────────────────┬─ST_SRID(p)─┐
│ POINT (5829534.566065834 546589.7188300652) │       3857 │
└─────────────────────────────────────────────┴────────────┘
SELECT ST_AsText(p),
    ST_SRID(p)
from (
        SELECT ST_Transform(
                ST_GeomFromText('POINT(52.3676 4.9041)'),
                'EPSG:4326',
                'EPSG:3857'
            ) as p
    );
─ST_AsText(p)────────────────────────────────┬─ST_SRID(p)─┐
│ POINT (5829534.566065834 546589.7188300652) │       3857 │
└─────────────────────────────────────────────┴────────────┘

几何访问函数

ST_Centroid

用于计算几何对象质心(几何中心)的函数。
语法

ST_CoveredBy(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示输入几何对象质心的点几何对象
示例

SELECT
    ST_AsText(ST_Centroid(ST_GeomFromText('POLYGON((0 0, 0 10, 10 10, 10 0, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))'))) AS centroid1,
    ST_AsText(ST_Centroid(ST_GeomFromText('LINESTRING(0 2, 0 0, 1 0, 1 2)'))) AS centroid2,
    ST_AsText(ST_Centroid(ST_GeomFromText('MULTIPOINT(0 2, 0 0, 1 0, 1 2)'))) AS centroid3
┌─centroid1───────────────────────────────────┬─centroid2───────┬─centroid3─────┐
│ POINT (5.083333333333333 5.083333333333333) │ POINT (0.5 0.8) │ POINT (0.5 1) │
└─────────────────────────────────────────────┴─────────────────┴───────────────┘

ST_ConvexHull

用于计算几何对象凸包的函数,凸包是包含给定几何对象的最小凸多边形。
语法

ST_ConvexHull(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示输入几何对象凸包的几何对象。
示例

SELECT
    ST_AsText(ST_ConvexHull(ST_GeomFromText('MULTIPOINT(0 0, 1 1, 2 0)'))) AS convexhull1,
    ST_AsText(ST_ConvexHull(ST_GeomFromText('POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))'))) AS convexhull
┌─convexhull1────────────────────┬─convexhull──────────────────────────┐
│ POLYGON ((0 0, 1 1, 2 0, 0 0)) │ POLYGON ((0 0, 0 2, 2 2, 2 0, 0 0)) │
└────────────────────────────────┴─────────────────────────────────────┘

ST_PointOnSurface

用于获取几何对象表面上的一个点的函数。
语法

ST_PointOnSurface(geometryA)

参数
geometryA— 几何类型
返回值
返回一个位于输入几何对象表面上的点的几何对象。
示例

SELECT ST_AsText(ST_PointOnSurface(ST_GeomFromText('POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))'))) AS p
┌─p───────────────┐
│ POINT (2.5 2.5) │
└─────────────────┘

ST_Dimension

用于获取几何对象维度的函数。
点的维度为 0。
线的维度为 1。
面(多边形)的维度为 2
语法

ST_Dimension(geometryA)

参数
geometryA— 几何类型
返回值
返回一个整数,表示输入几何对象的维度。
示例

SELECT
    ST_Dimension(ST_GeomFromText('POINT(521513 5377804)')) AS dimension1,
    ST_Dimension(ST_GeomFromText('LINESTRING(0 2, -1 1,0 0, 0.5 0, 1 0, 2 1, 1 2, 0.5 2, 0 2)')) AS dimension2,
    ST_Dimension(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))')) AS dimension3
┌─dimension1─┬─dimension2─┬─dimension3─┐
│          0 │          1 │          2 │
└────────────┴────────────┴────────────┘

ST_Distance

用于计算两个几何对象之间最短距离的函数。
语法

ST_Distance(geometryA, geometryB)

参数
geometryA, geometryB— 几何类型
返回值
返回一个表示两个几何对象之间最短距离的数值
示例

SELECT
    ST_Distance(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(1 2)')) AS distance_1,
    ST_Distance(ST_GeomFromText('POINT(5 0)'), ST_GeomFromText('POINT(10 12)')) AS distance_2
┌─distance_1─┬─distance_2─┐
│          0 │         13 │
└────────────┴────────────┘

ST_GeometryType

用于获取几何对象类型的函数。
语法

ST_GeometryType(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示几何对象类型的字符串
示例

SELECT
    ST_GeometryType(ST_GeomFromText('POINT(521513 5377804)')) AS geom_type_1,
    ST_GeometryType(ST_GeomFromText('LINESTRING(0 2, -1 1,0 0, 0.5 0, 1 0, 2 1, 1 2, 0.5 2, 0 2)')) AS geom_type_2,
    ST_GeometryType(ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(2 2, 2 4, 4 4, 4 2, 2 2))')) AS geom_type_3
┌─geom_type_1─┬─geom_type_2─┬─geom_type_3─┐
│ Point       │ LineString  │ Polygon     │
└─────────────┴─────────────┴─────────────┘

ST_IsClosed

用于判断几何对象是否闭合的函数。
对于线串(LINESTRING),如果起点和终点相同,则认为是闭合的。
对于多边形(POLYGON),其边界必须形成一个连续且封闭的环。
语法

ST_IsClosed(geometryA)

参数
geometryA— 几何类型
返回值
如果几何对象是闭合的,则返回 true;否则返回 false 。
示例

SELECT
    ST_IsRing(geom),
    ST_IsClosed(geom),
    ST_IsSimple(geom)
FROM
(
    SELECT ST_GeomFromText('LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)') AS geom
) AS foo
─ST_IsRing(geom)─┬─ST_IsClosed(geom)─┬─ST_IsSimple(geom)─┐
│               0 │                 1 │                 0 │
└─────────────────┴───────────────────┴───────────────────┘

ST_IsSimple

用于判断几何对象是否简单的函数。
对于线串(LINESTRING),简单意味着它不自身相交(除了起点和终点可能重合)。
对于多边形(POLYGON),简单意味着其边界不自交,并且内部没有空洞。
语法

ST_IsSimple(geometryA)

参数
geometryA— 几何类型
返回值
如果几何对象是简单的,则返回 true;否则返回 false
示例

SELECT
    ST_IsRing(geom),
    ST_IsClosed(geom),
    ST_IsSimple(geom)
FROM
(
    SELECT ST_GeomFromText('LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)') AS geom
) AS foo
─ST_IsRing(geom)─┬─ST_IsClosed(geom)─┬─ST_IsSimple(geom)─┐
│               0 │                 1 │                 0 │
└─────────────────┴───────────────────┴───────────────────┘

ST_IsRing

判断一个线串是否构成环的函数,环的要求不仅是起点和终点重合,还不能有自相交的情况。
语法

ST_IsRing(geometryA)

参数
geometryA— 几何类型
返回值
如果输入的线串几何对象构成一个环(即起点和终点相同且不自身相交),则返回 true;否则返回 false 。
示例

SELECT
    ST_IsRing(geom),
    ST_IsClosed(geom),
    ST_IsSimple(geom)
FROM
(
    SELECT ST_GeomFromText('LINESTRING(0 0, 0 1, 1 0, 1 1, 0 0)') AS geom
) AS foo
─ST_IsRing(geom)─┬─ST_IsClosed(geom)─┬─ST_IsSimple(geom)─┐
│               0 │                 1 │                 0 │
└─────────────────┴───────────────────┴───────────────────┘

ST_IsValid

用于判断几何对象是否有效的函数,有效性的判断基于一系列的空间规则和约束,例如多边形的边界不能自交、线串的顶点顺序要合理等。
语法

ST_IsValid(geometryA)

参数
geometryA— 几何类型
返回值
如果几何对象在空间上是有效的,则返回 true;否则返回 false 。
示例

SELECT
    'valid_1',
    ST_IsValid(ST_GeomFromText('LINESTRING(0 0, 1 1)')) AS good_line,
    ST_IsValid(ST_GeomFromText('POLYGON((0 0, 1 1, 1 2, 1 1, 0 0))')) AS bad_poly
─'valid_1'─┬─good_line─┬─bad_poly─┐
│ valid_1   │         1 │        0 │
└───────────┴───────────┴──────────┘

ST_Length

用于计算线串或多边形边界长度的函数。
对于线串,直接计算线串的长度。
对于多边形,计算其边界的长度。
语法

ST_Length(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示输入几何对象长度的数值
示例

SELECT ST_Length(ST_Transform(ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.1240 42.45666, -72.123 42.1546)', 4326), 3857)) len;
┌───────────────len─┐
│ 46495.61309808517 │
└───────────────────┘

ST_Area

用于计算多边形几何对象面积的函数,计算的面积基于多边形所在的空间参考系统和坐标单位。
语法

ST_Area(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示输入多边形几何对象面积的数值
示例

SELECT ST_Area(geom) AS sqft
FROM
(
    SELECT ST_GeomFromText('POLYGON((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))', 2249) AS geom
) AS subquery
┌────sqft─┐
│ 928.625 │
└─────────┘

ST_NumPoints

用于获取线串或多边形中顶点数量的函数。
对于线串,返回其包含的点的数量。
对于多边形,返回其边界上点的数量。
语法

ST_NumPoints(geometryA)

参数
geometryA— 几何类型
返回值
返回一个整数,表示输入几何对象中的顶点数量
示例

SELECT
    ST_NumPoints(ST_GeomFromText('POINT(521513 5377804)')) AS numpoints_1,
    ST_NumPoints(ST_GeomFromText('LINESTRING(0 2, -1 1,0 0, 0.5 0, 1 0, 2 1, 1 2, 0.5 2, 0 2)')) AS numpoints_2
┌─numpoints_1─┬─numpoints_2─┐
│           1 │           9 │
└─────────────┴─────────────┘

ST_SetSRID

用于为几何对象设置空间参考标识符(Spatial Reference Identifier,简称 SRID)的函数。
语法

ST_SetSRID(geometryA, srid)

参数
geometryA— 几何类型
srid— 指定的空间参考标识符,是一个整数
返回值
返回一个具有指定 SRID 的新几何对象
示例

SELECT ST_SRID(ST_SetSRID(ST_GeomFromText('POINT(521513 5377804)'), 3986)) AS set_srid
─set_srid─┐
│     3986 │
└──────────┘

ST_SRID

用于获取几何对象的空间参考标识符(Spatial Reference Identifier,简称 SRID)的函数。
语法

ST_SRID(geometryA)

参数
geometryA— 几何类型
返回值
返回一个整数,表示输入几何对象的 SRID 。
示例

SELECT ST_SRID(ST_GeomFromText('POINT(521513 5377804)', 4326)) AS srid
─srid─┐
│ 4326 │
└──────

ST_X

用于获取点几何对象的 X 坐标值的函数。
语法

ST_X(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示点几何对象 X 坐标的数值
示例

SELECT
    ST_X(ST_GeomFromText('POINT(521513 5377804)')) AS x,
    ST_Y(ST_GeomFromText('POINT(521513 5377804)')) AS y
┌──────x─┬───────y─┐
│ 521513 │ 5377804 │
└────────┴─────────┘

ST_Y

用于获取点几何对象的 Y 坐标值的函数。
语法

ST_Y(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示点几何对象 Y 坐标的数值
示例

SELECT
    ST_X(ST_GeomFromText('POINT(521513 5377804)')) AS x,
    ST_Y(ST_GeomFromText('POINT(521513 5377804)')) AS y
┌──────x─┬───────y─┐
│ 521513 │ 5377804 │
└────────┴─────────┘

ST_XMIN

用于获取几何对象在 X 轴方向上的最小坐标值的函数。
语法

ST_XMIN(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示几何对象在 X 轴方向上最小坐标的数值
示例

SELECT
    ST_XMIN(p),
    ST_XMAX(p),
    ST_YMIN(p),
    ST_YMAX(p)
FROM
(
    SELECT ST_GeomFromText('POLYGON((-5 -8, 10 0, 10 15, 0 15, -5 -8),(-6 2, 2 40, 4 40, 4 2, -6 2))') AS p
) AS t
┌─ST_XMIN(p)─┬─ST_XMAX(p)─┬─ST_YMIN(p)─┬─ST_YMAX(p)─┐
│         -5 │         10 │         -8 │         15 │
└────────────┴────────────┴────────────┴────────────

ST_XMAX

用于获取几何对象在 X 轴方向上的最大坐标值的函数。
语法

ST_XMAX(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示几何对象在 X 轴方向上最大坐标的数值
示例

SELECT
    ST_XMIN(p),
    ST_XMAX(p),
    ST_YMIN(p),
    ST_YMAX(p)
FROM
(
    SELECT ST_GeomFromText('POLYGON((-5 -8, 10 0, 10 15, 0 15, -5 -8),(-6 2, 2 40, 4 40, 4 2, -6 2))') AS p
) AS t
┌─ST_XMIN(p)─┬─ST_XMAX(p)─┬─ST_YMIN(p)─┬─ST_YMAX(p)─┐
│         -5 │         10 │         -8 │         15 │
└────────────┴────────────┴────────────┴────────────

ST_YMIN

用于获取几何对象在 Y 轴方向上的最小坐标值的函数。
语法

ST_YMIN(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示几何对象在 Y 轴方向上最小坐标的数值
示例

SELECT
    ST_XMIN(p),
    ST_XMAX(p),
    ST_YMIN(p),
    ST_YMAX(p)
FROM
(
    SELECT ST_GeomFromText('POLYGON((-5 -8, 10 0, 10 15, 0 15, -5 -8),(-6 2, 2 40, 4 40, 4 2, -6 2))') AS p
) AS t
┌─ST_XMIN(p)─┬─ST_XMAX(p)─┬─ST_YMIN(p)─┬─ST_YMAX(p)─┐
│         -5 │         10 │         -8 │         15 │
└────────────┴────────────┴────────────┴────────────

ST_YMAX

用于获取几何对象在 Y 轴方向上的最大坐标值的函数。
语法

ST_YMAX(geometryA)

参数
geometryA— 几何类型
返回值
返回一个表示几何对象在 Y 轴方向上最大坐标的数值
示例

SELECT
    ST_XMIN(p),
    ST_XMAX(p),
    ST_YMIN(p),
    ST_YMAX(p)
FROM
(
    SELECT ST_GeomFromText('POLYGON((-5 -8, 10 0, 10 15, 0 15, -5 -8),(-6 2, 2 40, 4 40, 4 2, -6 2))') AS p
) AS t
┌─ST_XMIN(p)─┬─ST_XMAX(p)─┬─ST_YMIN(p)─┬─ST_YMAX(p)─┐
│         -5 │         10 │         -8 │         15 │
└────────────┴────────────┴────────────┴────────────
最近更新时间:2024.12.06 14:06:04
这个页面对您有帮助吗?
有用
有用
无用
无用