几何对象编辑函数

ST_AddPoint

ST_AddPoint — 在LINESTRING对象的某个点的位置之前添加一个点(点的位置计数从0开始)。

语法

st_addpoint ::=

参数

linestring

geometry类型。

point

geometry类型。

position

integer类型。可以缺省,该参数可以省略或者设置为-1表示在末尾添加点。

返回值

返回值为geometry类型。返回添加后的几何类型。

示例

SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(0 0 1, 1 1 1)'), ST_MakePoint (1, 2, 3)));
ST_ASEWKT(text)      |
---------------------
LINESTRING(0 0 1,1 1 |
1,1 2 3)             |
总数目:1

SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT('LINESTRING(0 0 1, 1 1 1)'), ST_MakePoint (1, 2, 3),1)); 
ST_ASEWKT(text)      |
---------------------
LINESTRING(0 0 1,1 2 |
3,1 1 1)             |
总数目:1

ST_Affine

ST_Affine — 对一个几何对象在一个步骤中进行3d仿射变换,比如转换、旋转、放大等操作。

语法

st_affine ::=

st_affine ::=

参数

参数均为float类型。

当为全参数函数 ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff)时,被转换的对象会做如下形式的转换(这种变化假如变化后用矩阵用A,变换前是B,仿射矩阵是C,那么这个仿射操作满足A=CB)

x’ = a*x + b*y + c*z + xoff

y’ = d*x + e*y + f*z + yoff

z’ = g*x + h*y + i*z + zoff

对几何对象进行2d仿射变换。调用函数 ST_Affine(geom, a, b, d, e, xoff, yoff)

x’ = a*x + b*y + xoff

y’ = d*x + e*y + yoff

z’ = z

返回值

返回值为geometry类型。

示例

select st_summary(st_affine(st_makepoint(1,1),1,0,0,1,0,0));
ST_SUMMARY(text)      |
----------------------
Point[]               |
总数目:1


--将三维线绕z轴旋转180度
SELECT ST_AsEWKT(ST_Affine(the_geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0,0, 0, 1, 0, 0, 0)) As using_affine,
ST_AsEWKT(ST_Rotate(the_geom, pi())) As using_rotate
FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As the_geom) As foo;
USING_AFFINE(text)      |USING_ROTATE(text)      |
------------------------------------------------
LINESTRING(-1 -2 3,-1 -4|LINESTRING(-1 -2 3,-1 -4|
 3)                     | 3)                     |
总数目:1

ST_Force2D

ST_Force2D — 将一个几何对象转换成2维中的对象,转换后的对象只有X和Y坐标(其他维度的坐标会被丢弃)。

语法

st_force2d ::=

参数

geomA

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
ST_ASEWKT(text)      |
---------------------
CIRCULARSTRING(1 1,2 |
3,4 5,6 7,5 6)       |
总数目:1

SELECT ST_AsEWKT(ST_Force2D('POLYGON((0 0 2,0 5 2,5 0 2,0 0 2),(1 1 2,3 1 2,1 3 2,1 1 2))'));
ST_ASEWKT(text)      |
---------------------
POLYGON((0 0,0 5,5 0,|
0 0),(1 1,3 1,1 3,1 |
1))                  |
总数目:1

ST_Force3D

ST_Force3D — 将几何对象转换成XYZ模式,该函数是ST_Force3DZ别名。

语法

st_force3d ::=

参数

geomA

geometry类型。如果该几何对象没有Z部分坐标,那么Z值被设置为0。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_Force3D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
ST_ASEWKT(text)      |
---------------------
CIRCULARSTRING(1 1 2,|
2 3 2,4 5 2,6 7 2,5 |
6 2)                 |
总数目:1

SELECT ST_AsEWKT(ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));
ST_ASEWKT(text)      |
---------------------
POLYGON((0 0 0,0 5 0,|
5 0 0,0 0 0),(1 1 0,|
3 1 0,1 3 0,1 1 0))  |
总数目:1

ST_Force3DZ

ST_Force3DZ — 将几何对象转换成XYZ模式,该函数是ST_Force3D别名。

语法

st_force3dz ::=

参数

geomA

geometry类型。如果该几何对象没有Z部分坐标,那么Z值被设置为0。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
ST_ASEWKT(text)      |
---------------------
CIRCULARSTRING(1 1 2,|
2 3 2,4 5 2,6 7 2,5 |
6 2)                 |
总数目:1

SELECT ST_AsEWKT(ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));
ST_ASEWKT(text)      |
---------------------
POLYGON((0 0 0,0 5 0,|
5 0 0,0 0 0),(1 1 0,|
3 1 0,1 3 0,1 1 0))  |
总数目:1

ST_Force3DM

ST_Force3DM — 将几何对象转换为XYM模式。

语法

st_force3dm ::=

参数

geomA

geometry类型。如果一个几何对象没有M成分,将会把M值设置为0,如果该几何对象有Z参数值,该值会被丢弃。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
ST_ASEWKT(text)      |
---------------------
CIRCULARSTRINGM(1 1 0|
,2 3 0,4 5 0,6 7 0,5|
 6 0)                |
