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