当前位置:网站首页>金仓数据库 KingbaseGIS 使用手册(6.5. 几何对象编辑函数)

金仓数据库 KingbaseGIS 使用手册(6.5. 几何对象编辑函数)

2022-08-09 22:11:00 沉舟侧畔千帆过_

6.5. 几何对象编辑函数

6.5.1. ST_AddPoint

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

用法

geometry ST_AddPoint(geometry linestring, geometry point);
geometry ST_AddPoint(geometry linestring, geometry point, integer position);

描述

在LINESTRING对象的某个点的位置之前添加一个点(点的位置计数从0开始),该参数可以省略或者设置为-1表示在末尾添加点。

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

--guarantee all linestrings in a table are closed
--by adding the start point of each linestring to the end of the line string
--only for those that are not closed
UPDATE sometable
SET the_geom = ST_AddPoint(the_geom, ST_StartPoint(the_geom))
FROM sometable
WHERE ST_IsClosed(the_geom) = false;

--Adding point to a 3-d line
SELECT ST_AsEWKT(ST_AddPoint(ST_GeomFromEWKT(
   'LINESTRING(0 0 1, 1 1 1)'), ST_MakePoint (1, 2, 3)));

--result
st_asewkt
----------
LINESTRING(0 0 1,1 1 1,1 2 3)

参考

ST_RemovePoint , ST_SetPoint

6.5.2. ST_CollectionExtract

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

用法

geometry ST_CollectionExtract(geometry collection);
geometry ST_CollectionExtract(geometry collection, integer type);

描述

根据输入的几何对象集合,返回一个均质化的多重(multi)几何对象。 如果指定了 type 参数,返回的几何对象只包含 type 指定的类型的元素。不属于指定的类型子几何对象会被忽略掉。 如果集合中没有对应类型的子几何对象,该函数会返回空几何对象。 本函数只支持point、line和 polygon类型。类型值和类型名称对应关系如下:1 == POINT, 2 == LINESTRING, 3 == POLYGON 。

样例

-- Constants: 1 == POINT, 2 == LINESTRING, 3 == POLYGONSELECT
SELECT
ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(POINT(0 0)))'),1));

st_astext
---------------
MULTIPOINT(0 0)
(1 row)

SELECT
ST_AsText(ST_CollectionExtract(ST_GeomFromText('GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(LINESTRING(0 0, 1 1)),LINESTRING(2 2, 3 3))'),2));

st_astext
---------------
MULTILINESTRING((0 0, 1 1), (2 2, 3 3))
(1 row)

参考

ST_Multi , ST_Dump , ST_CollectionHomogenize

6.5.3. ST_CollectionHomogenize

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

用法

geometry ST_CollectionHomogenize(geometry collection);

描述

根据给定的geometry collection对象,返回一个最简化的对象。单例对象返回的还是单例对象,同类的collection对象会返回一个合适的multi-type类型

警告

当指定type类型为3的时候,返回值为 multipolygon对象,即使polygon的边界是共享的,在许多情况下,比如将该函数作用于一个ST_Split值对象时候,返回值是一个无效的multipolygon对象

样例

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0))'));

st_astext
------------
POINT(0 0)
(1 row)

SELECT ST_AsText(ST_CollectionHomogenize('GEOMETRYCOLLECTION(POINT(0 0),POINT(1 1))'));

st_astext
---------------------
MULTIPOINT(0 0,1 1)
(1 row)

参考

ST_Multi , ST_CollectionExtract

6.5.4. ST_CurveToLine

ST_CurveToLine — 把一个CIRCULARSTRING/CURVEDPOLYGON对象转换成一个LINESTRING/POLYGON对象

用法

geometry ST_CurveToLine(geometry curveGeom, integer segments_per_qtr_circle);

描述

把一个CIRCULARSTRING对象转换成一个规则的LINESTRING对象,或者把一个CURVEDPOLYGON对象转换成一个规则的POLYGON对象。对于那些不支持CIRCULARSTRING几何类型的平台上,这很有用。

把一个输入的机会对象转换成一个线性的几何对象。每一个Curve几何对象或者片段会被分隔转换成近似线段的处理,默认分隔处理方法是每四分之一圆分成32弧段。

  • 该函数方法实现了规范 OpenGIS Simple Features Implementation Specification for SQL 1.1.

  • 该函数方法实现了规范 SQL/MM specification. SQL-MM 3: 7.1.7

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持CircularString和Curve几何类型对象

样例

SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227
150505,220227 150406)')));
--Result --
LINESTRING(220268 150415,220269.95064912 150416.539364228,220271.823415575
150418.17258804,220273.613787707 150419.895736857,
220275.317452352 150421.704659462,220276.930305234 150423.594998003,220278.448460847
150425.562198489,
220279.868261823 150427.60152176,220281.186287736 150429.708054909,220282.399363347
150431.876723113,
220283.50456625 150434.10230186,220284.499233914 150436.379429536,220285.380970099
150438.702620341,220286.147650624 150441.066277505,
220286.797428488 150443.464706771,220287.328738321 150445.892130112,220287.740300149
150448.342699654,
220288.031122486 150450.810511759,220288.200504713 150453.289621251,220288.248038775
150455.77405574,
220288.173610157 150458.257830005,220287.977398166 150460.734960415,220287.659875492
150463.199479347,
220287.221807076 150465.64544956,220286.664248262 150468.066978495,220285.988542259
150470.458232479,220285.196316903 150472.81345077,
220284.289480732 150475.126959442,220283.270218395 150477.39318505,220282.140985384
150479.606668057,
220280.90450212 150481.762075989,220279.5637474 150483.85421628,220278.12195122
150485.87804878,
220276.582586992 150487.828697901,220274.949363179 150489.701464356,220273.226214362
150491.491836488,
220271.417291757 150493.195501133,220269.526953216 150494.808354014,220267.559752731
150496.326509628,
220265.520429459 150497.746310603,220263.41389631 150499.064336517,220261.245228106
150500.277412127,
220259.019649359 150501.38261503,220256.742521683 150502.377282695,220254.419330878
150503.259018879,
220252.055673714 150504.025699404,220249.657244448 150504.675477269,220247.229821107
150505.206787101,
220244.779251566 150505.61834893,220242.311439461 150505.909171266,220239.832329968
150506.078553494,
220237.347895479 150506.126087555,220234.864121215 150506.051658938,220232.386990804
150505.855446946,
220229.922471872 150505.537924272,220227.47650166 150505.099855856,220225.054972724
150504.542297043,
220222.663718741 150503.86659104,220220.308500449 150503.074365683,
220217.994991777 150502.167529512,220215.72876617 150501.148267175,
220213.515283163 150500.019034164,220211.35987523 150498.7825509,
220209.267734939 150497.441796181,220207.243902439 150496,
220205.293253319 150494.460635772,220203.420486864 150492.82741196,220201.630114732
150491.104263143,
220199.926450087 150489.295340538,220198.313597205 150487.405001997,220196.795441592
150485.437801511,
220195.375640616 150483.39847824,220194.057614703 150481.291945091,220192.844539092
150479.123276887,220191.739336189 150476.89769814,
220190.744668525 150474.620570464,220189.86293234 150472.297379659,220189.096251815
150469.933722495,
220188.446473951 150467.535293229,220187.915164118 150465.107869888,220187.50360229
150462.657300346,
220187.212779953 150460.189488241,220187.043397726 150457.710378749,220186.995863664
150455.22594426,
220187.070292282 150452.742169995,220187.266504273 150450.265039585,220187.584026947
150447.800520653,
220188.022095363 150445.35455044,220188.579654177 150442.933021505,220189.25536018
150440.541767521,
220190.047585536 150438.18654923,220190.954421707 150435.873040558,220191.973684044
150433.60681495,
220193.102917055 150431.393331943,220194.339400319 150429.237924011,220195.680155039
150427.14578372,220197.12195122 150425.12195122,
220198.661315447 150423.171302099,220200.29453926 150421.298535644,220202.017688077
150419.508163512,220203.826610682 150417.804498867,
220205.716949223 150416.191645986,220207.684149708 150414.673490372,220209.72347298
150413.253689397,220211.830006129 150411.935663483,
220213.998674333 150410.722587873,220216.22425308 150409.61738497,220218.501380756
150408.622717305,220220.824571561 150407.740981121,
220223.188228725 150406.974300596,220225.586657991 150406.324522731,220227 150406)


--3d example
SELECT ST_AsEWKT(ST_CurveToLine(ST_GeomFromEWKT('CIRCULARSTRING(220268 150415 1,220227
150505 2,220227 150406 3)')));

Output
------
LINESTRING(220268 150415 1,220269.95064912 150416.539364228 1.0181172856673,
220271.823415575 150418.17258804 1.03623457133459,220273.613787707 150419.895736857
1.05435185700189,....AD INFINITUM ....
220225.586657991 150406.324522731 1.32611114201132,220227 150406 3)

--use only 2 segments to approximate quarter circle
SELECT ST_AsText(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(220268 150415,220227
150505,220227 150406)'),2));

st_astext
------------------------------
LINESTRING(220268 150415,220287.740300149 150448.342699654,220278.12195122 ←
150485.87804878,
220244.779251566 150505.61834893,220207.243902439 150496,220187.50360229 150462.657300346,
220197.12195122 150425.12195122,220227 150406)

参考

ST_LineToCurve

6.5.5. ST_FlipCoordinates

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

用法

geometry ST_FlipCoordinates(geometry geom);

描述

互换一个输入几何对象的X和Y坐标.

  • 该函数支持CircularString和Curve几何类型对象

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持M测量值坐标.

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型.

Example

SELECT ST_AsEWKT(ST_FlipCoordinates(GeomFromEWKT('POINT(1 2)')));

st_asewkt
------------
POINT(2 1)

6.5.6. ST_Force2D

ST_Force2D —将一个几何对象转换成2维中的对象,转换后的对象只有X和Y坐标

用法

geometry ST_Force2D(geometry geomA);

描述

将一个几何对象转换成2维中的对象,转换后的对象只有X和Y坐标。 这个函数对输出必须要与OGC规范兼容的场景很有用(因为当前的OGC规范只规定了2D几何对象)

  • 该函数支持CircularString和Curve几何类型对象

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 这个函数支持3D对象,并且不会删除z坐标

样例

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
-------------------------------------
CIRCULARSTRING(1 1,2 3,4 5,6 7,5 6)

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
----------------------------------------------
POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))

参考

ST_Force3D

6.5.7. ST_Force3D

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

用法

geometry ST_Force3D(geometry geomA, float Zvalue = 0.0);

描述

将几何对象转换成XYZ模式,该函数是ST_Force3DZ别名.如果该几何对象没有Z部分坐标,那么Z值被设置为0

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 该函数支持CircularString和Curve几何类型对象

  • 这个函数支持3D对象,并且不会删除z坐标

样例

--Nothing happens to an already 3D 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
-----------------------------------------------
CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)

