几何对象处理函数

ST_Buffer

ST_Buffer — 对geometry类型对象来说,返回以给定点为中心点,距离小于或等于指定距离的所有点组成的几何对象。

语法

st_buffer ::=

参数

g1

geometry类型或者geography类型。支持输入: POINTS,MULTIPOINTS,LINESTRINGS,MULTILINESTRINGS,POLYGONS,MULTIPOLYGONS,和 GeometryCollections。

radius

float类型。负值半径:对于polygon对象来说,使用负值的半径,这意味着收缩polygon,而不是扩展它。以空间参考系的单位测量。

num_seg

integer类型。用来近似四分之一圆的弧段数,默认是8。

buffer_style

text类型。

’endcap=round|flat|square’ : endcap 方式 (默认是"round",需要 GEOS-3.2 或更高版本支持)。 ’butt’ 和“flat” 意义等价。

也可以是参数值’join=round|mitre|bevel’ : join 方式 (默认是"round", 需要 GEOS-3.2 或更高版本支持)。 ’miter’ 和’mitre’意义等价。

也可以是参数值’mitre_limit=#.#’ : 切割率限制 (只影响miter 方式的join). ’miter_limit’ 和’mitre_limit’ 意义等价,

也可以是参数值 ‘side=both | left | right’:“left”或“right”在几何体上用作单侧缓冲区,缓冲侧与线的方向有关。这只与线串几何图形相关,不影响点几何图形或多边形几何图形。

返回值

返回值为geometry类型或者geography类型。

对geometry类型对象来说,返回以给定点为中心点,距离小于或等于指定距离的所有点组成的几何对象。计算方式是按照spatial_ref_sys表中对该类型的几何对象的描述来计算的。

对于geography类型对象:使用一个2D维度转换包装器。该函数实际上是对geometry类型实现的简单包装。它首先会选择一个适用于geography 对象的bounding box的最佳SRID值。

然后在平面空间参考系中做缓冲,最后再重新转换到WGS 84地理参考系中。

示例

SELECT ST_Buffer(ST_GeomFromText('POINT(100 90)'),50, 'quad_segs=8');
ST_BUFFER(GEOMETRY)      |
-------------------------
0103000000010000002100000|
00000000000C062400000000|
0008056401A509EA641A1624|
0CAAE1902B60F544098DF770|
E35466240ECE271BB69B7514|
092DB04F459B2614027BEEFB|
A591C4F40AFD904F05EEB604|
04D99EC3F84524B40F120882|
2D3F15F40BD91EC2F9836484|
0191D8E4496C85D40A48120C|
62BE745403C51E6FD49705B4|
098BF8665F97A44400600000|
000005940000000000000444|
0CFAE1902B68F564094BF866|
5F97A4440F2E271BB6937544|
09C8120C62BE7454018DF77D|
D2C0E5240B191EC2F9836484|
0AA4CF61F422950403D99EC3|
F84524B40C391EC2F98364D4|
015BEEFBA591C4F40A88120C|
62BE74A40E2E271BB69B7514|
09ABF8665F97A4940BFAE190|
2B60F5440000000000000494|
0F5FFFFFFFF7F564092BF866|
5F97A49402B51E6FD49F0584|
0978120C62BE74A40091D8E4|
496485B40A991EC2F98364D4|
0E3208822D3715D409A4CF61|
F4229504052B309E0BD565F4|
005DF77DD2C0E52408EDB04F|
459726040DDE271BB6937544|
095DF770E35066140BBAE190|
2B68F564019509EA64161614|
0F3FFFFFFFFFF58400000000|
0008061402B51E6FD49705B4|
01C509EA6416161400A1D8E4|
496C85D409ADF770E3506614|
0E5208822D3F15F4095DB04F|
459726040AAD904F05EEB604|
063B309E0BD565F408FDB04F|
459B26140F6208822D3715D4|
096DF770E354662401D1D8E4|
496485B401A509EA641A1624|
03F51E6FD49F058400000000|
000C06240000000000080564|
0                        |
总数目:1

SELECT ST_Buffer(ST_GeomFromText('POINT(100 90)'),50, 'quad_segs=2');
ST_BUFFER(GEOMETRY)      |
-------------------------
0103000000010000000900000|
00000000000C062400000000|
000805640AFD904F05EEB604|
04D99EC3F84524B400600000|
000005940000000000000444|
0AA4CF61F422950403D99EC3|
F84524B40000000000000494|
0F5FFFFFFFF7F56409A4CF61|
F4229504052B309E0BD565F4|
0F0FFFFFFFFFF58400000000|
000806140A7D904F05EEB604|
06AB309E0BD565F400000000|
000C06240000000000080564|
0                        |
总数目:1

SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'endcap=round join=round');
ST_BUFFER(GEOMETRY)      |
-------------------------
0103000000010000003100000|
0AA07FFCFB9DD614056F8003|
046A26340E82FBFAF370E624|
050929AFD11CA6340B196BE9|
28A45624085F91736A4E7634|
0E1F76833928162409FA91FE|
ED9F963400000000000C0624|
000000000000064401F0897C|
C6DFE62409FA91FEED9F9634|
04F69416D753A634085F9173|
6A4E7634018D04050C871634|
050929AFD11CA634056F8003|
046A2634056F8003046A2634|
050929AFD11CA634018D0405|
0C871634085F91736A4E7634|
04F69416D753A63409FA91FE|
ED9F963401F0897CC6DFE624|
000000000000064400000000|
000C06240000000000000644|
000000000000049409FA91FE|
ED9F9634082DFA3CD4806484|
085F91736A4E76340C35AFA4|
A2A16474050929AFD11CA634|
0A0BFFCBEDE38464056F8003|
046A26340A71EFC3FE776454|
018D04050C8716340BEB6950|
9B8D744404F69416D753A634|
0ED19A0276F6144401F0897C|
C6DFE6240845981479818444|
00000000000C062400000000|
000004440E1F768339281624|
08459814798184440B196BE9|
28A456240EC19A0276F61444|
0E92FBFAF370E6240BEB6950|
9B8D74440AA07FFCFB9DD614|
0A71EFC3FE7764540B06D650|
2EEB561409FBFFCBEDE38464|
07B06E8C95B986140C25AFA4|
A2A1647406156E0112686614|
081DFA3CD480648400000000|
000806140000000000000494|
00000000000806140A81EFC3|
FE7765F4058E103C018894C4|
0A81EFC3FE77645405E40034|
121C74B40BEB69509B8D7444|
03AA505B5D5E94A40EC19A02|
76F6144407B205C32B7F9494|
08459814798184440FFFFFFF|
FFFFF4840000000000000444|
083DFA3CD480648408459814|
798184440C45AFA4A2A16474|
0ED19A0276F614440A1BFFCB|
EDE384640BEB69509B8D7444|
0A81EFC3FE7764540A81EFC3|
FE7764540BFB69509B8D7444|
0A0BFFCBEDE384640EE19A02|
76F614440C45AFA4A2A16474|
0855981479818444082DFA3C|
D48064840000000000000444|
0FFFFFFFFFFFF48408459814|
7981844407A205C32B7F9494|
0EC19A0276F6144403AA505B|
5D5E94A40BDB69509B8D7444|
05D40034121C74B40A81EFC3|
FE776454058E103C018894C4|
0AA07FFCFB9DD614056F8003|
046A26340                |
总数目:1

SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'endcap=square join=round');
ST_BUFFER(GEOMETRY)      |
-------------------------
0103000000010000001500000|
0AA07FFCFB9DD614056F8003|
046A26340E82FBFAF370E624|
050929AFD11CA6340B196BE9|
28A45624085F91736A4E7634|
0E1F76833928162409FA91FE|
ED9F963400000000000C0624|
000000000000064401F0897C|
C6DFE62409FA91FEED9F9634|
04F69416D753A634085F9173|
6A4E7634018D04050C871634|
050929AFD11CA634056F8003|
046A2634056F8003046A2634|
050929AFD11CA634018D0405|
0C871634085F91736A4E7634|
04F69416D753A63409FA91FE|
ED9F963401F0897CC6DFE624|
000000000000064400000000|
000C06240000000000000644|
000000000000049400000000|
000006440000000000000444|
000000000008061400000000|
000004440000000000080614|
0A81EFC3FE7765F4058E103C|
018894C40A81EFC3FE776454|
00000000000004940503DF87|
FCEED4140503DF87FCEED414|
00000000000004940AA07FFC|
FB9DD614056F8003046A2634|
0                        |
总数目:1

SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'join=bevel');
ST_BUFFER(GEOMETRY)      |
-------------------------
0103000000010000002600000|
0AA07FFCFB9DD614056F8003|
046A26340000000000000644|
00000000000C062400000000|
000006440000000000000494|
09FA91FEED9F9634082DFA3C|
D4806484085F91736A4E7634|
0C35AFA4A2A16474050929AF|
D11CA6340A0BFFCBEDE38464|
056F8003046A26340A71EFC3|
FE776454018D04050C871634|
0BEB69509B8D744404F69416|
D753A6340ED19A0276F61444|
01F0897CC6DFE62408459814|
7981844400000000000C0624|
00000000000004440E1F7683|
392816240845981479818444|
0B196BE928A456240EC19A02|
76F614440E92FBFAF370E624|
0BEB69509B8D74440AA07FFC|
FB9DD6140A71EFC3FE776454|
0B06D6502EEB561409FBFFCB|
EDE3846407B06E8C95B98614|
0C25AFA4A2A1647406156E01|
12686614081DFA3CD4806484|
000000000008061400000000|
000004940000000000080614|
0A81EFC3FE7765F4058E103C|
018894C40A81EFC3FE776454|
05E40034121C74B40BEB6950|
9B8D744403AA505B5D5E94A4|
0EC19A0276F6144407B205C3|
2B7F94940845981479818444|
0FFFFFFFFFFFF48400000000|
00000444083DFA3CD4806484|
08459814798184440C45AFA4|
A2A164740ED19A0276F61444|
0A1BFFCBEDE384640BEB6950|
9B8D74440A81EFC3FE776454|
0A81EFC3FE7764540BFB6950|
9B8D74440A0BFFCBEDE38464|
0EE19A0276F614440C45AFA4|
A2A164740855981479818444|
082DFA3CD480648400000000|
000004440FFFFFFFFFFFF484|
084598147981844407A205C3|
2B7F94940EC19A0276F61444|
03AA505B5D5E94A40BDB6950|
9B8D744405D40034121C74B4|
0A81EFC3FE776454058E103C|
018894C40AA07FFCFB9DD614|
056F8003046A26340        |
总数目:1

SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'side=left');
ST_BUFFER(GEOMETRY)      |
-------------------------
0103000000010000001300000|
00000000000C062400000000|
0000049400000000000C0624|
00000000000C062400000000|
000004940000000000000494|
0A81EFC3FE776454058E103C|
018894C40AA07FFCFB9DD614|
056F8003046A26340E82FBFA|
F370E624050929AFD11CA634|
0B196BE928A45624085F9173|
6A4E76340E1F768339281624|
09FA91FEED9F963400000000|
000C06240000000000000644|
01F0897CC6DFE62409FA91FE|
ED9F963404F69416D753A634|
085F91736A4E7634018D0405|
0C871634050929AFD11CA634|
056F8003046A2634056F8003|
046A2634050929AFD11CA634|
018D04050C871634085F9173|
6A4E763404F69416D753A634|
09FA91FEED9F963401F0897C|
C6DFE6240000000000000644|
00000000000C062400000000|
000006440000000000000494|
00000000000C062400000000|
000004940                |
总数目:1

ST_BuildArea

ST_BuildArea — 根据给定的几何对象,创建一个由线条类对象组成的平面几何对象。

语法

st_buildarea ::=

参数

g1

geometry类型。输入的线条类对象类型可以是LINESTRINGS,MULTILINESTRINGS,POLYGONS,MULTIPOLYGONS 和 GeometryCollections。

返回值

返回值为geometry类型。根据输入类型,返回的类型可以是Polygon 或 MultiPolygon。如果输入的线条不能组成polygon,那么返回NULL。

示例

SELECT ST_BuildArea(ST_Collect(smallc,bigc))
FROM (SELECT
ST_Buffer(
ST_GeomFromText('POINT(100 90)'), 25) As smallc,
ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As bigc) As foo;
ST_BUILDAREA(GEOMETRY)      |
----------------------------
0103000000020000002100000000|
00000000C062400000000000805|
6401A509EA641A16240CAAE1902|
B60F544098DF770E35466240ECE|
271BB69B7514092DB04F459B261|
4027BEEFBA591C4F40AFD904F05|
EEB60404D99EC3F84524B40F120|
8822D3F15F40BD91EC2F9836484|
0191D8E4496C85D40A48120C62B|
E745403C51E6FD49705B4098BF8|
665F97A44400600000000005940|
0000000000004440CFAE1902B68|
F564094BF8665F97A4440F2E271|
BB693754409C8120C62BE745401|
8DF77DD2C0E5240B191EC2F9836|
4840AA4CF61F422950403D99EC3|
F84524B40C391EC2F98364D4015|
BEEFBA591C4F40A88120C62BE74|
A40E2E271BB69B751409ABF8665|
F97A4940BFAE1902B60F5440000|
0000000004940F5FFFFFFFF7F56|
4092BF8665F97A49402B51E6FD4|
9F05840978120C62BE74A40091D|
8E4496485B40A991EC2F98364D4|
0E3208822D3715D409A4CF61F42|
29504052B309E0BD565F4005DF7|
7DD2C0E52408EDB04F459726040|
DDE271BB6937544095DF770E350|
66140BBAE1902B68F564019509E|
A641616140F3FFFFFFFFFF58400|
0000000008061402B51E6FD4970|
5B401C509EA6416161400A1D8E4|
496C85D409ADF770E35066140E5|
208822D3F15F4095DB04F459726|
040AAD904F05EEB604063B309E0|
BD565F408FDB04F459B26140F62|
08822D3715D4096DF770E354662|
401D1D8E4496485B401A509EA64|
1A162403F51E6FD49F058400000|
000000C06240000000000080564|
0210000000000000000405F4000|
000000008056401A509EA641215|
F409F28F3FE24B8574096DF770E|
35C65E408F0E47224BE458408FD|
B04F459325E407B104491E9F859|
40AAD904F05E6B5D40B2D904F05|
EEB5A4073104491E9785C4095DB|
04F459B25B40850E47224B645B4|
09ADF770E35465C409528F3FE24|
385A401C509EA641A15C40F9FFF|
FFFFFFF58400000000000C05C40|
5ED70C01DBC7574019509EA641A|
15C406FF1B8DDB49B564095DF77|
0E35465C4082EFBB6E168755408|
EDB04F459B25B404D26FB0FA194|
5440A9D904F05EEB5A406A24FB0|
BA6CD534071104491E9F8594066|
2088F1CA395340850E47224BE45|
840E4AF6159BEDE52409628F3FE|
24B857400000000000C05240FAF|
FFFFFFF7F5640E6AF6159BEDE52|
405FD70C01DB4755406A2088F1C|
A39534071F1B8DDB41B54407124|
FB0BA6CD534085EFBB6E1607534|
05526FB0FA19454404F26FB0FA1|
1452408CEFBB6E168755406C24F|
B0BA64D514079F1B8DDB49B5640|
672088F1CAB9504068D70C01DBC|
75740E5AF6159BE5E5040030000|
000000594000000000004050409|
E28F3FE24385A40E6AF6159BE5E|
50408C0E47224B645B40692088F|
1CAB9504079104491E9785C406F|
24FB0BA64D5140AFD904F05E6B5|
D405326FB0FA114524092DB04F4|
59325E408AEFBB6E1607534098D|
F770E35C65E4076F1B8DDB41B54|
401A509EA641215F4065D70C01D|
B4755400000000000405F400000|
000000805640                |
总数目:1


select ST_AsText(ST_buildarea('SRID=2;LINESTRING(0 0 2, 10 0 4, 10 10 6, 0 10 8, 0 0 10)'::geometry));
ST_ASTEXT(text)      |
---------------------
POLYGON Z ((0 0 10,0 |
10 8,10 10 6,10 0 4,|
0 0 2))              |
总数目:1

ST_ClipByBox2D

ST_ClipByBox2D — 返回矩形内的几何体部分。

语法

st_clipbybox2d ::=

参数

geom

geometry类型。

box

box2d类型。

返回值

返回值为geometry类型。

通过二维长方体以快速但可能脏的方式剪裁几何体。输出几何图形不能保证有效(可能会引入多边形的自相交)。拓扑无效的输入几何图形不会导致引发异常。

示例

SELECT ST_ClipByBox2D(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), ST_MakeEnvelope(0,0,10,10));
ST_CLIPBYBOX2D(GEOMETRY)      |
------------------------------
010200000000000000            |
总数目:1

SELECT ST_AsText(ST_ClipByBox2D(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), ST_MakeEnvelope(0,0,10,10)));
ST_ASTEXT(text)      |
---------------------
LINESTRING EMPTY     |
总数目:1

SELECT ST_AsText(ST_ClipByBox2d('MULTIPOINT(-1 -1, 0 0, 2 2)'::geometry,ST_MakeEnvelope(0,0,10,10)));
ST_ASTEXT(text)      |
---------------------
POINT(2 2)           |
总数目:1

ST_Collect

ST_Collect — 从其他几何类型对象的collection 返回一个具体的ST_Geometry值(对应的对象)。

语法

st_collect ::=

参数

geom1 geom2

geometry类型。

g1field

geometry 集合类型。是一个聚合功能函数,输入对象是一个几何类型对象的集合,返回一个ST_Geometry函数值对应的几何对象。

g1_array

geometry[]类型。

返回值

返回值为geometry类型。输出类型可以是MULTI* 或GEOMETRYCOLLECTION类型。

注解

函数ST_Collect 和函数 ST_Union 经常可以互换使用。函数ST_Collect 一般来说要比函数ST_Union 快很多,因为ST_Collect函数不会去分解输入几何对象的边界或者检查一个MultiPolgon对象是否有重叠部分。

它仅仅是把单个的geometry类型对象组合成一个MULTI类型对象,或者将MULTI类型对象组合成一个Geometry Collections集合对象。不幸的是,GIS工具通常不能很好地支持geometry collection类型。

为了阻止函数ST_Collect 把MULTI类型对象变成Geometry Collection 类型对象,用户可以使用如下小技巧:利用函数ST_Dump把MULTI类型对象转换成单个geometry类型对象,再重新聚合他们。

示例

SELECT ST_AsText(ST_Collect(ST_GeomFromText('POINT(1 2)'),ST_GeomFromText('POINT(-2 3)') ));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(1 2,-2 3) |
总数目:1

DROP table geom_test;
CREATE table geom_test(col geometry);
INSERT into geom_test VALUES (ST_GeomFromText('POINT(1 2)'));
INSERT into geom_test VALUES (ST_GeomFromText('POINT(3 4)'));

SELECT ST_Collect(col) FROM geom_test;
ST_COLLECT(GEOMETRY)      |
--------------------------
01040000000200000001010000|
00000000000000F03F0000000|
0000000400101000000000000|
0000000840000000000000104|
0                         |
总数目:1
DROP table geom_test;


