Name

ST_Split — 返回通过将一个几何图形拆分为另一个几何图形而创建的几何图形的集合。

Synopsis

geometry ST_Split(geometry input, geometry blade);

描述

该函数支持按(多)点、(多)线串或(多)多边形边界拆分线串,或按线串拆分(多)多边形。结果几何图形始终是一个集合。

此函数在某种意义上与 ST_Union 。将ST_UNION应用于返回的集合理论上应该会生成原始几何图形(尽管由于数字舍入,情况可能并非如此)。

可用性:2.0.0需要GEOS

增强:2.2.0引入了对由多线、多点或(多)多边形边界拆分直线的支持。

增强:2.5.0引入了对通过多线分割多边形的支持。

[Note]

为了提高ST_Split的健壮性,可以方便地 ST_Snap 将输入的刀片提前使用极低的公差。否则,内部使用的坐标格网可能会导致容差问题,即输入和刀片的坐标不会彼此落在一起,并且输入未被正确分割(请参见 #2192 )。

[Note]

当(多个)多边形作为刀片传递时,其线性组件(边界)用于切割输入。

示例

按线切割的多边形

拆分前

拆分后

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

另请参阅

ST_AsText, ST_BuildArea, ST_CollectionExtract, ST_Dump, ST_GeometryN, ST_Subdivide, ST_Union