名前

ST_Difference — ジオメトリー B とインタセクトしていないジオメトリー A の一部を表現するジオメトリーを計算します。

概要

geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1);

説明

ジオメトリー B とインタセクトしていないジオメトリー A の一部を表現するジオメトリーを計算します。これはA - ST_Intersection(A,B)と同じです。A が完全に B に包含されている場合には、適切なタイプの空のジオメトリーが返されます。

[注記]

これは、重ね合わせ関数では唯一の入力順序を気にしなければならない関数です。ST_Difference(A, B) は常に A の一部を返します。

任意パラメーター gridSize が与えらえれると (GEOS-3.9.0 が必要です)、全ての結果の頂点が指定サイズのスナップ用グリッドに落ちることが保証されます。グリッド上で行われる処理は、グリッドに揃える際に意図しない小さな変更が発生する可能性があることに注意して下さい。ST_ReducePrecision を参照して下さい。

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

Enhanced: 3.1.0 gridSize パラメータを受け付けるようになりました。

gridSize パラメータを使うには GEOS 3.9.0以上が必要です。

このメソッドはOGC Simple Features Implementation Specification for SQL 1.1の実装です。 s2.1.1.3

このメソッドはSQL/MM仕様の実装です。 SQL-MM 3: 5.1.20

この関数は3次元に対応し、Z値を削除しません。 ただし、結果は XY のみを使用して計算されます。結果の Z 値は複写するか、平均値になるか、補間されます。

次では、2次元ラインストリングの差を求めます。

コード
SELECT ST_Difference('LINESTRING(50 100,50 200)'::geometry,
        'LINESTRING(50 50,50 150)'::geometry
    );
出力
LINESTRING(50 150,50 200)
Geometry figure for visual-st-difference-01

次では、3次元ラインストリングの差を求めます。

コード
SELECT ST_Difference('MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)' :: geometry,
 'POINT(-118.614 38.281 5)' :: geometry
);
出力
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)
Geometry figure for visual-st-difference-02