总数目:1

SELECT ST_AsEWKT(ST_Force3DM('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));
ST_ASEWKT(text)      |
---------------------
POLYGONM((0 0 0,0 5 0|
,5 0 0,0 0 0),(1 1 0|
,3 1 0,1 3 0,1 1 0)) |
总数目:1

ST_Force4D

ST_Force4D — 将一个几何对象转换为XYZM模式。

语法

st_force4d ::=

参数

geomA

geometry类型。如果没有Z和M值,则都用0代替。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromEWKT('CIRCULARSTRING(1 1 2, 2 3 2, 4 5 2, 6 7 2, 5 6 2)')));
ST_ASEWKT(text)      |
---------------------
CIRCULARSTRING(1 1 2 |
0,2 3 2 0,4 5 2 0,6 |
7 2 0,5 6 2 0)       |
总数目:1

SELECT ST_AsEWKT(ST_Force4D('MULTILINESTRINGM((0 0 1,0 5 2,5 0 3,0 0 4),(1 1 1,3 1 1,1 3 1,1 1 1))'));
ST_ASEWKT(text)      |
---------------------
MULTILINESTRING((0 0 |
0 1,0 5 0 2,5 0 0 3,|
0 0 0 4),(1 1 0 1,3 |
1 0 1,1 3 0 1,1 1 0 |
1))                  |
总数目:1

ST_ForcePolygonCCW

ST_ForcePolygonCCW — 将所有外环逆时针和所有内环顺时针定向。

语法

st_forcepolygonccw ::=

参数

geom

geometry类型。强制(多重)多边形的外环使用逆时针方向,内环使用顺时针方向。非多边形几何图形将原封不动地返回。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_ForcePolygonCCW(ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))')));
ST_ASTEXT(text)      |
---------------------
MULTIPOLYGON(((0 0,4 |
0,4 4,0 4,0 0),(1 1,|
1 2,2 2,2 1,1 1)),((|
-1 -1,-2 -1,-2 -2,-1|
 -2,-1 -1)))         |
总数目:1

SELECT ST_AsText(ST_ForcePolygonCCW(ST_GeomFromText('LINESTRING(2 3,4 5,6 5,7 8)')));
ST_ASTEXT(text)      |
---------------------
LINESTRING(7 8,6 5,4 |
5,2 3)               |
总数目:1

ST_ForceCollection

ST_ForceCollection — 把geometry对象转换成GEOMETRYCOLLECTION类型对象。

语法

st_forcecollection ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_ForceCollection('POLYGON((0 0 1,0 5 1,5 0 1,0 0 1),(1 1 1,3 1 1,1 3 1,1 1 1))'));
ST_ASEWKT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
LYGON((0 0 1,0 5 1,5|
 0 1,0 0 1),(1 1 1,3|
 1 1,1 3 1,1 1 1)))  |
总数目:1

SELECT ST_AsEWKT(ST_ForceCollection('POLYHEDRALSURFACE(((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
((1 1 0,1 1 1,1 0 1,1 0 0,1 1 0)),
((0 1 0,0 1 1,1 1 1,1 1 0,0 1 0)),
((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)))'));
ST_ASEWKT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
LYGON((0 0 0,0 0 1,0|
 1 1,0 1 0,0 0 0)),P|
OLYGON((0 0 0,0 1 0,|
1 1 0,1 0 0,0 0 0)),|
POLYGON((0 0 0,1 0 0|
,1 0 1,0 0 1,0 0 0))|
,POLYGON((1 1 0,1 1 |
1,1 0 1,1 0 0,1 1 0)|
),POLYGON((0 1 0,0 1|
 1,1 1 1,1 1 0,0 1 0|
)),POLYGON((0 0 1,1 |
0 1,1 1 1,0 1 1,0 0 |
1)))                 |
总数目:1

ST_ForcePolygonCW

ST_ForcePolygonCW — 将所有外环逆时针和所有内环顺时针定向。

语法

st_forcepolygoncw ::=

参数

geom

geometry类型。强制(多重)多边形的外环使用顺时针方向,内环使用逆时针方向。非多边形几何图形将原封不动地返回。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_ForcePolygonCW('SRID=4269;POLYGON ((0 0, 1 1, 1 0, 0 0))'));
ST_ASTEXT(text)      |
---------------------
POLYGON((0 0,1 1,1 0,|
0 0))                |
总数目:1

SELECT ST_AsText(ST_ForcePolygonCW(ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))')));
ST_ASTEXT(text)      |
---------------------
MULTIPOLYGON(((0 0,0 |
4,4 4,4 0,0 0),(1 1,|
2 1,2 2,1 2,1 1)),((|
-1 -1,-1 -2,-2 -2,-2|
 -1,-1 -1)))         |
总数目:1

ST_ForceSFS

ST_ForceSFS — 把几何对象转换成符合SFS 1.1版本规范的几何类型对象。

语法

st_forcesfs ::=

参数

geom

geometry类型。

version

text类型。(暂时没有实际意义)

返回值

返回值为geometry类型。

示例