SELECT ST_AsEWKT(ST_Force3D('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));

st_asewkt
--------------------------------------------------------------
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))

参考

ST_AsEWKT , ST_Force2D , ST_Force3DM , ST_Force3DZ

6.5.8. ST_Force3DZ

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

用法

geometry ST_Force3DZ(geometry geomA, float Zvalue = 0.0);

描述

将几何对象转换成XYZ模式,该函数是ST_Force3D别名.如果该几何对象没有Z部分坐标,那么Z值被设置为0

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持CircularString和Curve几何类型对象

样例

--Nothing happens to an already 3D 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
-----------------------------------------------
CIRCULARSTRING(1 1 2,2 3 2,4 5 2,6 7 2,5 6 2)

SELECT ST_AsEWKT(ST_Force3DZ('POLYGON((0 0,0 5,5 0,0 0),(1 1,3 1,1 3,1 1))'));

st_asewkt
--------------------------------------------------------------
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))

参考

ST_AsEWKT , ST_Force2D , ST_Force3DM , ST_Force3D

6.5.9. ST_Force3DM

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

用法

geometry ST_Force3DM(geometry geomA, float Mvalue = 0.0);

描述

将几何对象转换为XYM模式. 如果一个几何对象没有M成分,将会把M值设置为0,如果该几何对象有Z参数值,该值会被丢弃

  • 该函数支持CircularString和Curve几何类型对象

样例

--Nothing happens to an already 3D 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
------------------------------------------------
CIRCULARSTRINGM(1 1 0,2 3 0,4 5 0,6 7 0,5 6 0)

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
---------------------------------------------------------------
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))

参考

ST_AsEWKT , ST_Force2D , ST_Force3DM , ST_Force3D , ST_GeomFromEWKT

6.5.10. ST_Force4D

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

用法

geometry ST_Force4D(geometry geomA, float Zvalue = 0.0, float Mvalue = 0.0);

描述

将几何对象转换为XYZM模式表述,如果没有Z和M值,则都用0代替

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持CircularString和Curve几何类型对象

样例

--Nothing happens to an already 3D 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
---------------------------------------------------------
CIRCULARSTRING(1 1 2 0,2 3 2 0,4 5 2 0,6 7 2 0,5 6 2 0)

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
--------------------------------------------------------------------------------------
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))

相关参考

ST_AsEWKT , ST_Force2D , ST_Force3DM , ST_Force3D

6.5.11. ST_ForcePolygonCCW

ST_ForcePolygonCCW — 对于(Multi)Polygon 对象,将其外环顶点按逆时针排列,内环顶点按顺时针排列。非多边形对象保持不变。

用法

geometry ST_ForcePolygonCCW ( geometry geom );

描述

对于(Multi)Polygon 对象,将其外环顶点按逆时针排列,内环顶点按顺时针排列。非多边形对象保持不变。

  • 该函数支持3D对象,并且不会删除z坐标

  • 该函数支持z坐标

参考

ST_ForcePolygonCW , ST_IsPolygonCCW , ST_IsPolygonCW

6.5.12. ST_ForceCollection

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

用法

geometry ST_ForceCollection(geometry geomA);

描述

把geometry对象转换成GEOMETRYCOLLECTION类型对象. 对于简化WKB表述方式很有用

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持CircularString和Curve几何类型对象

样例

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
----------------------------------------------------------------------------------
GEOMETRYCOLLECTION(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)))

SELECT ST_AsText(ST_ForceCollection('CIRCULARSTRING(220227 150406,2220227 150407,220227 150406)'));

st_astext
--------------------------------------------------------------------------------
GEOMETRYCOLLECTION(CIRCULARSTRING(220227 150406,2220227 150407,220227 150406))
(1 row)

