Name

ST_Difference — Beräknar en geometri som representerar den del av geometri A som inte skär geometri B.

Synopsis

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

Beskrivning

Returnerar en geometri som representerar den del av geometri A som inte skär geometri B. Detta är ekvivalent med A - ST_Intersection(A,B). Om A är helt innesluten i B returneras en tom atomgeometri av lämplig typ.

[Note]

Detta är den enda överlagringsfunktionen där inmatningsordningen har betydelse. ST_Difference(A, B) returnerar alltid en del av A.

Om den valfria parametern gridSize anges (GEOS-3.9.0 eller senare krävs) garanteras att alla resultatpunkter hamnar i ett rutnät med den angivna storleken. För att operationen ska ge förutsägbara resultat måste alla inmatade hörn redan falla på det angivna rutnätet, se ST_ReducePrecision.

Utförs av GEOS-modulen

Förbättrad: 3.1.0 accepterar en gridSize-parameter.

Kräver GEOS >= 3.9.0 för att använda parametern gridSize.

Denna metod implementerar OGC:s implementeringsspecifikation för enkla funktioner för SQL 1.1. s2.1.1.3

Denna metod implementerar SQL/MM-specifikationen. SQL-MM 3: 5.1.20

Denna funktion stöder 3d och kommer inte att tappa z-index. Resultatet beräknas dock endast med hjälp av XY. De resulterande Z-värdena kopieras, medelvärdesbildas eller interpoleras.

Exempel

De inmatade linestrings

Skillnaden mellan de två linestrings

Skillnaden mellan 2D-linestrings.

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

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

Skillnaden mellan 3D-punkter.

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)