SELECT ST_ForceSFS(ST_GeomFromText('POINT(1 2)'));
ST_FORCESFS(GEOMETRY)      |
---------------------------
0101000000000000000000F03F0|
000000000000040            |
总数目:1

SELECT ST_ForceSFS(ST_GeomFromText('POINT(1 2)'),'2.5.0');
ST_FORCESFS(GEOMETRY)      |
---------------------------
0101000000000000000000F03F0|
000000000000040            |
总数目:1

ST_ForceRHR

ST_ForceRHR — 按照右手坐标定则对polygon的顶点进行转向。在GIS术语中,这意味着被多边形包围的区域会被转向边界的右方。特别地:外环是顺时针方向的,而内环是逆时针方向的。

语法

st_forcerhr ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_ForceRHR('POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'));
ST_ASEWKT(text)      |
---------------------
POLYGON((0 0 2,0 5 2,|
5 0 2,0 0 2),(1 1 2,|
3 1 2,1 3 2,1 1 2))  |
总数目:1

ST_ForceCurve

ST_ForceCurve — 把一个geometry对象向上转型为对应的curve 类型。

语法

st_forcecurve ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

注解

line向上转型后是compoundcurve类型,multiline类型向上转型是multicurve,polygon向上转型是curvepolygon, multipolygon向上转型是multisurface。

示例

SELECT '1', ST_AsText(ST_ForceCurve('POINT(0 0)'));
?COLUMN?(varchar)      |ST_ASTEXT(text)      |
--------------------------------------------
1                      |POINT(0 0)           |
总数目:1

SELECT '2', ST_AsText(ST_ForceCurve('MULTIPOINT((0 0))'));
?COLUMN?(varchar)      |ST_ASTEXT(text)      |
--------------------------------------------
2                      |MULTIPOINT(0 0)      |
总数目:1

SELECT '3', ST_AsText(ST_ForceCurve('LINESTRING(0 0, 10 0)'));
?COLUMN?(varchar)      |ST_ASTEXT(text)      |
--------------------------------------------
3                      |COMPOUNDCURVE((0 0,10|
                       | 0))                 |
总数目:1

SELECT ST_AsText(ST_ForceCurve('POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))'));
ST_ASTEXT(text)      |
---------------------
CURVEPOLYGON Z ((0 0 |
2,5 0 2,0 5 2,0 0 2)|
,(1 1 2,1 3 2,3 1 2,|
1 1 2))              |
总数目:1

ST_LineMerge

ST_LineMerge — 返回通过将多行线缝合在一起形成的一个(一组)LineString。

语法

st_linemerge ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))')));
ST_ASTEXT(text)      |
---------------------
LINESTRING(-29 -27,-3|
0 -29.7,-36 -31,-45 |
-33,-46 -32)         |
总数目:1

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45.2 -33.2,-46 -32))')));
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((-45.|
2 -33.2,-46 -32),(-2|
9 -27,-30 -29.7,-36 |
-31,-45 -33))        |
总数目:1

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText('POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))')));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION EM|
PTY                  |
总数目:1

ST_CollectionExtract

ST_CollectionExtract — 根据输入的(multi)几何对象,返回一个(multi)几何对象,返回的几何对象只包含指定的类型的元素。

语法

st_collectionextract ::=

参数

collection

geometry类型。

type

integer类型。

返回值

返回值为geometry类型。

注解

没有指定的类型子几何对象会被忽略掉。如果没有对应类型的子几何对象,该函数会返回空几何对象。本函数只支持point、 line和 polygon类型。

类型值和类型名称对应关系如下:1 == POINT,2 == LINESTRING,3 == POLYGON。

示例

SELECT st_astext(st_collectionExtract('POINT(0 0)', 1));
ST_ASTEXT(text)      |
---------------------
POINT(0 0)           |
总数目:1

SELECT st_astext(st_collectionExtract('POINT(0 0)', 2));
ST_ASTEXT(text)      |
---------------------
LINESTRING EMPTY     |
总数目:1

SELECT st_astext(st_collectionExtract('POINT(0 0)', 3));
ST_ASTEXT(text)      |
---------------------
POLYGON EMPTY        |
总数目:1

SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION( GEOMETRYCOLLECTION(POINT(0 0)))'),1));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(0 0)      |
总数目:1

SELECT ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION( GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))'),2));
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((0 0,|
1 1),(2 2,3 3))      |
总数目:1

ST_CollectionHomogenize

ST_CollectionHomogenize — 根据给定的geometry collection对象,返回一个最简化的对象。

语法

st_collectionhomogenize ::=

参数

collection

geometry类型。

返回值

返回值为geometry类型。单例对象返回的还是单例对象,同类的collection对象会返回一个合适的multi-type类型

示例

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

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));
ST_ASTEXT(text)      |
---------------------
POINT(0 0)           |
总数目:1

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));
ST_ASTEXT(text)      |
---------------------
MULTIPOINT(0 0,1 1)  |
总数目:1

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(0 0, 1 1))'));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION(PO|
INT(0 0),LINESTRING(|
0 0,1 1))            |
总数目:1

