名前

ST_Difference — ジオメトリBにインタセクトしないジオメトリAの部分を表現するジオメトリを返します.

概要

geometry ST_Difference(geometry geomA, geometry geomB);

説明

ジオメトリBにインタセクトしないジオメトリAの部分を表現するジオメトリを返します.これは,ジオメトリA-ST_Intersection(A,B)と見ることができます.Aが完全にBに含まれる場合に,空ジオメトリコレクションが返されます.

[注意]

順序の問題に注意が必要です.B-Aでは常にBの部分が返ります.

GEOSモジュールで実現しています

[注意]

ジオメトリコレクションを引数として呼ばないでください.

このメソッドは OpenGIS Simple Features Implementation Specification for SQL 1.1.を実装するものです. s2.1.1.3

このメソッドはSQL/MM仕様の実装です. SQL-MM 3: 5.1.20

この関数は三次元をサポートします.Zインデクスを削除しません. ただし,差を取ってZインデクスを戻す時に,X Yのみ考慮に入れたように見えます.

元のラインストリングと一緒に表示

二つのラインストリングの差

--二次元では安全です.これは同じST_SymDifferenceで示したのと同じジオメトリです.
SELECT ST_AsText(
	ST_Difference(
			ST_GeomFromText('LINESTRING(50 100, 50 200)'),
			ST_GeomFromText('LINESTRING(50 50, 50 150)')
		)
	);

st_astext
---------
LINESTRING(50 150,50 200)

--三次元では正しく動作しない
SELECT ST_AsEWKT(ST_Difference(ST_GeomFromEWKT('MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)'), ST_GeomFromEWKT('POINT(-118.614 38.281 5)')));
st_asewkt
---------
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)
		

関連情報

ST_SymDifference