ST_Split — 返回通过将一个几何体分割为另一个几何体而创建的几何体集合。
geometry ST_Split(
geometry input, geometry blade)
;
该函数支持按(多)点、(多)线串或(多)多边形边界分割线串,或按线串分割(多)多边形。 当(多)多边形用作边栏选项卡时,其线性分量(边界)用于分割输入。 结果几何图形始终是一个集合。
该函数在某种意义上与 ST_Union 相反。 将 ST_Union 应用于返回的集合理论上应该会产生原始几何图形(尽管由于数字舍入,情况可能并非完全如此)。
如果由于数值精度问题输入和刀片不相交,则输入可能不会按预期分割。 为了避免这种情况,可能需要首先使用具有较小公差的 ST_Snap 将输入捕捉到刀片。 |
可用性:2.0.0需要GEOS
增强:2.2.0 引入了对通过多线、多点或(多)多边形边界分割线的支持。
增强:2.5.0 引入了通过多线分割多边形的支持。
用一条线分割多边形。
|
|
SELECT ST_AsText( ST_Split( ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50), -- circle ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) -- line )); -- result -- GEOMETRYCOLLECTION( POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..)) )
将一个多线串(MultiLineString)通过一个点分割,其中这个点正好位于两个线串元素上。
|
|
SELECT ST_AsText(ST_Split( 'MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))', ST_Point(30,30))) As split; split ------ GEOMETRYCOLLECTION( LINESTRING(10 10,30 30), LINESTRING(30 30,190 190), LINESTRING(15 15,30 30), LINESTRING(30 30,100 90) )
将 LineString 用点分割,其中该点并不正好位于线上。 显示使用 ST_Snap 将线捕捉到点以允许将其分割。
WITH data AS (SELECT 'LINESTRING(0 0, 100 100)'::geometry AS line, 'POINT(51 50)':: geometry AS point ) SELECT ST_AsText( ST_Split( ST_Snap(line, point, 1), point)) AS snapped_split, ST_AsText( ST_Split(line, point)) AS not_snapped_not_split FROM data; snapped_split | not_snapped_not_split ---------------------------------------------------------------------+--------------------------------------------- GEOMETRYCOLLECTION(LINESTRING(0 0,51 50),LINESTRING(51 50,100 100)) | GEOMETRYCOLLECTION(LINESTRING(0 0,100 100))