Name

ST_Intersection — Gibt Geometry-PixelValue Paare, oder einen Raster aus, der durch die Schnittmenge der beiden Raster bestimmt wird, oder durch die geometrische Verschneidung einer Vektorisierung des Rasters mit einem geometrischen Datentyp.

Synopsis

setof geomval ST_Intersection(geometry geom, raster rast, integer band_num=1);

setof geomval ST_Intersection(raster rast, geometry geom);

setof geomval ST_Intersection(raster rast, integer band, geometry geomin);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, text returnband, double precision[] nodataval);

Beschreibung

Gibt Geometry-PixelValue Paare, oder einen Raster aus, der durch die Schnittmenge der beiden Raster bestimmt wird, oder durch die geometrische Verschneidung einer Vektorisierung des Rasters mit einem geometrischen Datentyp.

Die ersten drei Varianten, die ein "setof geomval" zurückgeben, führen die Berechnungen im Vektorraum aus. Der Raster wird zuerst in eine Menge von "geomval"-Zeilen vektorisiert (mit ST_DumpAsPolygons) und anschließend mit der Geometrie über die PostGIS Funktion ST_Intersection(geometry, geometry) verschnitten. Wenn die verschnittene Geometrie nur aus NODATA Werten besteht, wird eine leere Geometrie zurückgegeben. Diese wird üblicherweise durch die richtige Verwendung von ST_Intersects in der WHERE-Klausel ausgeschlossen.

Sie können auf die Geometriebestandteile und die Werte der erzeugten "geomvals" zugreifen, indem Sie diese mit Klammern versehen und '.geom' oder '.val' am Ende des Ausdrucks hinzufügen; z.B. (ST_Intersection(rast, geom)).geom

Die anderen Varianten, welche einen Raster zurückgeben, führen die Berechnungen im Rasterraum aus. Sie verwenden die Version mit den zwei Rastern von ST_MapAlgebraExpr um die Verschneidung durchzuführen.

Die Ausdehnung des resultierenden Raster entspricht der Ausdehnung des geometrischen Durchschnitts der beiden Raster. Der resultierende Raster enthält die Bänder 'BAND1', 'BAND2' und 'BOTH', gefolgt von dem Parameter returnband. Wenn irgendein Band Bereiche mit NODATA-Werten enthält, so werden diese Bereiche in allen Bändern des resultierenden Raster zu NODATA. Anders ausgedückt, jedes Pixel, das ein Pixel mit NODATA-Wert schneidet wird im Ergebnis selbst zu einem Pixel mit NODATA-Wert.

Raster die aus einer Operation mit ST_Intersection resultieren, müssen in den Bereichen wo sie sich nicht schneiden, einen NODATA-Wert aufweisen. Sie können den NODATA Wert eines jeden resultierenden Bandes festlegen oder ersetzen, indem Sie ein Feld nodataval[] übergeben, das einen oder zwei NODATA Werte - 'BAND1', 'BAND2' oder 'BOTH' - enthält. Der erste Wert in dem Feld ersetzt den NODATA Wert im ersten Band, der zweite Wert ersetzt den NODATA Wert im zweiten Band. Wenn für ein übergebenes Band kein NODATA Wert festgelegt wurde und auch keiner als Feld übergeben wurde, dann wird der Wert mit der Funktion ST_MinPossibleValue ausgewählt. Alle Varianten, die ein Feld mit NODATA-Werten akzeptieren, nehmen auch einen einzelnen Wert entgegen, welcher dann auf alle verlangten Bänder übertragen wird.

Bei sämtlichen Varianten wird Band 1 angenommen, wenn keine Bandnummer angegeben ist. Wenn Sie die Verschneidung zwischen einem Raster und einer Geometrie als Raster ausgegeben haben wollen, sehen Sie bitte ST_Clip.

[Note]

Um über die resultierende Ausdehnung, oder über das was für einen NODATA-Wert zurückgeben werden soll, eine bessere Kontrolle zu haben, können Sie die Variante von ST_MapAlgebraExpr mit den zwei Raster verwenden.

[Note]

Um eine Verschneidung von einem Rasterband mit einer Geometrie durchzuführen, verwenden Sie bitte ST_Clip. ST_Clip arbeitet mit Raster mit mehreren Bändern und gibt kein Band mit der gerasterten Geometrie zurück.

[Note]

ST_Intersection sollte in Verbindung mit ST_Intersects und einem Index auf die Rasterspalte und/oder auf die Geometriespalte angewendet werden.

Enhanced: 2.0.0 - Verschneidungsoperation im Rasterraum eingeführt. In Vorgängerversionen von 2.0.0 wurde lediglich die Verschneidung im Vektorraum unterstützt.

Beispiele: Geometrie, Raster -- das Ergebnis sind "geomvals"

SELECT
    foo.rid,
    foo.gid,
    ST_AsText((foo.geomval).geom) As geomwkt,
    (foo.geomval).val
FROM (
    SELECT
        A.rid,
        g.gid,
        ST_Intersection(A.rast, g.geom) As geomval
    FROM dummy_rast AS A
    CROSS JOIN (
        VALUES
            (1, ST_Point(3427928, 5793243.85) ),
            (2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')),
            (3, ST_GeomFromText('LINESTRING(1 2, 3 4)'))
    ) As g(gid,geom)
    WHERE A.rid = 2
) As foo;

 rid | gid |      geomwkt                                               | val
-----+-----+---------------------------------------------------------------------------------------------
   2 |   1 | POINT(3427928 5793243.85)                                  | 249
   2 |   1 | POINT(3427928 5793243.85)                                  | 253
   2 |   2 | POINT(3427927.85 5793243.75)                               | 254
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 251
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 253
   2 |   2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8)   | 252
   2 |   2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250
   2 |   3 | GEOMETRYCOLLECTION EMPTY