Name

ST_Difference — Berechnet eine Geometrie, die den Teil der Geometrie A darstellt, der die Geometrie B nicht schneidet.

Synopsis

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

Beschreibung

Gibt eine Geometrie zurück, die den Teil der Geometrie A darstellt, der die Geometrie B nicht schneidet. Dies entspricht A - ST_Intersection(A,B). Wenn A vollständig in B enthalten ist, wird eine leere atomare Geometrie des entsprechenden Typs zurückgegeben.

[Note]

Dies ist die einzige Überlagerungsfunktion, bei der die Reihenfolge der Eingabe eine Rolle spielt. ST_Difference(A, B) gibt immer einen Teil von A zurück.

Wenn das optionale Argument gridSize angegeben wird, werden die Eingaben auf ein Gitter der angegebenen Größe gerastert, und die Ergebnispunkte werden auf demselben Gitter berechnet. (Benötigt GEOS-3.9.0 oder höher)

Wird durch das GEOS Modul ausgeführt

Verbessert: 3.1.0 akzeptiert einen gridSize-Parameter.

Erfordert GEOS >= 3.9.0 zur Verwendung des Parameters gridSize.

Diese Methode implementiert die OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3

Diese Methode setzt die SQL/MM-Spezifikation um. SQL-MM 3: 5.1.20

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen. Das Ergebnis wird jedoch nur mit XY berechnet. Die Z-Werte des Ergebnisses werden kopiert, gemittelt oder interpoliert.

Beispiele

Die eingegebenen Zeilenstrings

Die Differenz der beiden Linienstränge

Die Differenz der 2D-Linien.

SELECT ST_AsText(
    ST_Difference(
            'LINESTRING(50 100, 50 200)'::geometry,
            'LINESTRING(50 50, 50 150)'::geometry
        )
    );

st_astext
---------
LINESTRING(50 150,50 200)

Die Differenz der 3D-Punkte.

SELECT ST_AsEWKT( 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
                  ) );

st_asewkt
---------
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)