Name

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

Synopsis

geometry ST_Difference(geometry geomA, geometry geomB);

説明

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

[Note]

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

GEOSモジュールによって実現しています。

[Note]

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

This method implements the OpenGIS Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

This method implements the SQL/MM specification. SQL-MM 3: 5.1.20

This function supports 3d and will not drop the z-index. ただし、差を取って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)
                

関連情報

ST_SymDifference