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.

Übersicht

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);

Description

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.

[Anmerkung]

For more control over the result extent or NODATA handling, use the two-raster variant of ST_MapAlgebraExpr. To compute a raster-space intersection with a geometry, use ST_Clip.

Use this function together with ST_Intersects and an index on the raster or geometry column when filtering table data.

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"

Code
SELECT
    foo.rid,
    foo.gid,
    GeometryType((foo.geomval).geom) AS geom_type,
    (foo.geomval).val AS value
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, 'LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)'::geometry),
            (3, 'LINESTRING(1 2,3 4)'::geometry)
    ) As g(gid, geom)
    WHERE A.rid = 2
) AS foo;
Ausgabe von Rastern
rid | gid |      geom_type       | value
-----+-----+----------------------+-------
   2 |   1 | POINT                |   249
   2 |   1 | POINT                |   253
   2 |   2 | POINT                |   254
   2 |   2 | POINT                |   251
   2 |   2 | POINT                |   253
   2 |   2 | LINESTRING           |   252
   2 |   2 | MULTILINESTRING      |   250
   2 |   3 | GEOMETRYCOLLECTION   |

The same line example rendered in a common coordinate frame. The raster footprint and complete input line remain visible behind the returned intersection pieces.

Code
WITH source AS (
    SELECT
        rast,
        ST_GeomFromText(
            'LINESTRING(3427927.85 5793243.75,'
            '3427927.8 5793243.75,3427927.8 5793243.8)'
        ) AS input_geometry
    FROM dummy_rast
    WHERE rid = 2
), intersection AS (
SELECT
    rast,
    input_geometry,
    ST_Collect(gv.geom) AS result_geometry
FROM source
CROSS JOIN LATERAL ST_Intersection(rast, input_geometry) AS gv
GROUP BY rast, input_geometry
), layers AS (
    SELECT
        'raster' AS title,
        ST_Translate(ST_Envelope(rast), -3427927.75, -5793243.75) AS geom
    FROM intersection
    UNION ALL
    SELECT
        'input',
        ST_Translate(input_geometry, -3427927.75, -5793243.75)
    FROM intersection
    UNION ALL
    SELECT
        'intersection',
        ST_Translate(result_geometry, -3427927.75, -5793243.75)
    FROM intersection
)
SELECT title, geom AS geom
FROM layers
ORDER BY CASE title
    WHEN 'raster' THEN 1
    WHEN 'input' THEN 2
    ELSE 3
END;
Ausgabe von Rastern
title        | geom
--------------+-------------------------------------------------------------
 raster       | POLYGON((0 0,0 0.25,0.25 0.25,0.25 0,0 0))
 input        | LINESTRING(0.1 0,0.05 0,0.05 0.05)
 intersection | GEOMETRYCOLLECTION
Figure
Geometry figure for visual-rt-st-intersection-02