SELECT ST_AsText(ST_Collect(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktcollect;
WKTCOLLECT(text)      |
----------------------
MULTILINESTRING((1 2,3|
 4),(3 4,4 5))        |
总数目:1

ST_ConcaveHull

ST_ConcaveHull — 返回包含所有输入几何对象的凹包。可以认为这是一个收缩的包。

语法

st_concavehull ::=

参数

geomA

geometry类型。

target_percent

float类型。arget_percent就相当于“压缩比”。

default_allow_holes

boolean类型。默认值为false,默认不允许带孔。

返回值

返回值为geometry类型。默认不允许带孔(洞洞)的polygon对象。返回的几何对象的维度不会高于单例polygon对象。

注解

参数target_percent的值越小,生成凹包的所需要的时间越长,也越可能导致拓扑异常。同样也会获得更多的单精度点。首先尝试该参数第一阶值为0.99,通常会非常快,有时候和计算凸包一样快,通常收缩超过99%,因为该函数总是会超出收缩一些。

然后设置改值0.98,通常会更慢,其他值也会更慢。为了减小精度和得到的单精度点的数量,使用函数ST_ConcaveHull后再使用函数ST_SimplifyPreserveTopology 或 ST_SnapToGrid 。函数ST_SnapToGrid稍微快一些,但会导致无效的机会对象,而函数

ST_SimplifyPreserveTopology却总是会验证输入几何对象的有效性。

示例

SELECT ST_AsText(ST_ConcaveHull(geom, 0.95))
FROM ST_Union(ST_GeomFromText('POLYGON((175 150, 20 40,
			50 60, 125 100, 175 150))'),
		ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
		) As geom;
ST_ASTEXT(text)      |
---------------------
POLYGON((23.389248283|
3506 46.523024942828|
7,93.4927045215042 1|
57.778271357269,92.8|
990713773978 158.501|
615436268,92.8326357|
826966 158.601043330|
144,90.9844373785218|
 162.058779343234,90|
.9386757449776 162.1|
69257699573,89.80056|
07871387 165.9211199|
06552,89.77723170866|
54 166.038403104076,|
89.39293731673 169.9|
40209544399,89.39293|
731673 170.059790455|
601,89.7772317086653|
 173.961596895924,89|
.8005607871387 174.0|
78880093448,89.99071|
50463857 174.7057346|
77733,91.52240934977|
42 177.653668647302,|
93.3706077539491 181|
.111404660392,95.857|
864376269 184.142135|
623731,98.8885953396|
079 186.629392246051|
,102.346331352698 18|
8.477590650226,106.0|
98193559677 189.6157|
05608065,110 190,113|
.901806440323 189.61|
5705608065,117.65366|
8647302 188.47759065|
0226,121.11140466039|
2 186.629392246051,1|
25.133921890578 183.|
895189201558,127.100|
928622602 181.498384|
563732,127.167364217|
303 181.398956669856|
,129.015562621478 17|
7.941220656766,129.0|
61324255022 177.8307|
42300427,130.1994392|
12861 174.0788800934|
48,130.222768291335 |
173.961596895924,130|
.60706268327 170.059|
790455601,130.607062|
68327 169.9402095443|
99,130.222768291335 |
166.038403104076,130|
.199439212861 165.92|
1119906552,129.06132|
4255022 162.16925769|
9573,129.01556262147|
8 162.058779343234,1|
28.968538517382 161.|
970803432289,161.065|
717170029 140.859154|
924752,163.293305812|
231 142.440024283734|
,170.883571716712 14|
7.826664603043,172.3|
96437927742 148.9003|
11591516,174.4616382|
37018 150.3659376174|
54,175 150,125 100,1|
06.8525 89.630000000|
0001,102.50000477129|
3 87.3086692113564,9|
9.9681098766002 85.9|
583252675201,97.8581|
974643561 84.8330386|
476566,91.5284602276|
238 81.457178788066,|
83.0888105786474 76.|
956032308612,74.6491|
60929671 72.45488582|
91579,66.20951128069|
46 67.9537393497038,|
57.7734241158595 63.|
4544928617917,49.214|
1556728756 58.742975|
0225728,41.292658295|
3614 53.461976770896|
6,27.6978519731156 4|
4.3987725560661,20 4|
0,23.3892482833506 4|
6.5230249428287))    |
总数目:1

ST_ConvexHull

ST_ConvexHull — 返回包含所有几何对象的最小的凸包。

语法

st_convexhull ::=

参数

geomA

geometry类型。

返回值

返回值为geometry类型。

你可以把凸包看成包围一个几何对象的一个弹性的带子。该函数与凹包不同。该函数通常应用于处理MULTI 和 Geometry Collections类型对象。虽然该函数不是一个聚合函数,但你可以用函数ST_Collect来获取一个点集的凸包如下:

ST_ConvexHull(ST_Collect(somepointfield))。

示例

SELECT ST_AsText(ST_ConvexHull(
ST_Collect(
ST_GeomFromText('MULTILINESTRING((100 190,10 8),(150 10, 20 30))'),
ST_GeomFromText('MULTIPOINT(50 5, 150 30, 50 10, 10 10)')
)) );
ST_ASTEXT(text)      |
---------------------
POLYGON((50 5,10 8,10|
 10,100 190,150 30,1|
50 10,50 5))         |
总数目:1

ST_CurveToLine

ST_CurveToLine — 将一个 CIRCULARSTRING/CURVEPOLYGON/MULTISURFACE 几何类型转化为 LINESTRING/POLYGON/MULTIPOLYGON几何类型。

语法

st_curvetoline ::=

参数

curveGeom

geometry类型。

tolerance

float类型。

tolerance_type

integer类型。“tolerance_type”参数决定了“tolerance”参数的解释。它可以采用以下值:

  • 0(默认值):公差为每个象限的最大分段数。
  • 1:公差是直线与曲线的最大偏差,单位为震源单位。
  • 2:公差是生成半径之间的最大角度,以弧度为单位。

flags

integer类型。“flags”参数是一个位字段。默认情况下为0。支持的位包括:

  • 1:对称(方向独立)输出。
  • 2:保留角度,避免在产生对称输出时减少角度(段长度)。禁用“对称”标志时无效。

返回值

返回值为geometry类型。

将圆形字符串转换为规则线型字符串,或将曲线多边形转换为多边形,或将多曲面转换为多多边形。用于输出到不支持循环字符串几何体类型的设备。

将给定几何体转换为线性几何体。使用给定的“公差”和选项(每个象限32个线段,默认情况下没有选项),将每个曲线几何体或线段转换为线性近似值。

示例

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')));
ST_ASTEXT(text)      |
---------------------
LINESTRING(220268 150|
415,220269.95064912 |
150416.539364228,220|
271.823415575 150418|
.17258804,220273.613|
787707 150419.895736|
857,220275.317452352|
 150421.704659462,22|
0276.930305234 15042|
3.594998003,220278.4|
48460847 150425.5621|
98489,220279.8682618|
23 150427.60152176,2|
20281.186287736 1504|
29.708054909,220282.|
399363347 150431.876|
723113,220283.504566|
25 150434.10230186,2|
20284.499233914 1504|
36.379429536,220285.|
380970099 150438.702|
620341,220286.147650|
624 150441.066277505|
,220286.797428488 15|
0443.464706771,22028|
7.328738321 150445.8|
92130112,220287.7403|
00149 150448.3426996|
54,220288.031122486 |
150450.810511759,220|
288.200504713 150453|
.289621251,220288.24|
8038775 150455.77405|
574,220288.173610157|
 150458.257830005,22|
0287.977398166 15046|
0.734960415,220287.6|
59875492 150463.1994|
79347,220287.2218070|
76 150465.64544956,2|
20286.664248262 1504|
68.066978495,220285.|
988542259 150470.458|
232479,220285.196316|
903 150472.81345077,|
220284.289480732 150|
475.126959442,220283|
.270218395 150477.39|
318505,220282.140985|
384 150479.606668057|
,220280.90450212 150|
481.762075989,220279|
.5637474 150483.8542|
1628,220278.12195122|
 150485.87804878,220|
276.582586992 150487|
.828697901,220274.94|
9363179 150489.70146|
4356,220273.22621436|
2 150491.491836488,2|
20271.417291757 1504|
93.195501133,220269.|
526953216 150494.808|
354014,220267.559752|
731 150496.326509628|
,220265.520429459 15|
0497.746310603,22026|
3.41389631 150499.06|
4336517,220261.24522|
8106 150500.27741212|
7,220259.019649359 1|
50501.38261503,22025|
6.742521683 150502.3|
77282695,220254.4193|
30878 150503.2590188|
79,220252.055673714 |
150504.025699404,220|
249.657244448 150504|
.675477269,220247.22|
9821107 150505.20678|
7101,220244.77925156|
6 150505.61834893,22|
0242.311439461 15050|
5.909171266,220239.8|
32329968 150506.0785|
53494,220237.3478954|
79 150506.126087555,|
220234.864121215 150|
506.051658938,220232|
.386990804 150505.85|
5446946,220229.92247|
1872 150505.53792427|
2,220227.47650166 15|
0505.099855856,22022|
5.054972724 150504.5|
42297043,220222.6637|
18741 150503.8665910|
4,220220.308500449 1|
50503.074365683,2202|
17.994991777 150502.|
167529512,220215.728|
76617 150501.1482671|
75,220213.515283163 |
150500.019034164,220|
211.35987523 150498.|
7825509,220209.26773|
4939 150497.44179618|
1,220207.243902439 1|
50496,220205.2932533|
19 150494.460635772,|
220203.420486864 150|
492.82741196,220201.|
630114732 150491.104|
263143,220199.926450|
087 150489.295340538|
,220198.313597205 15|
0487.405001997,22019|
6.795441592 150485.4|
37801511,220195.3756|
40616 150483.3984782|
4,220194.057614703 1|
50481.291945091,2201|
92.844539092 150479.|
123276887,220191.739|
336189 150476.897698|
14,220190.744668525 |
150474.620570464,220|
189.86293234 150472.|
297379659,220189.096|
251815 150469.933722|
495,220188.446473951|
 150467.535293229,22|
0187.915164118 15046|
5.107869888,220187.5|
0360229 150462.65730|
0346,220187.21277995|
3 150460.189488241,2|
20187.043397726 1504|
57.710378749,220186.|
995863664 150455.225|
94426,220187.0702922|
82 150452.742169995,|
220187.266504273 150|
450.265039585,220187|
.584026947 150447.80|
0520653,220188.02209|
5363 150445.35455044|
,220188.579654177 15|
0442.933021505,22018|
9.25536018 150440.54|
1767521,220190.04758|
5536 150438.18654923|
,220190.954421707 15|
0435.873040558,22019|
1.973684044 150433.6|
0681495,220193.10291|
7055 150431.39333194|
3,220194.339400319 1|
50429.237924011,2201|
95.680155039 150427.|
14578372,220197.1219|
5122 150425.12195122|
,220198.661315447 15|
0423.171302099,22020|
0.29453926 150421.29|
8535644,220202.01768|
8077 150419.50816351|
2,220203.826610682 1|
50417.804498867,2202|
05.716949223 150416.|
191645986,220207.684|
149708 150414.673490|
372,220209.72347298 |
150413.253689397,220|
211.830006129 150411|
.935663483,220213.99|
8674333 150410.72258|
7873,220216.22425308|
 150409.61738497,220|
218.501380756 150408|
.622717305,220220.82|
4571561 150407.74098|
1121,220223.18822872|
5 150406.974300596,2|
20225.586657991 1504|
06.324522731,220227 |
150406)              |
总数目:1

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)'),2));
ST_ASTEXT(text)      |
---------------------
LINESTRING(220268 150|
415,220287.740300149|
 150448.342699654,22|
0278.12195122 150485|
.87804878,220244.779|
251566 150505.618348|
93,220207.243902439 |
150496,220187.503602|
29 150462.657300346,|
220197.12195122 1504|
25.12195122,220227 1|
50406)               |
总数目:1