ST_Multi

ST_Multi — 返回一个MULTI* 类型的几何对象,如果几何对象本身就是MULTI*类型的,返回值不变,即和输入一样。

语法

st_multi ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))')));
ST_ASTEXT(text)      |
---------------------
MULTIPOLYGON(((743238|
 2967416,743238 2967|
450,743265 2967450,7|
43265.625 2967416,74|
3238 2967416)))      |
总数目:1

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

ST_Normalize

ST_Normalize — 返回几何体的标准形式。

语法

st_normalize ::=

参数

geom

geometry类型。

返回值

返回值为geometry类型。以规范化/规范化形式返回几何体。可以对多边形环中的顶点、多边形中的环、复合多几何体中的元素重新排序。

主要用于测试目的(比较预期结果和获得的结果)。

示例

select 1, ST_AsText(ST_Normalize(
'GEOMETRYCOLLECTION(POINT(2 3),MULTILINESTRING((0 0, 1 1),(2 2, 3 3)))'
::geometry));
?COLUMN?(int)      |ST_ASTEXT(text)      |
----------------------------------------
1                  |GEOMETRYCOLLECTION(MU|
                   |LTILINESTRING((2 2,3|
                   | 3),(0 0,1 1)),POINT|
                   |(2 3))               |
总数目:1

select 2, ST_AsText(ST_Normalize(
'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))'
::geometry));
?COLUMN?(int)      |ST_ASTEXT(text)      |
----------------------------------------
2                  |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))    |
总数目:1

ST_QuantizeCoordinates

ST_QuantizeCoordinates — 将坐标的最低有效位设置为零。

语法

st_quantizecoordinates ::=

参数

geom

geometry类型。

prec_x prec_y prec_z prec_m

integer类型。

返回值

返回值为geometry类型。

ST_QuantizeCoordinates确定用小数点后指定位数表示坐标值所需的位数(N),然后将除N个最高有效位以外的所有位设置为零。生成的坐标值仍将四舍五入到原始值,但会改善压缩性。

如果geometry列使用的是可压缩存储类型,这可能会显著减少磁盘使用量。该函数允许在每个维度的小数点后指定不同的位数;

注解

负数字被解释为小数点左边的数字(即prec_x=-2将保留坐标值至最接近的100)。

ST_QuantizeCoordinates生成的坐标与包含这些坐标的几何体以及这些坐标在几何体中的相对位置无关。

因此,geome尝试之间的现有拓扑关系不受此函数使用的影响。当使用低于几何体固有精度的位数调用函数时,该函数可能会生成无效的几何体。

示例

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));
ST_ASTEXT(text)      |
---------------------
POINT(100.12345504760|
7 0)                 |
总数目:1

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 100.123456 100.123456)'::geometry, 4 ,3 ,2));
ST_ASTEXT(text)      |
---------------------
POINT Z (100.12345504|
7607 100.12341308593|
8 100.123046875)     |
总数目:1

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, -1));
ST_ASTEXT(text)      |
---------------------
POINT(100 0)         |
总数目:1

ST_RemovePoint

ST_RemovePoint — 从一个LINESTRING对象中移除一个Point点,下标从0开始。

语法

st_removepoint ::=

参数

linestring

geometry类型。

offset

integer类型。

返回值

返回值为geometry类型。

注解

这个函数对于把一个封闭的环拆成一个开放的LINESTRING很有用。

示例

SELECT ST_AsEWKT(ST_RemovePoint(ST_GeomFromEWKT('LINESTRING(0 0 1, 1 1 1, 2 3 4)'), 0)); 
ST_ASEWKT(text)      |
---------------------
LINESTRING(1 1 1,2 3 |
4)                   |
总数目:1
SELECT ST_removepoint('LINESTRING(0 0, 1 1, 2 2)', 3);
ERROR, Point index out of range (0..2)

SELECT ST_removepoint('POLYGON((0 0 2, 5 0 2, 0 5 2, 0 0 2),(1 1 2, 1 3 2, 3 1 2, 1 1 2))', 3);
ERROR, First argument must be a LINESTRING


ST_Reverse

ST_Reverse — 按顶点的逆序返回一个geometry对象。

语法

st_reverse ::=

参数

geom

geometry类型。该函数支持任意几何类型对象,按顶点的逆序返回一个geometry对象。

返回值

返回值为geometry类型。

示例

SELECT ST_AsText(the_geom) As line, ST_AsText(ST_Reverse(the_geom)) As reverseline 
FROM(SELECT ST_MakeLine(ST_MakePoint(1,2),ST_MakePoint(1,10)) As the_geom) As foo;
LINE(text)      |REVERSELINE(text)      |
---------------------------------------
LINESTRING(1 2,1|LINESTRING(1 10,1 2)   |
 10)            |                       |
总数目:1

SELECT ST_AsText(ST_Reverse('LINESTRING Z (0 0 3,1 1 6)'::geometry));
ST_ASTEXT(text)      |
---------------------
LINESTRING Z (1 1 6,0|
 0 3)                |
总数目:1

ST_Rotate

