名前

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

この関数は3次元に対応しています。Zインデクスを削除しません。 ただし、差を取ってZインデクスを戻す時に、X Yのみ考慮に入れたように見えます。

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

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

-- 2次元では安全です。これは同じ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)

-- 3次元では正しく動作しません
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