SELECT ST_AsText(ST_CurveToLine('CIRCULARSTRING(0 0,100 -100,200 0)'::geometry,20, 1, 1));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0 0,50 -86|
.6025403784438,150 -|
86.6025403784439,200|
 0,200 0)            |
总数目:1

ST_DelaunayTriangles

ST_DelaunayTriangles — 根据输入对象的顶点,返回一个Delaunay 三角形化的结果。(所谓三角形化就是把输入的几何对象分成一个个三角形,有点类似微积分里面的思想)

语法

st_delaunaytriangles ::=

参数

geom

geometry类型。

tolerance

float类型。如果参数tolerance没有值,则函数会把输入对象变成一些顶点。

flags

integer类型。如果参数flags为0,则返回的是polygon对象的COLLECTION,如果flags值为1,返回MULTILINESTRING,如果flags值为2,则返回TIN。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
LYGON((5 5,6 0,8 9,5|
 5)),POLYGON((5 5,8 |
9,7 9,5 5)))         |
总数目:1

SELECT ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry, 2));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
LYGON((5 5,6 0,7 9,5|
 5)))                |
总数目:1

SELECT ST_AsText(ST_DelaunayTriangles('MULTIPOINT(5 5, 6 0, 7 9, 8 9)'::geometry, 2, 1));
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((5 5,|
7 9),(5 5,6 0),(6 0,|
7 9))                |
总数目:1

ST_Difference

ST_Difference — 根据输入的几何对象A和B,返回一个几何对象A的除了和几何对象B相交的剩余部分。

语法

st_difference ::=

参数

geomA geomB

geometry类型。

返回值

返回值为geometry类型。如果A完全被B包含,那么返回一个空几何类型。

注解

该函数的返回值与输入对象的顺序有关, B - A 返回的是除了A∩B后,B中剩余的部分。

示例

SELECT ST_AsText( ST_Difference(ST_GeomFromText('LINESTRING(50 100, 50 200)'),ST_GeomFromText('LINESTRING(50 50, 50 150)')));
ST_ASTEXT(text)      |
---------------------
LINESTRING(50 150,50 |
200)                 |
总数目:1

SELECT ST_AsEWKT(ST_Difference(ST_GeomFromEWKT('MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)'), ST_GeomFromEWKT('POINT(-118.614 38.281 5)')));
ST_ASEWKT(text)      |
---------------------
MULTIPOINT(-118.6 38.|
329 6,-118.58 38.38 |
5)                   |
总数目:1

ST_Dump

ST_Dump — 返回一个组成输入几何对象g1的geometry_dump(geom,path) 行集合。

语法

st_dump ::=

参数

geom

geometry类型。

返回值

返回值为geometry_dump[]类型。

这是一个返回集合的函数(set-returning function 即SRF)。该函数会返回组成输入对象的geometry_dump 行集合和行的位置值。当输入类型是 (POINT,LINESTRING,POLYGON),返回的是一个空的数组和一个和输入对象一样的几何对象形成的一条记录。

当输入对象是一个collection或者multi类型的collection,该函数会返回每一个collection的组成和组成每一个collection的每一个元素的位置下标。

注解

ST_Dump 在展开geometry对象很有用,它与GROUP BY子句的功能是相反的。该函数可以用来把MULTIPOLYGONS 展开成POLYGONS。

示例

SELECT ST_Dump(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))'));
ST_DUMP(GEOMETRY_DUMP)      |
----------------------------
({1},01080000000300000000000|
000000000000000000000000000|
000000000000F03F00000000000|
0F03F000000000000F03F000000|
0000000000)                 |
----------------------------
({2},01020000000200000000000|
0000000F03F0000000000000000|
000000000000000000000000000|
0F03F)                      |
总数目:2


SELECT ST_AsEWKT(a.geom), ST_HasArc(a.geom)
FROM ( SELECT (ST_Dump(p_geom)).geom As geom
FROM (SELECT ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))') As p_geom) As b
) As a;
ST_ASEWKT(text)      |ST_HASARC(boolean)      |
---------------------------------------------
CIRCULARSTRING(0 0,1 |true                    |
1,1 0)               |                        |
---------------------------------------------
LINESTRING(1 0,0 1)  |false                   |
总数目:2

ST_DumpPoints

ST_DumpPoints — 返回组成一个几何对象的所有点的geometry_dump(geom,path)记录集。

语法

st_dumppoints ::=

参数

geom

geometry类型。输入对象是由点组成的几何对象。

返回值

返回值为geometry_dump[]类型。

该函数会返回组成输入对象的geometry_dump 行集合和行的位置值。

参数path是一个展开输入几何对象的后的所有点的位置形成的数组,每一个点的位置就是该数组的下标。例如如果输入对象是一个LINESTRING对象,会返回一个LINESTRING所有点位置坐标的数组{i}。

如果输入对象是一个POLYGON,返回一个数组{i,j},i表示环的位置顺序(1是最外面的环,内环以此类推),j是环上面的点的位置顺序(下标从1开始)

示例

SELECT ST_DumpPoints(ST_GeomFromEWKT('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))'));
ST_DUMPPOINTS(GEOMETRY_DUMP)      |
----------------------------------
("{1,1}",0101000000000000000000000|
00000000000000000)                |
----------------------------------
("{1,2}",0101000000000000000000F03|
F000000000000F03F)                |
----------------------------------
("{1,3}",0101000000000000000000F03|
F0000000000000000)                |
----------------------------------
("{2,1}",0101000000000000000000F03|
F0000000000000000)                |
----------------------------------
("{2,2}",0101000000000000000000000|
0000000000000F03F)                |
总数目:5


SELECT edge_id, (dp).path[1] As index, ST_AsText((dp).geom) As wktnode
FROM (SELECT 1 As edge_id
, ST_DumpPoints(ST_GeomFromText('LINESTRING(1 2, 3 4, 10 10)')) AS dp
UNION ALL
SELECT 2 As edge_id
, ST_DumpPoints(ST_GeomFromText('LINESTRING(3 5, 5 6, 9 10)')) AS dp
) As foo;
EDGE_ID(int)      |INDEX(int)      |WKTNODE(text)      |
-----------------------------------------------------
1                 |1               |POINT(1 2)         |
-----------------------------------------------------
1                 |2               |POINT(3 4)         |
-----------------------------------------------------
1                 |3               |POINT(10 10)       |
-----------------------------------------------------
2                 |1               |POINT(3 5)         |
-----------------------------------------------------
2                 |2               |POINT(5 6)         |
-----------------------------------------------------
2                 |3               |POINT(9 10)        |
总数目:6

ST_DumpRings

ST_DumpRings — 返回一组geometry_dump行,表示多边形的外环和内环。

语法

st_dumprings ::=

参数

a_polygon

geometry类型。

返回值

返回值为geometry_dump[]类型。

这是一个集合返回函数(SRF)。它返回一组geometry_dump行,定义为integer[]和一个geometry,分别别名为“path”和“geom”。“path”字段保存包含单个整数的多边形环索引:0表示外环,大于0表示内环的标号。“geom”字段包含作为多边形的相应环。

示例

SELECT ST_AsEWKT(geom) As the_geom, path
FROM ST_DumpRings(
ST_GeomFromEWKT('POLYGON((-8149064 5133092 1,-8149064 5132986 1,-8148996 5132839
1,-8148972 5132767 1,-8148958 5132508 1,-8148941 5132466 1,-8148924 5132394 1,
-8148903 5132210 1,-8148930 5131967 1,-8148992 5131978 1,-8149237 5132093 1,-8149404
5132211 1,-8149647 5132310 1,-8149757 5132394 1,
-8150305 5132788 1,-8149064 5133092 1),
(-8149362 5132394 1,-8149446 5132501 1,-8149548 5132597 1,-8149695 5132675 1,-8149362
5132394 1))')
 ) As foo;
THE_GEOM(text)      |PATH(_INT4)      |
-------------------------------------
POLYGON((-8149064 51|{0}              |
33092 1,-8149064 51|                 |
32986 1,-8148996 51|                 |
32839 1,-8148972 51|                 |
32767 1,-8148958 51|                 |
32508 1,-8148941 51|                 |
32466 1,-8148924 51|                 |
32394 1,-8148903 51|                 |
32210 1,-8148930 51|                 |
31967 1,-8148992 51|                 |
31978 1,-8149237 51|                 |
32093 1,-8149404 51|                 |
32211 1,-8149647 51|                 |
32310 1,-8149757 51|                 |
32394 1,-8150305 51|                 |
32788 1,-8149064 51|                 |
33092 1))           |                 |
-------------------------------------
POLYGON((-8149362 51|{1}              |
32394 1,-8149446 51|                 |
32501 1,-8149548 51|                 |
32597 1,-8149695 51|                 |
32675 1,-8149362 51|                 |
32394 1))           |                 |
总数目:2

ST_FlipCoordinates

ST_FlipCoordinates — 互换一个输入几何对象的X和Y坐标。对于用户将经度/维度坐标错误输入成维度/经度时候很有用,可以用这个函数来修复它。

语法

