ST_Split — 返回通过将一个几何图形拆分为另一个几何图形而创建的几何图形的集合。
geometry ST_Split(
geometry input, geometry blade)
;
该函数支持按(多)点、(多)线串或(多)多边形边界拆分线串,或按线串拆分(多)多边形。结果几何图形始终是一个集合。
此函数在某种意义上与 ST_Union 。将ST_UNION应用于返回的集合理论上应该会生成原始几何图形(尽管由于数字舍入,情况可能并非如此)。
可用性:2.0.0需要GEOS
增强:2.2.0引入了对由多线、多点或(多)多边形边界拆分直线的支持。
增强:2.5.0引入了对通过多线分割多边形的支持。
![]() | |
为了提高ST_Split的健壮性,可以方便地 ST_Snap 将输入的刀片提前使用极低的公差。否则,内部使用的坐标格网可能会导致容差问题,即输入和刀片的坐标不会彼此落在一起,并且输入未被正确分割(请参见 #2192 )。 |
![]() | |
当(多个)多边形作为刀片传递时,其线性组件(边界)用于切割输入。 |
按线切割的多边形
![]() 拆分前
|
![]() 拆分后
|
-- this creates a geometry collection consisting of the 2 halves of the polygon -- this is similar to the example we demonstrated in ST_BuildArea SELECT ST_Split(circle, line) FROM (SELECT ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) As line, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo; -- result -- GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..))) -- To convert to individual polygons, you can use ST_Dump or ST_GeometryN SELECT ST_AsText((ST_Dump(ST_Split(circle, line))).geom) As wkt FROM (SELECT ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) As line, ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo; -- result -- wkt --------------- POLYGON((150 90,149.039264020162 80.2454838991936,..)) POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 62.2214883490198,53.8060233744357 ..))
按点剪切的多线串
![]() 拆分前
|
![]() 拆分后
|
SELECT ST_AsText(ST_Split(mline, pt)) As wktcut FROM (SELECT ST_GeomFromText('MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))') As mline, ST_Point(30,30) As pt) As foo; wktcut ------ GEOMETRYCOLLECTION( LINESTRING(10 10,30 30), LINESTRING(30 30,190 190), LINESTRING(15 15,30 30), LINESTRING(30 30,100 90) )