ST_Rotate — 围绕原点逆时针旋转几何体。

语法

st_rotate ::=

参数

geomA

geometry类型。该函数支持任意几何类型对象,按顶点的逆序返回一个geometry对象。

rotRadians

float类型。旋转度数。pi()代表旋转180度。

x0 y0

float类型。x,y坐标的格式。

pointOrigin

geometry类型。指定的Point几何对象的格式旋转的中心点。(如果没有指定按照POINT(0,0)即原点为中心点)

返回值

返回值为geometry类型。

示例

SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()));
ST_ASEWKT(text)      |
---------------------
LINESTRING(-50 -160,-|
50 -50,-100 -50)     |
总数目:1

SELECT ST_AsEWKT(ST_Rotate('LINESTRING (50 160, 50 50, 100 50)', pi()/6, 50, 160));
ST_ASEWKT(text)      |
---------------------
LINESTRING(50 160,105|
 64.7372055837117,14|
8.301270189222 89.73|
72055837117)         |
总数目:1

SELECT ST_AsEWKT(ST_Rotate(geom, -pi()/3, ST_Centroid(geom)))
FROM (SELECT 'LINESTRING (50 160, 50 50, 100 50)'::geometry As geom) As foo;
ST_ASEWKT(text)      |
---------------------
LINESTRING(116.422458|
835689 130.672073467|
066,21.1596644194009|
 75.6720734670659,46|
.1596644194009 32.37|
0803277844)          |
总数目:1

ST_RotateX

ST_RotateX — 将一个几何对象绕X轴旋转指定弧度。

语法

st_rotatex ::=

参数

geomA

geometry类型。该函数支持任意几何类型对象,按顶点的逆序返回一个geometry对象。

rotRadians

float类型。旋转度数。pi()代表旋转180度。

返回值

返回值为geometry类型。

ST_RotateX(geomA, rotRadians) 是函数 ST_Affine(geomA, 1, 0, 0, 0, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 0, 0, 0) 的简化版。

仿射函数 ST_Affine参数太多了,这个函数是仿射函数的一种特殊情况的简化版,相比较而言更简单一些。

示例

SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
ST_ASEWKT(text)      |
---------------------
LINESTRING(1 -3 2,1 -|
1 1)                 |
总数目:1

ST_RotateX

ST_RotateX — 将一个几何对象绕X轴旋转指定弧度。

语法

st_rotatex ::=

参数

geomA

geometry类型。该函数支持任意几何类型对象,按顶点的逆序返回一个geometry对象。

rotRadians

float类型。旋转度数。pi()代表旋转180度。

返回值

返回值为geometry类型。

ST_RotateX(geomA, rotRadians) 是函数 ST_Affine(geomA, 1, 0, 0, 0, cos(rotRadians), -sin(rotRadians), 0, sin(rotRadians), cos(rotRadians), 0, 0, 0) 的简化版。

仿射函数 ST_Affine参数太多了,这个函数是仿射函数的一种特殊情况的简化版,相比较而言更简单一些。

示例

SELECT ST_AsEWKT(ST_RotateX(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
ST_ASEWKT(text)      |
---------------------
LINESTRING(1 -3 2,1 -|
1 1)                 |
总数目:1

注解

ST_RotateY,ST_RotateZ 分别表示将一个几何对象绕Y轴,Z轴旋转指定弧度,语法和用法与ST_RotateX一致。

SELECT ST_AsEWKT(ST_RotateY(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
ST_ASEWKT(text)      |
---------------------
LINESTRING(3 2 -1,1 1|
 -1)                 |
总数目:1

SELECT ST_AsEWKT(ST_RotateZ(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), pi()/2));
ST_ASEWKT(text)      |
---------------------
LINESTRING(-2 1 3,-1 |
1 1)                 |
总数目:1

ST_Scale

ST_Scale — 通过将输入对象的坐标乘以一个系数来对对象进行缩放(缩小和放大)。

语法

st_scale ::=

参数

geomA

geometry类型。

XFactor YFactor ZFactor

float类型。

Factor

geometry类型。

origin

geometry类型。

返回值

返回值为geometry类型。

通过将坐标与相应的因子参数相乘,将几何体缩放到新大小。将几何图形作为因子参数的版本允许传递2d、dm、3dz或4d点,以便为所有支持的尺寸设置比例因子。

因子点中缺少的维度相当于不缩放相应的维度。三种几何体变体允许传递缩放的“假原点”。这允许“就地缩放”,例如使用几何体的质心作为假原点。如果没有假原点,则会相对于实际原点进行缩放,因此所有坐标只需乘以比例因子即可。

示例

SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75, 0.8));
ST_ASEWKT(text)      |
---------------------
LINESTRING(0.5 1.5 2.|
4,0.5 0.75 0.8)      |
总数目:1

SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 0.75));
ST_ASEWKT(text)      |
---------------------
LINESTRING(0.5 1.5 3,|
0.5 0.75 1)          |
总数目:1