st_flipcoordinates ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)')));
ST_ASEWKT(text)      |
---------------------
POINT(2 1)           |
总数目:1

ST_GeneratePoints

ST_GeneratePoints — 将polygon或 multi-polygon转换为由原始区域内的任意位置点组成的多点几何。

语法

st_generatepoints ::=

参数

geom

geometry类型。

npoints

numeric类型。生成的点的个数。

返回值

返回值为geometry类型。

ST_GeneratePoints生成伪随机点,直到在输入区域内找到请求的数字。

示例

--因为随机生成的点,每次执行的结果可能不一样
SELECT ST_AsText(ST_GeneratePoints('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))', 5));
SELECT ST_AsText(ST_GeneratePoints('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))', 4));

ST_Intersection

ST_Intersection — 返回几何对象相交的部分对象。

语法

st_intersection ::=

参数

geomA geomB

geometry类型。

geogA geogB

geography类型。该函数只是对geometry 实现的简单包装。该函数首先将其转换成geometry对象,然后在平面参考系中相交得到交集,然后转换回WGS84参考系,变成geography类型对象。

返回值

返回值为geometry类型或者geography类型。如果几何图形不共享任何空间(不相交),则返回空的几何图形集合。

ST_Intersection与ST_Intersects结合使用,对于剪切几何图形非常有用,例如在边界框、缓冲区、区域查询中,您只希望返回位于感兴趣的国家或地区的几何图形部分。

注解

该函数不支持GEOMETRYCOLLECTION类型对象作为输入参数。

示例

SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geometry, 'LINESTRING ( 2 0, 0 2 )':: geometry));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION EM|
PTY                  |
总数目:1

SELECT ST_AsText(ST_Intersection('POINT(0 0)'::geography, 'LINESTRING ( 2 0, 0 2 )':: geography));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION EM|
PTY                  |
总数目:1

ST_LineToCurve

ST_LineToCurve — 把一个LINESTRING/POLYGON 转换成一个CIRCULARSTRING, CURVEPOLYGON类型对象。

语法

st_linetocurve ::=

参数

geomANoncircular

geometry类型。

返回值

返回值为geometry类型。

注解

如果输入线串/多边形的弯曲度不足以清晰地表示曲线,则函数将返回相同的输入几何。

示例

SELECT ST_AsText(ST_LineToCurve(foo.the_geom)) As curvedastext FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3) As the_geom) As foo;
CURVEDASTEXT(text)      |
------------------------
CURVEPOLYGON(CIRCULARSTR|
ING(4 3,-2 2.9999999999|
9999,4 3))              |
总数目:1

ST_MakeValid

ST_MakeValid — 不丢弃顶点的情况下,尝试把无效的几何对象转换成有效的几何对象。

语法

st_makevalid ::=

参数

geom

geometry类型。如果已经是有效的几何对象,则不处理,直接返回。支持的输入类型有: POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS 和 GEOMETRYCOLLECTIONS 即前面类型的任意混合类型。

返回值

返回值为geometry类型。

如果有部分或者全部维度损失,输出的几何对象是一个更低维度几何对象的集合或者一个更低维度的几何对象。有自相交的简单多边形可能会返回成MULTI-几何对象。

示例

SELECT  ST_AsText(ST_MakeValid('LINESTRING(0 0, 1 1)')), ST_AsText(ST_MakeValid('LINESTRING(0 0, 0 0, 0 0)'));
ST_ASTEXT(text)      |ST_ASTEXT(text)      |
------------------------------------------
LINESTRING(0 0,1 1)  |POINT(0 0)           |
总数目:1

ST_MemUnion

ST_MemUnion — 与函数ST_Union功能一样,但是会使用更少的内存以及更多的处理时间。

语法

st_memunion ::=

参数

geom

geometry 集合类型。

返回值

返回值为geometry类型。

这是一个把所有几何对象一次性union起来的聚合函数。与之前的ST_Union聚合结果相比,后者会先创建一个几何对象数组,然后再union他们。

示例

DROP TABLE ST_MemUnion_test;
CREATE TABLE ST_MemUnion_test( geom geometry);
INSERT INTO ST_MemUnion_test VALUES(ST_GeomFromText('LINESTRING(1 2, 3 4)',4326) );
INSERT INTO ST_MemUnion_test VALUES(ST_GeomFromText('LINESTRING(5 6 , 3 4)',4326) );

SELECT ST_MemUnion(GEOM) FROM ST_MemUnion_test;
ST_MEMUNION(GEOMETRY)      |
---------------------------
0105000020E6100000020000000|
10200000002000000000000000|
000F03F0000000000000040000|
00000000008400000000000001|
04001020000000200000000000|
00000001440000000000000184|
00000000000000840000000000|
0001040                    |
总数目:1
DROP TABLE ST_MemUnion_test;

ST_MinimumBoundingCircle

ST_MinimumBoundingCircle — 返回包含一个几何对象的最小的Circle Polygon对象。默认对四分之一圆做48等分弧段分割。

语法

st_minimumboundingcircle ::=

参数

geom

geometry 集合类型。

default_num_segs_per_qt_circ

integer类型。默认值为48。

返回值

返回值为geometry类型。

Circle对象由多边形近似,默认为每四分之一圆48段。因为多边形是最小边界圆的近似值,所以输入几何图形中的某些点可能不包含在多边形中。可以通过增加分段数来改进近似,而性能损失很小。对于多边形近似不适用的应用,可以使用ST_MinimumBoundingRadius。

该函数通常用于处理MULTI 和 Geometry Collections类型对象。虽然该函数不是一个聚合函数,但你可以用函数ST_Collect来获取一个几何对象集合的最小的bounding circle,即ST_MinimumBoundingCircle(ST_Collect(somepointfield))。

多边形的面积与最小边界圆的面积之比,通常被称为Roeck测试

示例

SELECT ST_AsText(ST_MinimumBoundingCircle(
ST_Collect(
ST_GeomFromText('LINESTRING(55 75,125 150)'),
ST_Point(20, 80)), 4
)) As wktmbc;
WKTMBC(text)      |
------------------
POLYGON((72.5 179.|
333293516272,97.1|
192855781576 174.|
436213138724,117.|
99050810142 160.4|
9050810142,131.93|
6213138724 139.61|
9285578158,136.83|
3293516272 115,13|
1.936213138724 90|
.3807144218424,11|
7.99050810142 69.|
5094918985798,97.|
1192855781576 55.|
5637868612756,72.|
5 50.666706483728|
4,47.880714421842|
4 55.563786861275|
6,27.009491898579|
8 69.509491898579|
8,13.063786861275|
6 90.380714421842|
4,8.1667064837283|
6 115,13.06378686|
12756 139.6192855|
78158,27.00949189|
85798 160.4905081|
0142,47.880714421|
8424 174.43621313|
8724,72.5 179.333|
293516272))       |
总数目:1

ST_MinimumBoundingRadius

ST_MinimumBoundingRadius — 返回可以完全包含几何图形的最小圆的中心点和半径。

语法

st_minimumboundingradius ::=

参数

geom

geometry 类型。

返回值

返回值为(geometry, double precision)。返回一条记录,其中包含可以完全包含几何图形的最小圆的中心点和半径。

可与ST_Collect结合使用,以获得一组几何图形的最小边界圆。

示例

SELECT ST_AsText(center), radius FROM ST_MinimumBoundingRadius('POLYGON((26426 65078,26531 65242,26075 65136,26096 65427,26426 65078))');
ST_ASTEXT(text)      |RADIUS(double precision)      |
---------------------------------------------------
POINT(26284.841802713|247.436045591407              |
3 65267.1145090825)  |                              |
总数目:1

ST_OrientedEnvelope

ST_OrientedEnvelope — 返回包围几何体的最小旋转矩形。

语法

st_orientedenvelope ::=

参数

geom

geometry 类型。

返回值

返回值为geometry类型。返回包围几何体的最小旋转矩形。请注意,可能存在多个最小旋转矩形。在退化输入的情况下,可能会返回点或线字符串。

示例

SELECT ST_AsText(ST_OrientedEnvelope('MULTIPOINT ((0 0), (-1 -1), (3 2))'));
ST_ASTEXT(text)      |
---------------------
POLYGON((3 2,2.88 2.1|
6,-1.12 -0.84,-1 -1,|
3 2))                |
总数目:1


SELECT ST_AsText(ST_OrientedEnvelope(
ST_Collect(
ST_GeomFromText('LINESTRING(55 75,125 150)'),
ST_Point(20, 80))
)) As wktenv;
WKTENV(text)      |
------------------
POLYGON((19.999999|
9999997 79.999999|
9999999,33.076923|
0769229 60.384615|
3846152,138.07692|
3076924 130.38461|
5384616,125.00000|
0000001 150.00000|
0000001,19.999999|
9999997 79.999999|
9999999))         |
总数目:1

ST_Polygonize

ST_Polygonize — 聚合函数,从一个线条类的几何类型对象几何创建一个包含Polygon对象的GeometryCollection类型对象。

语法

st_polygonize ::=

参数

geomfield

geometry 集合类型。

geom_array

geometry[]类型。

返回值

返回值为geometry类型。

几何体集合通常很难使用第三方工具处理,因此请结合使用ST_Polygonize和ST_Dump将多边形转储到单个多边形中。

注解

输入的线条类几何对象必须被正确的添加节点分隔才能使用该函数。

示例

DROP table geom_test;
CREATE table geom_test(col geometry);
INSERT into geom_test VALUES (ST_GeomFromText('POINT(1 2)'));
INSERT into geom_test VALUES (ST_GeomFromText('POINT(3 4)'));

SELECT ST_Polygonize(col) FROM geom_test;
ST_POLYGONIZE(GEOMETRY)      |
-----------------------------
010700000000000000           |
总数目:1
DROP table geom_test;


SELECT ST_Polygonize(ARRAY[ST_MakePoint(1,2,3),ST_MakePoint(6,6,6)]);
ST_POLYGONIZE(GEOMETRY)      |
-----------------------------
010700000000000000           |
总数目:1

ST_Node

ST_Node — 对LINESTRING对象添加节点进行分隔。

语法

st_node ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

