返回几何的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────┐ │ �? │ �?�?��? │ �?�?��?�?�? │ └────┴─────┴───────┘
返回几何的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)) │ └─────────────┴─────────────────────────────┴─────────────────────────────────┘
通过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)]] │ └───────┴──────────────────────┴──────────────────────────────┘
通过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)) │ └─────────────┴─────────────────────────────┴─────────────────────────────────┘
如果几何图形 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 │ └───────────┴───────────┴───────────┘
如果几何图形 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 │ └───────────────────┴───────────────────┴───────────────────┘
如果两个输入的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 │ └──────────┴──────────┴──────────┘
如果几何对象 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 │ └───────────┴───────────┴───────────┘
如果几何对象 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 │ └────────┴────────┴────────┘
如果几何对象 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 │ └─────────────┴─────────────┴─────────────┘
如果几何对象 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 │ └───────────┴───────────┘
用于描述两个几何对象之间空间关系的函数,如果两个几何对象之间的关系符合指定的模式,则返回 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 │ └───────────┴─────────┴─────────┘
如果几何对象 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 │ └──────────┴──────────┘
如果几何对象 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 │ └─────────┴─────────┘
用于判断两个几何对象之间的距离是否在给定的阈值内的函数。如果两个几何对象之间的最短距离小于或等于给定的距离阈值,则返回 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 │ └──────────┴──────────┘
如果几何对象 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 │ └─────────┴─────────┘
如果几何对象 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(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(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(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(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(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(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(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(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(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(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(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(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)) │ └──────────────┴──────────────────────────────┴────────────────────────────────────────┘
用于分解复合几何对象(如 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(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_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(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(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) │ └─────────────────┘
用于获取几何对象维度的函数。
点的维度为 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(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(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 │ └─────────────┴─────────────┴─────────────┘
用于判断几何对象是否闭合的函数。
对于线串(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 │ └─────────────────┴───────────────────┴───────────────────┘
用于判断几何对象是否简单的函数。
对于线串(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(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(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(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(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(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 │ └─────────────┴─────────────┘
用于为几何对象设置空间参考标识符(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 │ └──────────┘
用于获取几何对象的空间参考标识符(Spatial Reference Identifier,简称 SRID)的函数。
语法
ST_SRID(geometryA)
参数geometryA— 几何类型
返回值
返回一个整数,表示输入几何对象的 SRID 。
示例
SELECT ST_SRID(ST_GeomFromText('POINT(521513 5377804)', 4326)) AS srid
─srid─┐ │ 4326 │ └──────
用于获取点几何对象的 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 │ └────────┴─────────┘
用于获取点几何对象的 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 │ └────────┴─────────┘
用于获取几何对象在 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 │ └────────────┴────────────┴────────────┴────────────
用于获取几何对象在 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 │ └────────────┴────────────┴────────────┴────────────
用于获取几何对象在 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 │ └────────────┴────────────┴────────────┴────────────
用于获取几何对象在 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 │ └────────────┴────────────┴────────────┴────────────