Name

ST_Split — ジオメトリを分割したジオメトリのコレクションを返します。

Synopsis

geometry ST_Split(geometry input, geometry blade);

説明

この関数は、ラインの(MULTI)POINT, (MULTI)LINEまたは(MULTI)POLYGONの境界による分割に対応しています。返されるジオメトリは常にコレクションです。

この関数はST_Unionの逆と考えられます。理論的には、返されたコレクションにST_Unionを適用すると、常に元のジオメトリが得られます。

Availability: 2.0.0

Changed: 2.2.0 MULTILINESTRING,MULTIPOINT, (MULTI)POLYGONの境界によるラインの分割に対応しました。

[Note]

ST_Splitのロバスト性を改善するには、非常に低い許容誤差を使用する前に、入力ジオメトリを、刃ジオメトリに対してST_Snapすると良いかも知れません。内部で使用されている座標グリッドは、許容誤差に関する問題を引き起こす可能性があります。入力座標と刃がお互いの上に落ちず、入力が正しく分割されない場合があります (#2192を参照して下さい)。

[Note]

(MULTI)ポリゴンを刃として渡すと、線要素 (境界)が入力の分割に使われます。

ラインに切られるポリゴン

分割前

分割後

-- 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_MakePoint(10, 10),ST_MakePoint(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_MakePoint(10, 10),ST_MakePoint(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_Dump, ST_GeometryN, ST_Union, ST_Subdivide