在保持原有输入的几何对象的所有点情况下,添加最少的可能的节点到LINESTRING上。

示例

SELECT ST_AsText(
ST_Node('LINESTRINGZ(0 0 0, 10 10 10, 0 10 5, 10 0 3)'::geometry)
) As output;
OUTPUT(text)      |
------------------
MULTILINESTRING Z |
((0 0 0,5 5 4.5),|
(5 5 4.5,10 10 10|
,0 10 5,5 5 4.5),|
(5 5 4.5,10 0 3)) |
总数目:1

ST_OffsetCurve

ST_OffsetCurve — 根据一个输入的线和偏移的距离,返回一个偏移后的线。对于计算中心线的平行线很有用。

语法

st_offsetcurve ::=

参数

line

geometry类型。

signed_distance

float类型。如果输入的距离值是一个正值,那么会向输入线的左边偏移,如果是一个负值,那么将向反方向的右侧偏移。

default_style_parameters

text类型。默认值为"";(目前只支持geometry类型)。

可以指定一个分隔四分之一圆的弧段的数量(默认四分之圆做7次分隔,即8个弧段)或者空格分隔键值对参数:
  • ’quad_segs=#’ : 用来近似四分之一圆的弧段数,默认是8。
  • ’join=round|mitre|bevel’ : join 方式 (默认是"round")。’miter’ 和’mitre’意义等价,也可以是参数值。
  • ’mitre_limit=#.#’ : 切割率限制 (只影响miter 方式的join)。’miter_limit’ 和’mitre_limit’ 意义等价,也可以是参数值。

返回值

返回值为geometry类型。

注解

该函数会忽略第3维坐标(Z坐标),即便输入的是一个3维对象,返回的也是2维结果。

示例

SELECT 't4', ST_AsEWKT(ST_OffsetCurve('SRID=42;LINESTRING(10 0, 0 0)', -10));
?COLUMN?(varchar)      |ST_ASEWKT(text)      |
--------------------------------------------
t4                     |SRID=42;LINESTRING(0 |
                       |10,10 10)            |
总数目:1


SELECT ST_AsText(ST_OffsetCurve( 
ST_GeomFromText(
'LINESTRING(164 16,144 16,124 16,104
16,84 16,64 16, 44 16,24 16,20 16,18 16,17 17)'), 5, 'quad_segs=4 join=round'));
ST_ASTEXT(text)      |
---------------------
LINESTRING(164 11,18 |
11,16.0865828381746 |
11.3806023374436,14.|
4644660940673 12.464|
4660940673,13.464466|
0940673 13.464466094|
0673)                |
总数目:1

ST_RemoveRepeatedPoints

ST_RemoveRepeatedPoints — 返回一个删除重复点的几何对象。

语法

st_removerepeatedpoints ::=

参数

geom

geometry类型。

tolerance

float8类型。如果提供了公差参数,出于移除的目的,彼此公差范围内的顶点将被视为“相同”。

返回值

返回值为geometry类型。

该函数实际上只支持 (multi)lines、(multi)polygons 和 multipoints类型对象,但是可以对任何几何类型对象使用该函数。因为该函数会输入的geometry collection对象做一层又一层的类型转换,直到符合要求。

示例

SELECT ST_AsText(ST_RemoveRepeatedPoints('LINESTRING(0 0, 1 1, 1 1, 2 2)'));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0 0,1 1,2 |
2)                   |
总数目:1

SELECT ST_AsText(ST_RemoveRepeatedPoints('LINESTRING(0 0, 1 0, 2 0, 3 0, 4 0)',1.5));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0 0,2 0,4 |
0)                   |
总数目:1

ST_SharedPaths

ST_SharedPaths — 返回两个输入的linestrings/multilinestrings类型对象公用的path路径代表的collection对象。

语法

st_sharedpaths ::=

参数

lineal1 lineal2

geometry类型。

返回值

返回值为geometry类型。

返回包含两个输入几何图形共享的路径的集合。方向相同的在集合的第一个元素中,方向相反的在第二个元素中。路径本身以第一个几何体的方向给出。

示例

SELECT ST_AsText(
ST_SharedPaths(
ST_GeomFromText('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),
(51 150,101 150,76 175,51 150))'),
ST_GeomFromText('LINESTRING(151 100,126 156.25,126 125,90 161, 76 175)')
)
) As wkt;
WKT(text)      |
---------------
GEOMETRYCOLLECT|
ION(MULTILINES|
TRING((126 156|
.25,126 125),(|
101 150,90 161|
),(90 161,76 1|
75)),MULTILINE|
STRING EMPTY)  |
总数目:1


select 't8', st_asewkt(st_sharedpaths(
 'MULTILINESTRING((1 3,4 2,7 2,7 5,13 10,14 7,11 6,15 5))',
 'LINESTRING(2 1,4 2,7 2,8 3,10 6,11 6,14 7,16 9)'
));
?COLUMN?(varchar)      |ST_ASEWKT(text)      |
--------------------------------------------
t8                     |GEOMETRYCOLLECTION(MU|
                       |LTILINESTRING((4 2,7|
                       | 2)),MULTILINESTRING|
                       |((14 7,11 6)))       |
总数目:1

ST_ShiftLongitude

ST_ShiftLongitude — 在-180..180和0..360范围之间切换几何坐标。

语法

st_shiftlongitude ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

读取几何体中每个特征的每个组件中的每个点/顶点,如果经度坐标<0,则向其加360,如果大于0则不加。结果将是在以180为中心的地图上绘制0-360范围的数据

示例

SELECT ST_AsText(ST_ShiftLongitude(ST_GeomFromText('MULTIPOINT(1 3, 4 5)')));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(1 3,4 5)  |
总数目:1

SELECT ST_AsText(ST_Shift_Longitude(ST_GeomFromText('LINESTRING(-118.58 38.38, -118.20 38.45)')));
ST_ASTEXT(text)      |
---------------------
LINESTRING(241.42 38.|
38,241.8 38.45)      |
总数目:1

ST_WrapX

ST_WrapX — 将几何体环绕在X值周围。

语法

st_wrapx ::=

参数

geom

geometry类型。

warp

float类型。

move

float类型。

返回值

返回值为geometry类型。

此函数用于拆分输入几何图形,然后按照“move”参数指定的方向移动落在给定“warp”线右侧(表示负“移动”)或左侧(表示正“移动”)的每个结果组件,最后将这些碎片重新组合在一起。

注解

这有助于“重新居中”长long-lat输入,使感兴趣的特性不会从一侧衍生到另一侧。

示例

SELECT ST_WrapX(ST_GeomFromText('LINESTRING(-118.58 38.38, -118.20 38.45)'),0,360);
ST_WRAPX(GEOMETRY)      |
------------------------
0102000000020000003E0AD7|
A3702D6E40713D0AD7A3304|
3409A99999999396E409A99|
999999394340            |
总数目:1

ST_Simplify

ST_Simplify — 使用Douglas Peucker算法返回给定几何体的“简化”版本。

语法

st_simplify ::=

参数

geom

geometry类型。

tolerance

float类型。

preserveCollapsed

boolean类型。“preserve collapsed”标志将保留在给定公差的情况下过小的对象。例如,一条1米长的线被简化为10米的公差。如果给定了保留标志,则该行不会消失。该标志对于渲染引擎非常有用,可以避免大量非常小的对象从贴图中消失,留下令人惊讶的间隙。

返回值

返回值为geometry类型。

使用Douglas-Peucker 算法简化一个给定的几何对象,并返回。该函数实际上只支持 (multi)lines、(multi)polygons 和 multipoints 类型对象,但是你可以安全地对任何几何类型对象使用该函数。因为该函数会输入的geometry collection对象做一层又一层的类型转换,直到符合要求。

注解

注意输入对象拓扑结构可能会变化,也可能会产生无效的几何类型对象,使用函数(参考 ST_SimplifyPreserveTopology) 来维持输入对象的拓扑结构。

示例

SELECT ST_astext(ST_Simplify('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 5 6, 6 6, 8 5, 5 5)),((100 100, 100 130, 130 130, 130 100, 100 100)))', 20));
ST_ASTEXT(text)      |
---------------------
MULTIPOLYGON(((100 10|
0,100 130,130 130,13|
0 100,100 100)))     |
总数目:1

SELECT ST_astext(ST_Simplify('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 20, true));
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,10 0,10 |
10,0 0))             |
总数目:1

ST_SimplifyPreserveTopology

ST_SimplifyPreserveTopology — 使用Douglas-Peucker算法,根据给定的几何对象,返回一个简化版的几何对象。该函数会避免创建新的派生的无效的几何对象(特别是多边形)。

语法

st_simplifypreservetopology ::=

参数

geom

geometry类型。

tolerance

float类型。

返回值

返回值为geometry类型。

该函数实际上只支持 (multi)lines、(multi)polygons 和 multipoints 类型对象,但是你可以安全地对任何几何类型对象使用该函数。因为该函数会输入的geometry collection对象做一层又一层的类型转换,直到符合要求。

示例

SELECT 
ST_Npoints(the_geom) As np_before, 
ST_NPoints(ST_SimplifyPreserveTopology(the_geom,0.1)) As np01_notbadcircle, 
ST_NPoints(ST_SimplifyPreserveTopology(the_geom,0.5)) As np05_notquitecircle,
ST_NPoints(ST_SimplifyPreserveTopology(the_geom,1)) As np1_octagon, 
ST_NPoints( ST_SimplifyPreserveTopology(the_geom,10)) As np10_square,
ST_NPoints(ST_SimplifyPreserveTopology(the_geom,100)) As np100_stillsquare
FROM (SELECT ST_Buffer('POINT(1 3)', 10,12) As the_geom) As foo;
NP_BEFORE(int)      |NP01_NOTBADCIRCLE(int)      |NP05_NOTQUITECIRCLE(int)      |NP1_OCTAGON(int)      |NP10_SQUARE(int)      |NP100_STILLSQUARE(int)      |
------------------------------------------------------------------------------------------------------------------------------------------------------
49                  |33                          |17                            |9                     |5                     |5                           |
总数目:1

ST_SimplifyVW