-- POLYHEDRAL example --
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
----------------------------------------------------------------------------------
GEOMETRYCOLLECTION(
POLYGON((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),POLYGON((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))
)

相关参考

ST_AsEWKT , ST_Force2D , ST_Force3DM , ST_Force3D , ST_GeomFromEWKT

6.5.13. ST_ForcePolygonCW

ST_ForcePolygonCW — 对于(Multi)Polygon 对象,将其外环顶点按顺时针排列,内环顶点按逆时针排列。非多边形对象保持不变。

用法

geometry ST_ForcePolygonCW ( geometry geom );

描述

对于(Multi)Polygon 对象,将其外环顶点按顺时针排列,内环顶点按逆时针排列。非多边形对象保持不变。

  • 该函数支持3D对象,并且不会删除z坐标

  • 该函数支持z坐标

相关参考

ST_ForcePolygonCCW , ST_IsPolygonCCW , ST_IsPolygonCW

6.5.14. ST_ForceSFS

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

用法

geometry ST_ForceSFS(geometry geomA);
geometry ST_ForceSFS(geometry geomA, text version);

描述

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型.

  • 该函数支持CircularString和Curve几何类型对象

  • 这个函数支持3D对象,并且不会删除z坐标

6.5.15. ST_ForceRHR

ST_ForceRHR —按照右手坐标定则对polygon的顶点进行转向

用法

boolean ST_ForceRHR(geometry g);

描述

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

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持 Polyhedral Surface类型几何对象.

样例

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
--------------------------------------------------------------
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 row)

相关参考

ST_BuildArea , ST_Polygonize , ST_Reverse

6.5.16. ST_ForceCurve

ST_ForceCurve — 把一个geometry对象向上转型为对应的curve类型,如果可以的话

用法

geometry ST_ForceCurve(geometry g);

描述

把一个geometry对象向上转型为对应的curve 类型,如果可以的话: line向上转型后是compoundcurve类型, multiline类型向上转型是multicurve,polygon向上转型是curvepolygon, multipolygon向上转型是multisurface.

  • 这个函数支持3D对象,并且不会删除z坐标。

样例

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
----------------------------------------------------------------------
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 row)

相关参考

ST_LineToCurve

6.5.17. ST_LineMerge

ST_LineMerge — 把一些LineString对象组合在一起,形成一个MULTILINESTRING对象

用法

geometry ST_LineMerge(geometry amultilinestring);

描述

把一些LineString对象组合在一起,形成一个MULTILINESTRING对象.

注意

该函数值支持MULTILINESTRING/LINESTRING类型对象.如果把该函数应用于polygon 或 geometry collection 类型对象,该函数将返回一个空的GEOMETRYCOLLECTION对象

样例

SELECT ST_AsText(ST_LineMerge(
ST_GeomFromText(
   'MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))')
)
);

st_astext
--------------------------------------------------------------------------------------------------
LINESTRING(-29 -27,-30 -29.7,-36 -31,-45 -33,-46 -32) (1 row)

--If can't be merged - original MULTILINESTRING is returned
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
----------------
MULTILINESTRING((-45.2 -33.2,-46 -32),(-29 -27,-30 -29.7,-36 -31,-45 -33))

相关参考

ST_Segmentize , ST_LineSubstring

6.5.18. ST_LineToCurve

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

用法

geometry ST_LineToCurve(geometry geomANoncircular);

描述

把一个LINESTRING/POLYGON 转换成一个CIRCULARSTRING, CURVED POLYGON类型对象。注意:该函数的作用是,转换后的几何对象所需要的点来等价地表示Curve类型对象

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持CircularString和Curve几何类型对象

样例

SELECT ST_AsText(ST_LineToCurve(foo.the_geom))
   As curvedastext,ST_AsText(foo.the_geom) As
non_curvedastext
FROM (SELECT ST_Buffer('POINT(1 3)'::geometry, 3)
   As the_geom) As foo;

curvedatext                                      | non_curvedastext
-------------------------------------------------+----------------------------------------------------------------------------------
CURVEPOLYGON(CIRCULARSTRING(4 3,3.12132034355964 | POLYGON((4 3,3.94235584120969 2.41472903395162,3.77163859753386 1.85194970290473,
0.878679656440359, 1 0,-1.12132034355965         | 3.49440883690764 1.33328930094119,3.12132034355964 0.878679656440359,
5.12132034355963,4 3))                           | 2.66671069905881 0.505591163092366,2.148050297 0.228361402466141, 1.58527096604839
                                                 | 0.0576441587903094,1 0, 0.414729033951621 0.0576441587903077,-0.1480502
                                                 | 0.228361402466137, -0.666710699058802 0.505591163092361,-1.12132034
                                                 | 0.878679656440353,-1.49440883690763 1.33328930094119,-1.771638597 1.85194970290472
                                                 | --ETC--
                                                 | ,3.94235584120969 3.58527096604839,4 3))

