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)