名前

ST_SymDifference — AとBの、インタセクトしていない部分を表現するジオメトリを返します。対称と呼ばれるのは、ST_SymDifference(A,B) = ST_SymDifference(B,A) となるからです。

概要

geometry ST_SymDifference(geometry geomA, geometry geomB);

説明

AとBの、インタセクトしていない部分を表現するジオメトリを返します。対称と呼ばれるのは、ST_SymDifference(A,B) = ST_SymDifference(B,A)となるからです。ST_Union(geomA,geomB) - ST_Intersection(A,B)と見ることができます。

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

[注記]

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

このメソッドはOpenGIS Simple Features Implementation Specification for SQL 1.1.に準拠しています。 s2.1.1.3

このメソッドはSQL/MM仕様に準拠しています。 SQL-MM 3: 5.1.21

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

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

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

-- 2次元では安全です - 2つのラインストリングの対称差
SELECT ST_AsText(
        ST_SymDifference(
                ST_GeomFromText('LINESTRING(50 100, 50 200)'),
                ST_GeomFromText('LINESTRING(50 50, 50 150)')
        )
);

st_astext
---------
MULTILINESTRING((50 150,50 200),(50 50,50 100))
-- 3次元で使用すると、完全には正しいものとはなりません
SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'),
        ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))

st_astext
------------
MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25))
                

関連情報

ST_Difference, ST_Intersection, ST_Union