--3D example
SELECT ST_AsEWKT(ST_LineToCurve(ST_GeomFromEWKT(
   'LINESTRING(1 2 3, 3 4 8, 5 6 4, 7 8 4, 9 10 4)')));

st_asewkt
------------------------------------
CIRCULARSTRING(1 2 3,5 6 4,9 10 4)

相关参考

ST_CurveToLine

6.5.19. ST_Multi

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

用法

geometry ST_Multi(geometry g1);

描述

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

样例

SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238
2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238
2967416))')));

st_astext
-----------------------------------------------------------------------------------------------
MULTIPOLYGON(((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416, 743238 2967416)))
(1 row)

相关参考

ST_AsText

6.5.20. ST_Normalize

ST_Normalize — 以常规/规范化形式返回一个几何对象。可能会重排多边形环的顶点顺序、环的排列顺序或者Multi几何类型中元素的顺序。

用法

geometry ST_Normalize(geometry geom);

描述

以常规/规范化形式返回一个几何对象。可能会重排多边形环的顶点顺序、环的排列顺序或者Multi几何类型中元素的顺序。

该函数通常只对测试有用(对比期望值与实际得到的值)。

样例

SELECT ST_AsText(ST_Normalize(ST_GeomFromText(
'GEOMETRYCOLLECTION(
   POINT(2 3),
   MULTILINESTRING((0 0, 1 1),(2 2, 3 3)),
   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)
   )
)'
)));
                                                                     st_astext
----------------------------------------------------------------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION(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)),MULTILINESTRING((2 2,3 3),(0 0,1 1)),POINT(2 3))
(1 row)

相关参考

ST_Equals,

6.5.21. ST_QuantizeCoordinates

ST_QuantizeCoordinates — 量化坐标值。

用法

geometry ST_QuantizeCoordinates ( geometry g , int prec_x , int prec_y , int prec_z , int prec_m );

描述

根据给定的小数点之后有效数字的位数,将给定几何对象的坐标值设定到指定位数, 超出指定位数的小数部分都将置为 0。 输出结果的坐标值是对原始坐标值的圆整,有助于提高压缩率。 在使用 KES 的存储压缩特性时, 这可以减少几何类型列的磁盘占用量。 该函数允许针对每个维度设置不同的精度。 负值代表圆整到小数点后的位数, 正值代表圆整到小数点前的位数。(例如: prec_x=-2 代表将 x 坐标圆整到 100 的倍数)。

该函数产生的坐标值是独立于几何对象的,是相对与几何对象的内部坐标系的位置,因此, 拓扑关系不会受影响。 如果指定的有效数字位数高于几何对象本来的精度, 有可能会产生非法的几何对象。

技术背景

KingbaseES GIS 将所有坐标值存储为双精度浮点数,支持最大 15 位有效数字。 但是, KingbaseES GIS 内部也可以使用少于 15 位的有效数字来管理数据。 其中一个例子是 TIGER 数据,它提供了精确到小数点后 6 位的坐标精度(因此只需要 9 位有效数字表示精度, 8 位有效数字表示纬度) 。 尽管有 15 位有效数字可用, 实际上有很大可能性只需要 9 位有效数字就能表示。 一个双精度浮点数使用52bits 表示坐标的有效数字。 而一个 9 位的有效数字只需要 30bits 就能表示,剩余 22bits 没有用到。 我们可以将这 22bits 设置成任何我们需要的值,并且仍能保证圆整后的坐标值不变。 例如:数值 100.123456 可以由临近的 100.123456000000、 100.123456000001 或 100.123456432199 表示。 所有这些值都是等价并合法的, 向函数 ST_AsText(geom, 6) 传入上述任何一个值都会得到相同的结果。 因此我们可以将这些位设置成任何值,ST_QuantizeCoordinates 函数将这些位设为 0。 对于一个长的坐标序列而言, 这将创建一种由连续的 0 构成的块模式, 可以采用 KES 的压缩算法进行更高效的压缩。

注意

只有磁盘上的几何对象的大小会潜在地受到 ST_QuantizeCoordinates 函数的影响。 ST_MemSize 会报告几何对象在内存中的大小,无论磁盘上存储的几何对象是多大, ST_MemSize 返回的值都不变。

样例

SELECT ST_AsText(ST_QuantizeCoordinates('POINT (100.123456 0)'::geometry, 4));
st_astext
-------------------------
POINT(100.123455047607 0)

WITH test AS (SELECT 'POINT (123.456789123456 123.456789123456)'::geometry AS geom)
SELECT
  digits,
  encode(ST_QuantizeCoordinates(geom, digits), 'hex'),
  ST_AsText(ST_QuantizeCoordinates(geom, digits))
FROM test, generate_series(15, -15, -1) AS digits;