SELECT ST_AsEWKT(ST_Scale(ST_GeomFromEWKT('LINESTRING(1 2 3 4, 1 1 1 1)'),ST_MakePoint(0.5, 0.75, 2, -1)));
ST_ASEWKT(text)      |
---------------------
LINESTRING(0.5 1.5 6 |
-4,0.5 0.75 2 -1)    |
总数目:1

SELECT ST_AsText(ST_Scale('LINESTRING(1 1, 2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry));
ST_ASTEXT(text)      |
---------------------
LINESTRING(1 1,3 3)  |
总数目:1

ST_Segmentize

ST_Segmentize — 返回一个修改后的geometry对象,让这个对象的的每一段的长度不能超过给出的最大长度。只在2D维度能进行计算。对于几何对象来说,长度单位需要在SRS表中,对于geography地理对象来说,距离单位是米。

语法

st_segmentize ::=

参数

geomA

geometry类型。

geog

geography类型。

max_segment_length

float类型。

返回值

返回值为geometry类型。

注解

该函数会增加几何对象的片段数,并且片段的长度不会比最大的长度限制长。

示例

SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))'),5));
ST_ASTEXT(text)      |
---------------------
MULTILINESTRING((-29 |
-27,-30 -29.7,-34.88|
6615700134 -30.75876|
6735029,-36 -31,-40.|
8809353009198 -32.08|
46522890933,-45 -33)|
,(-45 -33,-46 -32))  |
总数目:1

SELECT ST_AsText(
ST_Segmentize(ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866
42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917
42.3902909739571))'),10));
ST_ASTEXT(text)      |
---------------------
POLYGON((-71.17765850|
52917 42.39029097395|
71,-71.1776820268866|
 42.3903701743239,-7|
1.1776063012595 42.3|
903825660754,-71.177|
5826583081 42.390303|
3653531,-71.17765850|
52917 42.39029097395|
71))                 |
总数目:1


SELECT ST_AsText(
ST_Segmentize(ST_GeogFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866
42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917
42.3902909739571))'),10));
ST_ASTEXT(text)      |
---------------------
POLYGON((-71.17765850|
52917 42.39029097395|
71,-71.1776820268866|
 42.3903701743239,-7|
1.1776063012595 42.3|
903825660754,-71.177|
5826583081 42.390303|
3653531,-71.17765850|
52917 42.39029097395|
71))                 |
总数目:1

ST_SetPoint

ST_SetPoint — 用给定的点替换一个LINESTRING对象的第N个点,下标从0开始。

语法

st_setpoint ::=

参数

linestring

geometry类型。

zerobasedposition

integer类型。负指数向后计数,所以-1是最后一点。

point

geometry类型。

返回值

返回值为geometry类型。

示例

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

SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', -1, 'POINT(-1 1)'));
ST_ASTEXT(text)      |
---------------------
LINESTRING(-1 2,-1 1)|
总数目:1

ST_SetSRID

ST_SetSRID — 将几何图形上的SRID设置为特定整数值。用于构造查询的边界框。

语法

st_setsrid ::=

参数

geom

geometry类型。

srid

integer类型。

返回值

返回值为geometry类型。该函数不以任何方式转换几何体坐标——它只是设置元数据,定义假定几何体所在的空间参考系统。

示例