ST_SimplifyVW — 使用Visvalingam-Whyatt算法返回给定几何体的“简化”版本。

语法

st_simplifyvw ::=

参数

geom

geometry类型。

tolerance

float类型。

返回值

返回值为geometry类型。

该函数实际上只支持 (multi)lines、(multi)polygons 和 multipoints 类型对象,但是你可以安全地对任何几何类型对象使用该函数。因为该函数会输入的geometry collection对象做一层又一层的类型转换,直到符合要求。

示例

select ST_AsText(ST_SimplifyVW(geom,30)) simplified FROM (SELECT 'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
SIMPLIFIED(text)      |
----------------------
LINESTRING(5 2,7 25,10|
 10)                  |
总数目:1

ST_ChaikinSmoothing

ST_ChaikinSmoothing — 使用Chaikin算法返回给定几何体的“平滑”版本。

语法

st_chaikinsmoothing ::=

参数

geom

geometry类型。

default_nIterations

integer类型。默认值为1。

default_preserveEndPoints

boolean类型。默认值为false。

返回值

返回值为geometry类型。

使用Chaikin算法返回给定几何体的“平滑”版本。有关该过程的解释,请参见Chaikins算法。对于每次迭代,顶点的数量将加倍。该函数在每个点之前和之后将新顶点放置在直线的1/4处,并删除原始点。要减少点数,请对结果使用一个简化函数。新点会为所有包含的标注(以及z和m)获取插值。

第二个参数,迭代次数最多为5次

注:第三个参数仅对多边形有效,对线字符串将被忽略

此函数处理3D,第三个维度将影响结果。

注解

请注意,返回的几何体将获得比原始几何体更多的点。要再次减少点数,请对结果使用其中一个简化函数。(参见ST_Simplify和ST_SimplifyVW)。

示例

SELECT ST_astext(ST_ChaikinSmoothing('LINESTRING(0 0, 8 8, 0 16)'));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0 0,6 6,6 |
10,0 16)             |
总数目:1
SELECT ST_astext(ST_ChaikinSmoothing('LINESTRING(0 0, 8 8, 0 16)',10));
ERROR, Number of iterations must be between 1 and 5 : LWGEOM_ChaikinSmoothing


SELECT ST_astext(ST_ChaikinSmoothing('LINESTRING(0 0, 8 8, 0 16)',2));
ST_ASTEXT(text)      |
---------------------
LINESTRING(0 0,4.5 4.|
5,6 7,6 9,4.5 11.5,0|
 16)                 |
总数目:1

SELECT ST_astext(ST_ChaikinSmoothing('GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(1 1, 1 3, 1 5), POLYGON((5 5, 5 10, 10 10, 10 5, 5 5), (6 6, 6 7, 7 7, 7 6, 6 6 )))', 2, 't'));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
INT(1 1),LINESTRING(|
1 1,1 2.125,1 2.75,1|
 3.25,1 3.875,1 5),P|
OLYGON((5 5,5 7.8125|
,5.3125 9.0625,5.937|
5 9.6875,6.875 10,8.|
125 10,9.0625 9.6875|
,9.6875 9.0625,10 8.|
125,10 6.875,9.6875 |
5.9375,9.0625 5.3125|
,7.8125 5,5 5),(6 6,|
6 6.5625,6.0625 6.81|
25,6.1875 6.9375,6.3|
75 7,6.625 7,6.8125 |
6.9375,6.9375 6.8125|
,7 6.625,7 6.375,6.9|
375 6.1875,6.8125 6.|
0625,6.5625 6,6 6))) |
总数目:1

ST_FilterByM

ST_FilterByM — 根据顶点的m值过滤顶点。

语法

st_filterbym ::=

参数

geom

geometry类型。

min

double类型。

default_max

double类型。默认值为null。

default_returnM

boolean类型。默认值为false。

返回值

返回值为geometry类型。

根据顶点的m值过滤掉它们。返回仅具有m值大于或等于最小值且小于或等于最大值的顶点的几何体。如果不考虑最大值参数,则只考虑最小值。如果忽略第四个参数,m值将不在结果geoemtry中。如果生成的几何体为其几何体类型剩下的顶点太少,将返回空的geoemtry。在几何图形集合中,没有足够点的几何图形将被默默地忽略。

此功能主要与ST_SetEffectiveArea配合使用。ST_EffectiveArea设置顶点在其m值中的有效面积。有了ST_FilterByM,只需进行过滤,就可以在不进行任何计算的情况下获得简化版的geoemtry。

注解

与ST_FilterByM相比,当没有足够的点数满足标准时,返回的结果是不同的。ST_SimplifyVW返回具有足够点数的几何体,而ST_FilterByM返回空几何体。

示例

SELECT ST_astext(ST_FilterByM('LINESTRING(0 0 0 0, 8 8 5 2, 0 16 0 5, 16 16 0 2)',2,null,'t'));
ST_ASTEXT(text)      |
---------------------
LINESTRING ZM (8 8 5 |
2,0 16 0 5,16 16 0 2|
)                    |
总数目:1

SELECT ST_astext(ST_FilterByM('LINESTRING(0 0 0 0, 8 8 5 2, 0 16 0 5, 16 16 0 2)',2,4,'t'));
ST_ASTEXT(text)      |
---------------------
LINESTRING ZM (8 8 5 |
2,16 16 0 2)         |
总数目:1

ST_SetEffectiveArea

ST_SetEffectiveArea — 设置每个顶点的有效面积,并将值存储在M坐标中。然后,可以通过在M坐标上进行过滤来生成简化的几何图形。

语法

st_seteffectivearea ::=

参数

geom

geometry类型。

default_threshold

float类型。默认值为0。

default_set_area

integer类型。默认值为1。

返回值

返回值为geometry类型。

使用Visvalingam-Whyatt算法设置每个顶点的有效面积。有效面积存储为顶点的M值。如果使用可选的“theshold”参数,将返回一个简化的几何体,其中只包含有效面积大于或等于阈值的顶点。当指定阈值时,此函数可用于服务器端简化。另一种选择是使用零阈值。在这种情况下,完整的几何图形将以有效面积作为M值返回,客户可以使用M值快速简化。

示例

