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