ST_Slope — Retourne la pente (par défaut, en degrés) d'une bande raster d'élévation. Utile pour l'analyse de terrain.
raster ST_Slope(
raster rast, integer nband=1, text pixeltype=32BF, text units=DEGREES, double precision scale=1.0, boolean interpolate_nodata=FALSE)
;
raster ST_Slope(
raster rast, integer nband, raster customextent, text pixeltype=32BF, text units=DEGREES, double precision scale=1.0, boolean interpolate_nodata=FALSE)
;
Retourne la pente (par défaut, en degrés) d'une bande raster d'élévation. Utilise l'algèbre cartographique et applique l'équation de pente aux pixels voisins.
units
indique l'unité de la pente. Les valeurs possibles sont : RADIANS, DEGREES (par défaut), PERCENT.
scale
est le rapport entre les unités verticales et les unités horizontales. Pour Feet:LatLon, utiliser scale=370400, pour Meters:LatLon utiliser scale=111120.
Si interpolate_nodata
est TRUE, les valeurs des pixels NODATA du raster d'entrée seront interpolées à l'aide de ST_InvDistWeight4ma avant de calculer la pente de la surface.
Pour plus d'informations sur la pente, l'exposition et l'ombrage, veuillez consulter ESRI - How hillshade works et ERDAS Field Guide - Slope Images. |
Disponibilité : 2.0.0
Amélioration : 2.1.0 Utilise ST_MapAlgebra() et ajout des paramètres optionnels units
, scale
, interpolate_nodata
Changement : 2.1.0 Dans les versions précédentes, les valeurs retournées étaient en radians. Désormais, les valeurs retournées sont par défaut en degrés
WITH foo AS ( SELECT ST_SetValues( ST_AddBand(ST_MakeEmptyRaster(5, 5, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1], [1, 2, 2, 2, 1], [1, 2, 3, 2, 1], [1, 2, 2, 2, 1], [1, 1, 1, 1, 1] ]::double precision[][] ) AS rast ) SELECT ST_DumpValues(ST_Slope(rast, 1, '32BF')) FROM foo st_dumpvalues ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------------------------------------------------------- (1,"{{10.0249881744385,21.5681285858154,26.5650520324707,21.5681285858154,10.0249881744385},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154}, {26.5650520324707,36.8698959350586,0,36.8698959350586,26.5650520324707},{21.5681285858154,35.2643890380859,36.8698959350586,35.2643890380859,21.5681285858154},{10.0249881744385,21. 5681285858154,26.5650520324707,21.5681285858154,10.0249881744385}}") (1 row)
Exemple complet avec les tuiles d'une couverture. Cette requête ne fonctionne qu'avec PostgreSQL 9.1 ou plus.
WITH foo AS ( SELECT ST_Tile( ST_SetValues( ST_AddBand( ST_MakeEmptyRaster(6, 6, 0, 0, 1, -1, 0, 0, 0), 1, '32BF', 0, -9999 ), 1, 1, 1, ARRAY[ [1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 2, 1], [1, 2, 2, 3, 3, 1], [1, 1, 3, 2, 1, 1], [1, 2, 2, 1, 2, 1], [1, 1, 1, 1, 1, 1] ]::double precision[] ), 2, 2 ) AS rast ) SELECT t1.rast, ST_Slope(ST_Union(t2.rast), 1, t1.rast) FROM foo t1 CROSS JOIN foo t2 WHERE ST_Intersects(t1.rast, t2.rast) GROUP BY t1.rast;