ST_Clip — Returns the raster clipped by the input geometry. If band number is not specified, all bands are processed. If crop
is not specified or TRUE, the output raster is cropped. If touched
is set to TRUE, then touched pixels are included, otherwise only if the center of the pixel is in the geometry it is included.
raster ST_Clip(
raster rast, integer[] nband, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE, boolean touched=FALSE)
;
raster ST_Clip(
raster rast, integer nband, geometry geom, double precision nodataval, boolean crop=TRUE, boolean touched=FALSE)
;
raster ST_Clip(
raster rast, integer nband, geometry geom, boolean crop, boolean touched=FALSE)
;
raster ST_Clip(
raster rast, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE, boolean touched=FALSE)
;
raster ST_Clip(
raster rast, geometry geom, double precision nodataval, boolean crop=TRUE, boolean touched=FALSE)
;
raster ST_Clip(
raster rast, geometry geom, boolean crop, boolean touched=FALSE)
;
Retourne un raster coupé par la géométrie d'entrée geom
. Si l'index des bandes n'est pas spécifié, toutes les bandes sont traitées.
Les rasters résultant de ST_Clip doivent avoir une valeur de nodata assignée pour les zones découpées, une pour chaque bande. Si aucune valeur n'est fournie et que le raster d'entrée n'a pas de valeur de nodata définie, les valeurs de nodata du raster résultant sont fixées à ST_MinPossibleValue(ST_BandPixelType(rast, band)). Lorsque la taille du tableau nodata inférieure au nombre de bandes, la dernière valeur du tableau est utilisée pour les bandes restantes. Si la taille du tableau nodata est supérieure au nombre de bandes, les valeurs de nodata supplémentaires sont ignorées. Toutes les variantes acceptant un tableau de valeurs de nodata acceptent également une valeur unique qui sera assignée à chaque bande.
Si crop
n'est pas spécifié ou si défini à true, le raster de sortie est recadré à l'intersection des extensions geom
et rast
. Si crop
est défini à false, le nouveau raster a la même étendue que rast
. Si touched
est défini comme vrai, tous les pixels de rast
qui intersectent la géométrie sont sélectionnés.
Le comportement par défaut est touched=false, ce qui sélectionnera uniquement les pixels dont le centre est couvert par la géométrie. |
Amélioration : 3.5.0 - ajout de l'argument touched.
Disponibilité : 2.0.0
Amélioration : 2.1.0 Réécrit en C
Les exemples présentés ici utilisent les données aériennes du Massachusetts disponibles sur le site de MassGIS MassGIS Aerial Orthos.
SELECT ST_Count(rast) AS count_pixels_in_orig, ST_Count(rast_touched) AS all_touched_pixels, ST_Count(rast_not_touched) AS default_clip FROM ST_AsRaster(ST_Letters('R'), scalex = > 1.0, scaley = > -1.0) AS r(rast) INNER JOIN ST_GeomFromText('LINESTRING(0 1, 5 6, 10 10)') AS g(geom) ON ST_Intersects(r.rast,g.geom) , ST_Clip(r.rast, g.geom, touched = > true) AS rast_touched , ST_Clip(r.rast, g.geom, touched = > false) AS rast_not_touched; count_pixels_in_orig | all_touched_pixels | default_clip ----------------------+--------------------+-------------- 2605 | 16 | 10 (1 row)
-- Clip the first band of an aerial tile by a 20 meter buffer. SELECT ST_Clip(rast, 1, ST_Buffer(ST_Centroid(ST_Envelope(rast)),20) ) from aerials.boston WHERE rid = 4;
-- Demonstrate effect of crop on final dimensions of raster -- Note how final extent is clipped to that of the geometry -- if crop = true SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim, ST_XMax(clipper) As xmax_clipper, ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim, ST_XMax(ST_Envelope(rast)) As xmax_rast_orig FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper FROM aerials.boston WHERE rid = 6) As foo; xmax_w_trim | xmax_clipper | xmax_wo_trim | xmax_rast_orig ------------------+------------------+------------------+------------------ 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996
|
|
-- Same example as before, but we need to set crop to false to be able to use ST_AddBand -- because ST_AddBand requires all bands be the same Width and height SELECT ST_AddBand(ST_Clip(rast, 1, ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),false ), ARRAY[ST_Band(rast,2),ST_Band(rast,3)] ) from aerials.boston WHERE rid = 6;
|
|
-- Clip all bands of an aerial tile by a 20 meter buffer. -- Only difference is we don't specify a specific band to clip -- so all bands are clipped SELECT ST_Clip(rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20), false ) from aerials.boston WHERE rid = 4;
|
|