digits  |                   encode                   |                st_astext
--------+--------------------------------------------+------------------------------------------
15      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
14      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
13      | 01010000005f9a72083cdd5e405f9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
12      | 01010000005c9a72083cdd5e405c9a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
11      | 0101000000409a72083cdd5e40409a72083cdd5e40 | POINT(123.456789123456 123.456789123456)
10      | 0101000000009a72083cdd5e40009a72083cdd5e40 | POINT(123.456789123455 123.456789123455)
9       | 0101000000009072083cdd5e40009072083cdd5e40 | POINT(123.456789123418 123.456789123418)
8       | 0101000000008072083cdd5e40008072083cdd5e40 | POINT(123.45678912336 123.45678912336)
7       | 0101000000000070083cdd5e40000070083cdd5e40 | POINT(123.456789121032 123.456789121032)
6       | 0101000000000040083cdd5e40000040083cdd5e40 | POINT(123.456789076328 123.456789076328)
5       | 0101000000000000083cdd5e40000000083cdd5e40 | POINT(123.456789016724 123.456789016724)
4       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
3       | 0101000000000000003cdd5e40000000003cdd5e40 | POINT(123.456787109375 123.456787109375)
2       | 01010000000000000038dd5e400000000038dd5e40 | POINT(123.45654296875 123.45654296875)
1       | 01010000000000000000dd5e400000000000dd5e40 | POINT(123.453125 123.453125)
0       | 01010000000000000000dc5e400000000000dc5e40 | POINT(123.4375 123.4375)
-1      | 01010000000000000000c05e400000000000c05e40 | POINT(123 123)
-2      | 01010000000000000000005e400000000000005e40 | POINT(120 120)
-3      | 010100000000000000000058400000000000005840 | POINT(96 96)
-4      | 010100000000000000000058400000000000005840 | POINT(96 96)
-5      | 010100000000000000000058400000000000005840 | POINT(96 96)
-6      | 010100000000000000000058400000000000005840 | POINT(96 96)
-7      | 010100000000000000000058400000000000005840 | POINT(96 96)
-8      | 010100000000000000000058400000000000005840 | POINT(96 96)
-9      | 010100000000000000000058400000000000005840 | POINT(96 96)
-10     | 010100000000000000000058400000000000005840 | POINT(96 96)
-11     | 010100000000000000000058400000000000005840 | POINT(96 96)
-12     | 010100000000000000000058400000000000005840 | POINT(96 96)
-13     | 010100000000000000000058400000000000005840 | POINT(96 96)
-14     | 010100000000000000000058400000000000005840 | POINT(96 96)
-15     | 010100000000000000000058400000000000005840 | POINT(96 96)

相关参考

ST_SnapToGrid

6.5.22. ST_RemovePoint

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

用法

geometry ST_RemovePoint(geometry linestring, integer offset);

描述

从一个LINESTRING对象中移除一个Point点,下标从0开始.这个函数对于把一个封闭的环拆成一个开放的LINESTRING很有用

这个函数支持3D对象,并且不会删除z坐标

样例

--guarantee no LINESTRINGS are closed
--by removing the end point. The below assumes the_geom is of type LINESTRING
UPDATE sometable
SET the_geom = ST_RemovePoint(the_geom, ST_NPoints(the_geom) - 1) FROM sometable
WHERE ST_IsClosed(the_geom) = true;

相关参考

ST_AddPoint , ST_NPoints , ST_NumPoints

6.5.23. ST_RemoveRepeatedPoints

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

用法

geometry ST_RemoveRepeatedPoints(geometry geom, float8 tolerance);

描述

返回一个删除了重复点的几何对象。可以对任何几何类型调用该函数,但实际上只对 (Multi)Line、(Multi)Polygon 和 MultiPoints 进行处理。 由于简化操作是针对每个几何对象来做的,因此可以向该函数传入 GeometryCollection 对象。

如果提供了 tolerance 容差参数,间距在容差范围内顶点会被视为同一个顶点,这是判断重复点的依据之一。

  • 该函数支持 Polyhedral 表面

  • 该函数支持3D对象,并且不会删除z坐标

相关参考

ST_Simplify

6.5.24. ST_Reverse

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

用法

geometry ST_Reverse(geometry g1);

描述

该函数支持任意几何类型对象,按顶点的逆序返回一个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;
--result

line                 | reverseline
---------------------+----------------------
LINESTRING(1 2,1 10) | LINESTRING(1 10,1 2)

6.5.25. ST_Segmentize

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

用法

geometry ST_Segmentize(geometry geom, float max_segment_length);
geometry ST_Segmentize(geography geog, float max_segment_length);

描述

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

  • 该查询 SELECT ST_Segmentize('LINESTRING(1 2, 3 4)',0.5);会返回函数名歧义的错误。需要声明正确的对象类型,例如一个geometry或geography类型的列, 使用函数ST_GeomFromText,ST_GeogFromText 或 SELECT ST_Segmentize('LINESTRING(1 2, 3 4)'::geometry,0.5);查询

注意

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

样例

SELECT ST_AsText(ST_Segmentize(
ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))'),5));