SELECT ST_AsText(ST_SetSRID(ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53,77 29,77.6 29.5, 75.15 29.53)')), 4326));
ST_ASTEXT(text)      |
---------------------
POLYGON((75.15 29.53,|
77 29,77.6 29.5,75.1|
5 29.53))            |
总数目:1

SELECT ST_AsText(ST_SetSRID(ST_Point(-123.365556, 48.428611),4326)) As wgs84long_lat;
WGS84LONG_LAT(text)      |
-------------------------
POINT(-123.365556 48.4286|
11)                      |
总数目:1

ST_SnapToGrid

ST_SnapToGrid — 把输入的几何对象的所有点重新组成一个规则的栅格。

语法

st_snaptogrid ::=

参数

geomA

geometry类型。

originX originY

float类型。

sizeX sizeY sizeZ sizeM

float类型。

size

float类型。

pointOrigin

geometry类型。

返回值

返回值为geometry类型。返回的几何体将具有与输入几何体相同的维数,且未触及更高的维数值。

函数形式 1,2,3: 把输入的几何对象的所有点重新组成一个以该对象中心点和它的像元大小的栅格。该函数会删除同一个像元上的连续的点,如果该函数输出的点不足以生成给定的几何类型的对象,那么返回值就是NULL。该函数会把输入的几何对象内部折叠的几何对象删除掉。这个函数对降低栅格分辨率很有用。

函数形式 4: 把输入的几何对象的所有点重新组成一个以该对象中心点和它的像元大小的栅格 (第二个参数必须是point类型对象)。如果你不想把输入对象转变成栅格,把所有维度值都设置为0。

示例

SELECT ST_AsText(ST_SnapToGrid(
ST_GeomFromText('LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667)
'),
0.001)
);
ST_ASTEXT(text)      |
---------------------
LINESTRING(1.112 2.12|
3,4.111 3.237)       |
总数目:1


SELECT ST_AsEWKT(ST_SnapToGrid(
ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 2.3456 1.11111,
4.111111 3.2374897 3.1234 1.1111, -1.11111112 2.123 2.3456 1.1111112)'),
ST_GeomFromEWKT('POINT(1.12 2.22 3.2 4.4444)'),
0.1, 0.1, 0.1, 0.01) );
ST_ASEWKT(text)      |
---------------------
LINESTRING(-1.08 2.12|
 2.3 1.1144,4.12 3.2|
2 3.1 1.1144,-1.08 2|
.12 2.3 1.1144)      |
总数目:1


SELECT ST_AsEWKT(ST_SnapToGrid(ST_GeomFromEWKT('LINESTRING(-1.1115678 2.123 3 2.3456,
4.111111 3.2374897 3.1234 1.1111)'),
0.01) );
ST_ASEWKT(text)      |
---------------------
LINESTRING(-1.11 2.12|
 3 2.3456,4.11 3.24 |
3.1234 1.1111)       |
总数目:1

ST_Snap

ST_Snap — 把一个输入的几何对象的片段和顶点切割后重新组装成一个参考类型的几何对象。

语法

st_snap ::=

参数

input

geometry类型。

reference

geometry类型。

tolerance

float类型。

返回值

返回值为geometry类型。

把一个输入的几何对象的片段和顶点切割后移向一个参考类型的几何对象的顶点上(译者注:直观上看就是把第一个几何对象移向第二个几何对象,让两者靠近), 一个最大的切割距离用来控制在片段的哪个位置进行切割。

切割一个几何对象并组装成另一个可以提高消除相近边界(消除边界时在节点交集计算时会引起问题)带来的覆盖操作的鲁棒性。太多次的切割会引起生成的拓扑结构无效。因此切割点的位置和切割次数是使用探索法来决定怎样进行安全的切割。

然而这会导致有一些切割被省略掉。

示例

SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) As polysnapped 
FROM (SELECT
ST_GeomFromText('MULTIPOLYGON(((26 125, 26 200, 126 200, 126 125, 26 125 ), ( 51 150, 101 150, 76 175, 51 150 )),(( 151 100, 151 200, 176 175, 151 100 )))') As poly, 
ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
) As foo;
POLYSNAPPED(text)      |
-----------------------
MULTIPOLYGON(((26 125,2|
6 200,126 200,126 125,|
101 100,26 125),(51 15|
0,101 150,76 175,51 15|
0)),((151 100,151 200,|
176 175,151 100)))     |
总数目:1


SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly, line)*1.25)) As polysnapped
FROM (SELECT
ST_GeomFromText('MULTIPOLYGON((( 26 125, 26 200, 126 200, 126 125, 26 125 ),( 51 150, 101 150, 76 175, 51 150 ) ),(( 151 100, 151 200, 176 175, 151 100 )))') As poly,
ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
) As foo;
POLYSNAPPED(text)      |
-----------------------
MULTIPOLYGON(((5 107,26|
 200,126 200,126 125,1|
01 100,54 84,5 107),(5|
1 150,101 150,76 175,5|
1 150)),((151 100,151 |
200,176 175,151 100))) |
总数目:1


SELECT ST_AsText(ST_Snap(line, poly, ST_Distance(poly, line)*1.01)) As linesnapped
FROM (SELECT
ST_GeomFromText('MULTIPOLYGON(((26 125, 26 200, 126 200, 126 125, 26 125),(51 150, 101 150, 76 175, 51 150 )),((151 100, 151 200, 176 175, 151 100)))') As poly,
ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
) As foo;
LINESNAPPED(text)      |
-----------------------
LINESTRING(5 107,26 125|
,54 84,101 100)        |
总数目:1


SELECT ST_AsText(ST_Snap(line, poly, ST_Distance(poly, line)*1.25)) As linesnapped
FROM (SELECT
ST_GeomFromText('MULTIPOLYGON((( 26 125, 26 200, 126 200, 126 125, 26 125 ),(51 150, 101 150, 76 175, 51 150 )) ,((151 100, 151 200, 176 175, 151 100 )))') As poly,
ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
) As foo;
LINESNAPPED(text)      |
-----------------------
LINESTRING(26 125,54 84|
,101 100)              |
总数目:1

ST_Transform

ST_Transform — 返回一个根据给定的SRID转换成新的坐标系对象。

语法

st_transform ::=

参数

geom

geometry类型。

srid to_srid

integer类型。

from_proj to_proj

text类型。

返回值

返回值为geometry类型。

目标空间参考to_srid可以由有效的srid整数参数标识(即,它必须存在于空间参考系统表中)。或者,定义为 PROJ.4字符串的空间参考可用于to__proj和/或from__proj,但这些方法未得到优化。如果目标空间参考系用PROJ.4字符串而不是SRID表示,则输出几何体的SRID将设置为零。除了具有fproj的功能外,输入几何图形必须具有定义的SRID。

注解

返回一个根据给定的SRID转换成新的坐标系对象,SRID值必须存在于 SPATIAL_REF_SYS 表中。ST_Transform 函数通常会和函数ST_SetSRID()混淆。ST_Transform函数实际上会把一个几何对象坐标从一个参考系转换成另一个,而函数ST_SetSRID() 只是简单的修改输入的几何对象的SRID值。

