名前

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

概要

geometry ST_Split(geometry input, geometry blade);

説明

この関数は、ラインのポイントによる分割、ラインのラインによる分割、ポリゴンのラインによる分割に対応しています。返されるジオメトリは常にコレクションです。

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

初出: 2.0.0

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

分割前

分割後

-- 2つの半分になったポリゴンからなるジオメトリコレクションを生成します
-- 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;
    
-- 結果 --
 GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,..), POLYGON(..)))
 
-- ST_Dumpか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;
    
-- 結果 --
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