st_astext
-----------------------------------------------------------------------------------------------------
MULTILINESTRING((-29 -27,-30 -29.7,-34.886615700134 -30.758766735029,-36 -31,
-40.8809353009198 -32.0846522890933,-45 -33),(-45 -33,-46 -32))
(1 row)

SELECT ST_AsText(ST_Segmentize(ST_GeomFromText('POLYGON((-29 28, -30 40,-29 28))'),10));

st_astext
------------------------------------------------------------------------------------------------------
POLYGON((-29 28,-29.8304547985374 37.9654575824488,-30 40,-29.1695452014626 30.0345424175512,-29 28))
(1 row)

相关参考

ST_LineSubstring

6.5.26. ST_SetPoint

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

用法

geometry ST_SetPoint(geometry linestring, integer zerobasedposition,
geometry point);

描述

用给定的点替换一个LINESTRING对象的第N个点,下标从0开始. 在一个几何对象的顶点移动时候,为了保持和其他点连接关系,会触发新的连接关系。

  • 这个函数支持3D对象,并且不会删除z坐标

样例

--Change first point in line string from -1 3 to -1 1
SELECT ST_AsText(ST_SetPoint('LINESTRING(-1 2,-1 3)', 0, 'POINT(-1 1)'));

st_astext
-----------------------
LINESTRING(-1 1,-1 3)

---Change last point in a line string (lets play with 3d linestring this time) SELECT ST_AsEWKT(ST_SetPoint(foo.the_geom,
ST_NumPoints(foo.the_geom) - 1, ST_GeomFromEWKT ('POINT(-1 1 3)')))
FROM (SELECT ST_GeomFromEWKT('LINESTRING(-1 2 3,-1 3 4, 5 6 7)') As the_geom) As foo;

st_asewkt
-----------------------
LINESTRING(-1 2 3,-1 3 4,-1 1 3)

相关参考

ST_AddPoint , ST_NPoints , ST_NumPoints , ST_PointN , ST_RemovePoint

6.5.27. ST_ShiftLongitude

ST_ShiftLongitude — 读取每个几何对象的点或顶点的坐标,如果经度小于0,则加上360,如果大于0则不加。该函数返回的经纬度结果在0到360度范围内以便在平面地图内展现

用法

geometry ST_ShiftLongitude(geometry geomA);

描述

读取每个几何对象的点或顶点的坐标,如果经度小于0,则加上360,如果大于0则不加。该函数返回的经纬度结果在0到360度范围内以便在平面地图内展现

注意

该函数只适用于经纬度坐标,比如WGS84参考系的经纬度坐标。

  • 这个函数支持3D对象,并且不会删除z坐标

  • 该函数支持 Polyhedral Surface类型几何对象.

  • 该函数支持 Triangles 和 Triangulated Irregular Network Surfaces (TIN)类型.

样例

--3d points
SELECT ST_AsEWKT(ST_ShiftLongitude(ST_GeomFromEWKT('SRID=4326;POINT(-118.58 38.38 10)')))
As geomA,
ST_AsEWKT(ST_ShiftLongitude(ST_GeomFromEWKT('SRID=4326;POINT(241.42 38.38 10)'))) As
geomB;

geomA                            | geomB
---------------------------------+-----------------------------------
SRID=4326;POINT(241.42 38.38 10) | SRID=4326;POINT(-118.58 38.38 10)

--regular line string
SELECT ST_AsText(ST_ShiftLongitude(ST_GeomFromText('LINESTRING(-118.58 38.38, -118.20 38.45)')));

st_astext
----------
LINESTRING(241.42 38.38,241.8 38.45)

参考

ST_GeomFromEWKT, ST_GeomFromText, ST_AsEWKT

6.5.28. ST_WrapX

ST_WrapX — 从 wrap 指定的 X 坐标处切分输入的几何图形,然后将输出的每个几何图形元素向左(move > 0)或向右(move < 0)移动到 move 参数指定的坐标处,然后再对结果求并集。

用法

geometry ST_WrapX(geometry geom, float8 wrap, float8 move);

描述

从 wrap 指定的 X 坐标处切分输入的几何图形,然后将输出的每个几何图形元素向左(move > 0)或向右(move < 0)移动到 move 参数指定的坐标处,然后再对结果求并集。

注意

该函数可以将用户感兴趣的要素平移到地图中心,避免其从地图边缘回绕到另一边。

  • 该函数支持3D对象,并且不会丢弃 Z 坐标

样例

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=0 to +360
select ST_WrapX(the_geom, 0, 360);

-- Move all components of the given geometries whose bounding box
-- falls completely on the left of x=-30 to +360
select ST_WrapX(the_geom, -30, 360);

参考

ST_ShiftLongitude

6.5.29. ST_SnapToGrid

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

用法