SELECT ST_AsText(ST_SetEffectiveArea(geom)) all_pts, ST_AsText(ST_SetEffectiveArea(geom,30) ) thrshld_30
FROM (SELECT 'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
ALL_PTS(text)      |THRSHLD_30(text)      |
-----------------------------------------
LINESTRING M (5 2 3|LINESTRING M (5 2 3.40|
.40282e+38,3 8 29,|282e+38,7 25 49.5,10 |
6 20 1.5,7 25 49.5|10 3.40282e+38)       |
,10 10 3.40282e+38|                      |
)                  |                      |
总数目:1

ST_Split

ST_Split — 通过切割一个几何对象,返回一个collection 几何对象。

语法

st_split ::=

参数

geom

geometry类型。

blade

geometry类型。

返回值

返回值为geometry类型。

该函数会切割一个几何对象,用点切割线,用线切割线,用线切割多边形。返回一个collection类型对象。可以把该函数当做函数ST_Union的相反函数。理论上用ST_Union函数到函数ST_Split 返回的collection上面始终能够得到原始的几何对象。

示例

SELECT ST_Split(circle, line)
FROM (SELECT
ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,
ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;
ST_SPLIT(GEOMETRY)      |
------------------------
010700000002000000010300|
00000100000014000000000|
0000000C062400000000000|
8056401A509EA641A16240C|
AAE1902B60F544098DF770E|
35466240ECE271BB69B7514|
092DB04F459B2614027BEEF|
BA591C4F40AFD904F05EEB6|
0404D99EC3F84524B40F120|
8822D3F15F40BD91EC2F983|
64840191D8E4496C85D40A4|
8120C62BE745403C51E6FD4|
9705B4098BF8665F97A4440|
06000000000059400000000|
000004440CFAE1902B68F56|
4094BF8665F97A4440F2E27|
1BB693754409C8120C62BE7|
454018DF77DD2C0E5240B19|
1EC2F98364840AA4CF61F42|
2950403D99EC3F84524B403|
A7DCB148D114E403A7DCB14|
8D114E40B120CDBA9C3B604|
0B120CDBA9C3B6040AAD904|
F05EEB604063B309E0BD565|
F408FDB04F459B26140F620|
8822D3715D4096DF770E354|
662401D1D8E4496485B401A|
509EA641A162403F51E6FD4|
9F058400000000000C06240|
00000000008056400103000|
00001000000120000003A7D|
CB148D114E403A7DCB148D1|
14E40C391EC2F98364D4015|
BEEFBA591C4F40A88120C62|
BE74A40E2E271BB69B75140|
9ABF8665F97A4940BFAE190|
2B60F544000000000000049|
40F5FFFFFFFF7F564092BF8|
665F97A49402B51E6FD49F0|
5840978120C62BE74A40091|
D8E4496485B40A991EC2F98|
364D40E3208822D3715D409|
A4CF61F4229504052B309E0|
BD565F4005DF77DD2C0E524|
08EDB04F459726040DDE271|
BB6937544095DF770E35066|
140BBAE1902B68F56401950|
9EA641616140F3FFFFFFFFF|
F584000000000008061402B|
51E6FD49705B401C509EA64|
16161400A1D8E4496C85D40|
9ADF770E35066140E520882|
2D3F15F4095DB04F4597260|
40B120CDBA9C3B6040B120C|
DBA9C3B60403A7DCB148D11|
4E403A7DCB148D114E40    |
总数目:1

ST_SymDifference

ST_SymDifference — 返回输入对象A和B union后再去除A和B相交的部分。该函数是一个对称性函数,因为ST_SymDifference(A,B) = ST_SymDifference(B,A) 成立。

语法

st_symdifference ::=

参数

geomA geomB

geometry类型。

返回值

返回值为geometry类型。

可以认为该函数的返回值等于 ST_Union(geomA,geomB) - ST_Intersection(A,B)。

示例

SELECT ST_AsText(
ST_SymDifference(
ST_GeomFromText('LINESTRING(50 100, 50 200)'),
ST_GeomFromText('LINESTRING(50 50, 50 150)')));
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((50 1|
50,50 200),(50 50,50|
 100))               |
总数目:1

ST_Subdivide

ST_Subdivide — 返回一组几何体,其中集合中的任何几何体的顶点数都不超过指定的顶点数。

语法

st_subdivide ::=

参数

geom

geometry类型。

default_max_vertices

integer类型。默认值为256。

返回值

返回值为geometry集合类型。

将几何体划分为多个部分,直到一个部分可以使用不超过max_vertices的值来表示。对于索引细分数据集,多边形中的点和其他覆盖操作通常更快:“未命中”情况下的检查速度更快,因为所有部分的框通常覆盖的区域比原始几何体框小,“命中”情况下的检查速度更快,因为“重新检查”操作的点更少。

使用与ST_ClipByBox2D相同的封套剪裁。max_vertices必须是5或更多,因为需要5个点来代表一个封闭的盒子。

示例

SELECT ST_SubDivide('POLYGON((132 10,119 23,85 35,68 29,66 28,49 42,32 56,
22 64,32 110,40 119,36 150,57 158,75 171,92 182,114 184,132 10))'::geometry,10);
ST_SUBDIVIDE(GEOMETRY)      |
----------------------------
0103000000010000000A00000000|
000000008060400000000000002|
4400000000000C05D4000000000|
000037400000000000405540000|
000000080414000000000000051|
400000000000003D40000000000|
08050400000000000003C400000|
0000000040400000000000004C4|
000000000000036400000000000|
005040000000000000404000000|
00000805B40E69E4658EE695E40|
0000000000805B4000000000008|
060400000000000002440       |
----------------------------
0103000000010000000900000000|
000000000040400000000000805|
B40000000000000444000000000|
00C05D400000000000004240000|
0000000C062400000000000804C|
400000000000C06340000000000|
0C0524000000000006065400000|
0000000057400000000000C0664|
00000000000805C400000000000|
006740E69E4658EE695E4000000|
00000805B400000000000004040|
0000000000805B40            |
总数目:2

ST_SwapOrdinates

ST_SwapOrdinates — 返回交换了给定坐标值的给定几何体的版本。

语法

st_swapordinates ::=

参数

geom

geometry类型。

ords

cstring类型。ords参数是一个2个字符的字符串,用于命名要交换的坐标。有效名称为:x、y、z和m。

返回值

返回值为geometry集合类型。

示例

SELECT ST_AsText(
ST_SwapOrdinates(ST_Scale(ST_SwapOrdinates(g,'xm'),2, 1),'xm')
) FROM ( SELECT 'POINT ZM (0 0 0 2)'::geometry g ) foo;
ST_ASTEXT(text)      |
---------------------
POINT ZM (0 0 0 4)   |
总数目:1


SELECT ST_AsText(ST_SwapOrdinates('POINTZ(0 1 2)','xz'));
ST_ASTEXT(text)      |
---------------------
POINT Z (2 1 0)      |
总数目:1

ST_Union

ST_Union — 返回一个代表一些几何对象的并集的几何对象。

语法

st_union ::=

参数

g1field

geometry 集合类型。

g1 g2

geometry类型。

g1_array

geometry[] 类型。

返回值

返回值为geometry集合类型。

该函数输出对象可以是MULTI*,单例几何对象或geometry collection类型对象。该函数有两种形式。形式1返回两个输入几何对象的并集对应的几何对象。形式2是一个聚合函数,它根据一个几何对象的集合,对他们求并集。

聚合版本: 该函数根据输入的几何对象集合返回一个MULTI 几何对象或非 MULTI 几何对象。ST_Union() 该函数是聚合函数意味着,对于多行的数据,该函数的作用方式会像SQL里面的聚合函数SUM() and AVG() 一样,该函数会忽略掉NULL几何类型对象。

非聚合版本:该函数会返回两个输入对象的并集几何对象。输出类型可以是MULTI*,NON-MULTI 或 GEOMETRYCOLLECTION。如果任意一个输入对象是NULL,返回值也是NULL。

注解

函数ST_Collect 和函数 ST_Union 经常可以互换使用。函数ST_Collect一般来说要比函数ST_Union 快很多,因为ST_Collect函数不会去分解输入几何对象的边界或者检查一个MultiPolgon对象是否有重叠部分。

示例

SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),ST_GeomFromText('POINT(-2 3)') ) );
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(1 2,-2 3) |
总数目:1

DROP table geom_test;
CREATE table geom_test(col geometry);
INSERT into geom_test VALUES (ST_GeomFromText('POINT(1 2)'));
INSERT into geom_test VALUES (ST_GeomFromText('POINT(3 4)'));

SELECT ST_Union(col) from geom_test;
ST_UNION(GEOMETRY)      |
------------------------
010400000002000000010100|
0000000000000000F03F000|
00000000000400101000000|
00000000000008400000000|
000001040               |
总数目:1
DROP table geom_test;


SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion;
WKTUNION(text)      |
--------------------
MULTILINESTRING((1 2|
,3 4),(3 4,4 5))    |
总数目:1

ST_UnaryUnion

ST_UnaryUnion — 与函数ST_Union类似,但处理geometry类型的对象。

语法

st_unaryunion ::=

参数

geom

geometry类型。

返回值

返回值为geometry集合类型。

与函数ST_Union不同的是,函数ST_UnaryUnion会有效输入的MULTIPOLYGON对象公共的边界做分解。然后对他们求并集。每一个输入几何对象被假定是有效的。你可以用这个函数来对一些LINESTRING对象添加节点(分割点)。

你可能会混合使用ST_UnaryUnion 和 ST_Collect来确定你要在有限的内存和CPU中一次最佳分解多少几何对象,找到在ST_Union与ST_MemUnion中一种平衡。

示例

SELECT ST_AsText(ST_UnaryUnion('MULTILINESTRING((0 0, 10 0), (5 -5, 5 5))'));
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((0 0,|
5 0),(5 0,10 0),(5 -|
5,5 0),(5 0,5 5))    |
总数目:1

ST_VoronoiLines

ST_VoronoiLines — 返回由几何体顶点构造的Voronoi图的单元格之间的边界。

语法

st_voronoilines ::=

参数

geom

geometry类型。

tolerance

float8类型。顶点被视为等效的距离。通过提供非零容差距离,可以提高算法的鲁棒性。(默认值=0.0)

extend_to

geometry类型。如果几何图形作为“extend_to”参数提供,图表将被扩展以覆盖“extend_to”几何图形的封套,除非该封套小于默认封套(默认值=NULL,默认封套是输入几何图形的边界框,在每个方向上扩展了约50%)。

返回值

返回值为geometry集合类型。

ST_VoronoiLines从提供的几何体的顶点计算二维Voronoi图,并将该图中单元格之间的边界作为多行线返回。如果输入几何体为null,则返回null。如果输入几何体仅包含一个顶点,则返回空几何体集合。如果“延伸到”封套的面积为零,则返回空几何体集合。

示例

SELECT ST_VoronoiLines(geom, 30) As geom
FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) 
As g;
GEOM(GEOMETRY)      |
--------------------
01050000000300000001|
02000000020000001DC|
7711CC7F16040000000|
0000E07040E9A28B2EB|
A684240D145175D7411|
5740010200000002000|
000E9A28B2EBA684240|
D145175D74115740000|
0000000805BC0A9AAAA|
AAAAAA4540010200000|
0020000000000000000|
C06C40BE6DDBB66DDB4|
6C0E9A28B2EBA684240|
D145175D74115740    |
总数目:1

ST_VoronoiPolygons

ST_VoronoiPolygons — 返回由几何体顶点构造的Voronoi图的单元格。

语法

st_voronoipolygons ::=

参数

geom

geometry类型。

tolerance

float8类型。顶点被视为等效的距离。通过提供非零容差距离,可以提高算法的鲁棒性。(默认值=0.0)

extend_to

geometry类型。如果几何图形作为“extend_to”参数提供,图表将被扩展以覆盖“extend_to”几何图形的封套,除非该封套小于默认封套(默认值=NULL,默认封套是输入几何图形的边界框,在每个方向上扩展了约50%)。

返回值

返回值为geometry集合类型。

ST_VoronoiPolygons从提供的几何体的顶点计算二维Voronoi图。结果是多边形的Geometry集合,其覆盖范围大于输入顶点的范围。如果输入几何体为null,则返回null。如果输入几何体仅包含一个顶点,则返回空几何体集合。如果“延伸到”封套的面积为零,则返回空几何体集合。

示例

SELECT
ST_VoronoiPolygons(geom) As geom
FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) 
As g;
GEOM(GEOMETRY)      |
--------------------
01070000000500000001|
0300000001000000060|
000000000000000805B|
C0A9AAAAAAAAAA45400|
000000000805BC00000|
000000E070400000000|
0002059400000000000|
E070404316B29085AC4|
D4038BDE94D6F9A6040|
E9A28B2EBA684240D14|
5175D74115740000000|
0000805BC0A9AAAAAAA|
AAA4540010300000001|
0000000600000000000|
00000804B4000000000|
008056C000000000008|
05BC000000000008056|
C00000000000805BC0A|
9AAAAAAAAAA4540E9A2|
8B2EBA684240D145175|
D741157400000000000|
804B402449922449D25|
3400000000000804B40|
00000000008056C0010|
3000000010000000600|
00000000000000C06C4|
00000000000C0474000|
00000000C06C4073DBB|
66DDBB634C000000000|
00804B402449922449D|
25340E9A28B2EBA6842|
40D145175D741157404|
316B29085AC4D4038BD|
E94D6F9A60400000000|
000C06C400000000000|
C047400103000000010|
0000005000000000000|
0000C06C4073DBB66DD|
BB634C00000000000C0|
6C4000000000008056C|
00000000000804B4000|
000000008056C000000|
00000804B4024499224|
49D253400000000000C|
06C4073DBB66DDBB634|
C001030000000100000|
0050000000000000000|
2059400000000000E07|
0400000000000C06C40|
0000000000E07040000|
0000000C06C40000000|
0000C047404316B2908|
5AC4D4038BDE94D6F9A|
6040000000000020594|
00000000000E07040   |
总数目:1