Name

ST_Intersection — Retourne un raster ou un ensemble de paires (géométrie, valeur de pixel) représentant la partie partagée de deux rasters ou l'intersection géométrique d'une vectorisation du raster et d'une géométrie.

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

Description

Retourne un raster ou un ensemble de paires (géométrie, valeur de pixel) représentant la partie partagée de deux rasters ou l'intersection géométrique d'une vectorisation du raster et d'une géométrie.

Les trois premières variantes, qui retournent un ensemble de géométries, fonctionnent dans l'espace vectoriel. Le raster est d'abord vectorisé (via ST_DumpAsPolygons) en un ensemble de lignes geomval, et ces lignes sont ensuite intersectées avec la géométrie via la fonction PostGIS ST_Intersection (geometry, geometry). Les géométries intersectant uniquement une zone de valeur nodata d'un raster renvoient une géométrie vide. Elles sont normalement exclues des résultats par l'utilisation correcte de ST_Intersects dans la clause WHERE.

Vous pouvez accéder aux parties géométrie et valeur de l'ensemble résultant de geomval en les entourant de parenthèses et en ajoutant '.geom' ou '.val' à la fin de l'expression. par exemple (ST_Intersection(rast, geom)).geom

Les autres variantes, qui retournent un raster, fonctionnent dans l'espace raster. Elles utilisent la variante de ST_MapAlgebraExpr utilisant deux rasters pour réaliser l'intersection.

L'étendue du raster résultant correspond à l'intersection géométrique des deux étendues des rasters. Le raster résultant inclut les bandes 'BAND1', 'BAND2' ou 'BOTH', en fonction du paramètre returnband. Les zones de valeurs nodata présentes dans n'importe quelle bande se traduisent par des zones de valeurs nodata dans toutes les bandes du résultat. En d'autres termes, tout pixel croisant un pixel à valeur nodata devient un pixel à valeur nodata dans le résultat.

Les rasters résultant de ST_Intersection doivent avoir une valeur nodata assignée pour les zones non intersectées. Vous pouvez définir ou remplacer la valeur nodata pour toute bande résultante en fournissant un tableau nodataval[] d'une ou deux valeurs nodata selon que vous demandez les bandes 'BAND1', 'BAND2' ou 'BOTH'. La première valeur du tableau remplace la valeur nodata dans la première bande et la deuxième valeur remplace la valeur nodata dans la deuxième bande. Si une bande d'entrée n'a pas de valeur nodata définie et qu'aucune n'est fournie sous forme de tableau, une valeur est choisie via la fonction ST_MinPossibleValue. Toutes les variantes acceptant un tableau de valeurs nodata peuvent également accepter une valeur unique qui sera assignée à chaque bande demandée.

Dans toutes les variantes, si aucune bande n'est spécifiée, la bande 1 est utilisée. Si vous avez besoin d'une intersection entre un raster et une géométrie qui retourne un raster, utilisez ST_Clip.

[Note]

Pour mieux contrôler l'étendue résultante, ou ce qu'il faut retourner lorsqu'une valeur nodata est rencontrée, utilisez la variante à deux rasters de ST_MapAlgebraExpr.

[Note]

Pour calculer l'intersection d'une bande raster avec une géométrie dans l'espace raster, utilisez ST_Clip. ST_Clip travaille sur des bandes rasters multiples et ne retourne pas de bande correspondant à la géométrie rasterisée.

[Note]

ST_Intersection devrait être utilisée conjointement avec ST_Intersects et un index sur la colonne raster et/ou la colonne géométrique.

Amélioration : 2.0.0 - Ajout de l'intersection dans l'espace raster. Dans les versions antérieures à la version 2.0.0, seules les intersections réalisées dans l'espace vectoriel étaient prises en charge.

Exemples : Géométrie, Raster -- avec pour résultat des geomval

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
                    

Voir aussi

geomval, ST_Intersects, ST_MapAlgebraExpr, ST_Clip, ST_AsText