geometry ST_SnapToGrid(geometry geomA, float originX, float originY, float sizeX, float sizeY);geometry ST_SnapToGrid(geometry geomA, float sizeX, float sizeY);
geometry ST_SnapToGrid(geometry geomA, float size);
geometry ST_SnapToGrid(geometry geomA, geometry pointOrigin, float sizeX, float sizeY, float sizeZ, float sizeM);

描述

函数形式1,2,3:把输入的几何对象的所有点重新组成一个以该对象中心点和它的像元大小的栅格。该函数会删除同一个像元上的连续的点,如果该函数输出的点不足以生成给定的几何类型的对象,那么返回值就是NULL。该函数会把输入的几何对象内部折叠的几何对象删除掉。这个函数对降低栅格分辨率很有用。函数形式4:把输入的几何对象的所有点重新组成一个以该对象中心点和它的像元大小的栅格 (第二个参数必须是point类型对象).如果不想把输入对象转变成栅格,把所有维度值都设置为0

注意

该函数返回的geometry对象可能会失去简单性(参考 ST_IsSimple).

样例

--Snap your geometries to a precision grid of 10^-3
UPDATE mytable
SET the_geom = ST_SnapToGrid(the_geom, 0.001);
SELECT ST_AsText(ST_SnapToGrid(
ST_GeomFromText(
   'LINESTRING(1.1115678 2.123, 4.111111 3.2374897, 4.11112 3.23748667) '), 0.001)
);

st_astext
-------------------------------------
LINESTRING(1.112 2.123,4.111 3.237)

--Snap a 4d geometry
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
------------------------------------------------------------------------------
LINESTRING(-1.08 2.12 2.3 1.1144,4.12 3.22 3.1 1.1144,-1.08 2.12 2.3 1.1144)

--With a 4d geometry - the ST_SnapToGrid(geom,size) only touches x and y coords but keeps m and z the same
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
---------------------------------------------------------
LINESTRING(-1.11 2.12 3 2.3456,4.11 3.24 3.1234 1.1111)

参考

ST_Snap , ST_AsEWKT , ST_AsText , ST_GeomFromText , ST_GeomFromEWKT ,ST_Simplify_

6.5.30. ST_Snap

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

用法

geometry ST_Snap(geometry input, geometry reference, float tolerance);

描述

把一个输入的几何对象的片段和顶点切割后移向一个参考类型的几何对象的顶点上,一个最大的切割距离用来控制在片段的哪个位置进行切割。切割一个几何对象并组装成另一个可以提高消除相近边界(消除边界时在节点交集计算时会引起问题)带来的覆盖操作的鲁棒性。太多次的切割会引起生成的拓扑结构无效。因此切割点的位置和切割次数是使用探索法来决定怎样进行安全的切割。然而这会导致有一些切割被省略掉。

注意

返回的几何对象可能会丢失简单性 (参考 ST_IsSimple ) 和有效性(参考 ST_IsValid )。

样例

图 6.5.4 一个没有任何切割的用LINESTRING展示的multipolygon 对象。

图 6.5.5 一个 MULTIPOLYGON 贴靠 LINESTRING 的实例,容差距离为 1.01 。

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
---------------------------------------------------------------------------------
MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125), (51 150,101 150,76 175,51 150)), ((151 100,151 200,176 175,151 100)))

图 6.5.6 一个 MULTIPOLYGON 贴靠 LINESTRING 的实例,容差距离为 1.25 。

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
--------------------------------------------
MULTIPOLYGON(((5 107,26 200,126
200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),
((151 100,151 200,176 175,151 100)))

图 6.5.7 一个 LINESTRING 贴靠 MULTIPOLYGON 的实例,容差距离为 1.01 。

SELECT ST_AsText(
   ST_Snap(line,poly,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
----------------------------------------------------
LINESTRING(5 107,26 125,54 84,101 100)

图 6.5.8 一个 LINESTRING 贴靠 MULTIPOLYGON 的实例,容差距离为 1.25 。

SELECT ST_AsText(
   ST_Snap(line,poly,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
---------------------------------
LINESTRING(26 125,54 84,101 100)

参考

ST_SnapToGrid

6.5.31. ST_SwapOrdinates

ST_SwapOrdinates — 将输入几何对象指定的两个坐标进行交换,然后返回一个新的几何对象。

用法

geometry ST_SwapOrdinates(geometry geom, cstring ords);

描述

将输入几何对象指定的两个坐标进行交换,然后返回一个新的几何对象。

参数 ords 是由2个字符组成的字符串,代表要交换的两个坐标轴的名称。可用的名称包括:x,y,z,m 。

  • 该函数支持 Circular String 和 Curve

  • 该函数支持3D对象,并且不会丢弃 z 坐标。

  • 该函数支持 M 坐标。

  • 该函数支持 Polyhedral 表面。

  • 该函数支持 Triangle 和 TIN。

样例

-- Scale M value by 2
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
--------------------
POINT ZM (0 0 0 4)

参考

ST_FlipCoordinates

原网站

版权声明
本文为[沉舟侧畔千帆过_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/arthemis_14/article/details/126247213