除了具有from_proj的函数外,输入几何图形必须具有定义的SRID。

示例

--geometry ST_Transform(geometry g1, integer srid)
SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))',2249),4326)) As wgs_geom;
WGS_GEOM(text)      |
--------------------
POLYGON((-71.1776848|
522251 42.390289651|
2902,-71.1776843766|
326 42.390382947800|
9,-71.1775844305465|
 42.3903826677917,-|
71.1775825927231 42|
.3902893647987,-71.|
1776848522251 42.39|
02896512902))       |
总数目:1


--geometry ST_Transform(geometry geom, text to_proj)
SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))',2249),
'+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs'::text)) As wgs_geom;
WGS_GEOM(text)      |
--------------------
POLYGON((7373760.240|
69928 2160138.47884|
229,7373736.3483781|
9 2160139.06668991,|
7373741.77057543 21|
60152.64202051,7373|
765.78843722 216015|
2.36844097,7373760.|
24069928 2160138.47|
884229))            |
总数目:1


--geometry ST_Transform(geometry geom, text from_proj, text to_proj)
SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))'),
'+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs'::text, '+proj=gnom +ellps=WGS84 +lat_0=80 +lon_0=-100 +no_defs'::text)) As wgs_geom;
WGS_GEOM(text)      |
--------------------
POLYGON((822169.5563|
69573 808152.711319|
989,822193.88368597|
 808167.968819834,8|
22205.773688396 808|
146.398149683,82218|
1.721633063 808130.|
641310654,822169.55|
6369573 808152.7113|
19989))             |
总数目:1


--geometry ST_Transform(geometry geom, text from_proj, integer to_srid)
SELECT ST_AsText(ST_Transform(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))'),
'+proj=gnom +ellps=WGS84 +lat_0=80 +lon_0=-100 +no_defs'::text, 4326)) As wgs_geom;
WGS_GEOM(text)      |
--------------------
POLYGON((57.72861297|
65341 73.9049445021|
478,57.728983728167|
1 73.9047166227632,|
57.7282537464177 73|
.9046369886763,57.7|
278660873277 73.904|
8630231056,57.72861|
29765341 73.9049445|
021478))            |
总数目:1

ST_Translate

ST_Translate — 把一个几何对象根据指定的输入偏移地址,移动到一个新的位置。

语法

st_translate ::=

参数

input

geometry类型。

deltax deltay deltaz

float类型。

返回值

返回值为geometry类型。返回一个新的几何体,其坐标为转换的增量x、增量y、增量z单位。单位基于此几何体的空间参考(SRID)中定义的单位。

示例

SELECT ST_AsText(ST_Translate(ST_GeomFromText('POINT(-71.01 42.37)',4326),1,0)) As wgs_transgeomtxt;
WGS_TRANSGEOMTXT(text)      |
----------------------------
POINT(-70.01 42.37)         |
总数目:1

SELECT ST_AsText(ST_Translate(ST_GeomFromText('LINESTRING(-71.01 42.37,-71.11 42.38)',4326) ,1,0.5)) As wgs_transgeomtxt;
WGS_TRANSGEOMTXT(text)      |
----------------------------
LINESTRING(-70.01 42.87,-70.|
11 42.88)                   |
总数目:1

SELECT ST_AsText(ST_Translate(ST_Collect('CURVEPOLYGON(CIRCULARSTRING(4 3,3.12 0.878,1 0,-1.121 5.1213,6 7, 8 9,4 3))','POINT(1 3)'),1,2));
ST_ASTEXT(text)      |
---------------------
GEOMETRYCOLLECTION(CU|
RVEPOLYGON(CIRCULARS|
TRING(5 5,4.12 2.878|
,2 2,-0.121 7.1213,7|
 9,9 11,5 5)),POINT(|
2 5))                |
总数目:1

ST_TransScale

ST_TransScale — 根据输入的缩放倍数,对一个几何对象进行缩放,缩放因子为Xfactor和Yfactor参数,该函数只支持2D对象。

语法

st_transscale ::=

参数

input

geometry类型。

deltax deltay XFactor YFactor

float类型。

返回值

返回值为geometry类型。

使用deltaX和deltaY参数转换几何体,然后使用XFactor和YFactor参数缩放几何体,仅支持二维。

示例

SELECT ST_AsEWKT(ST_TransScale(ST_GeomFromEWKT('LINESTRING(1 2 3, 1 1 1)'), 0.5, 1, 1, 2));
ST_ASEWKT(text)      |
---------------------
LINESTRING(1.5 6 3,1.|
5 4 1)               |
总数目:1

SELECT ST_AsText(ST_Transscale(ST_LineToCurve(ST_Buffer('POINT(234 567)', 3)),1,2,3,4));
ST_ASTEXT(text)      |
---------------------
CURVEPOLYGON(CIRCULAR|
STRING(714 2276,696 |
2276,714 2276))      |
总数目:1