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
この関数は三次元をサポートします.Zインデクスを削除しません. ただし,差をとってZインデクスを戻す時,X Yのみを考慮に入れているように見えます.
|
![]() 元のラインストリングと一緒に表示
|
![]() 二つのラインストリングの対称差
|
--Safe for 2d - symmetric difference of 2 linestrings
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))
--When used in 3d doesn't quite do the right thing
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))