Name

ST_ColorMap — Crée un nouveau raster comprenant jusqu'à quatre bandes 8BUI (niveaux de gris, RGB, RGBA) à partir du raster source et d'une bande spécifiée. Si aucune bande n'est spécifiée, la bande 1 est utilisée.

Synopsis

raster ST_ColorMap(raster rast, integer nband=1, text colormap=grayscale, text method=INTERPOLATE);

raster ST_ColorMap(raster rast, text colormap, text method=INTERPOLATE);

Description

Appliquer une palette de couleurs colormap à la bande nband du raster rast, pour obtenir un nouveau raster comprenant jusqu'à quatre bandes 8BUI. Le nombre de bandes 8BUI dans le nouveau raster est déterminé par le nombre de composantes de couleur définies dans colormap.

Si nband n'est pas spécifié, la bande 1 est utilisée.

colormap peut être un mot-clé d'une palette de couleurs prédéfinie, ou un ensemble de lignes définissant la valeur et les composants de couleur.

Valeurs prédéfinies disponibles pour colormap :

  • grayscale ou greyscale pour un raster à 1 bande 8BUI en nuances de gris.

  • pseudocolor pour un raster à 4 bandes 8BUI (RGBA) avec des couleurs allant du bleu au rouge en passant par le vert.

  • fire pour un raster à 4 bandes 8BUI (RGBA) avec des couleurs allant du noir au rouge en passant par le jaune pâle.

  • bluered pour un raster à 4 bandes 8BUI (RGBA) avec des couleurs allant du bleu au rouge en passant par le blanc pâle.

Vous pouvez passer un ensemble d'entrées (une par ligne) à colormap pour spécifier des palettes de couleurs personnalisées. Chaque entrée se compose généralement de cinq valeurs : la valeur du pixel et les composantes rouge, verte, bleue et alpha correspondantes (composantes de couleur comprises entre 0 et 255). Des valeurs en pourcentage peuvent être utilisées à la place des valeurs en pixels, où 0% et 100% sont les valeurs minimales et maximales trouvées dans la bande raster. Les valeurs peuvent être séparées par des virgules (','), des tabulations, des deux-points (':') et/ou des espaces. La valeur du pixel peut être fixée à nv, null ou nodata pour la valeur NODATA. Un exemple est fourni ci-dessous.

5 0 0 0 255
4 100:50 55 255
1 150,100 150 255
0% 255 255 255 255
nv 0 0 0 0
                    

La syntaxe de colormap est similaire à celle du mode couleur du relief de GDAL gdaldem.

Valeurs disponibles pour method :

  • INTERPOLATE pour utiliser l'interpolation linéaire afin de mélanger les couleurs entre les valeurs de pixels données

  • EXACT pour correspondre strictement aux valeurs des pixels trouvés dans la palette de couleurs. Les pixels dont la valeur ne correspond pas à une entrée de la palette de couleurs seront mis à 0 0 0 0 (RGBA)

  • NEAREST pour utiliser l'entrée de la palette de couleurs dont la valeur est la plus proche de la valeur du pixel

[Note]

Une excellente référence pour les palette de couleurs est ColorBrewer.

[Warning]

Les bandes résultantes du nouveau raster n'auront pas de valeur NODATA définie. Utilisez ST_SetBandNoDataValue pour définir une valeur NODATA si nécessaire.

Disponibilité : 2.1.0

Exemples

Définit une table de bric-à-brac pour jouer

-- setup test raster table --
DROP TABLE IF EXISTS funky_shapes;
CREATE TABLE funky_shapes(rast raster);

INSERT INTO funky_shapes(rast)
WITH ref AS (
    SELECT ST_MakeEmptyRaster( 200, 200, 0, 200, 1, -1, 0, 0) AS rast
)
SELECT
    ST_Union(rast)
FROM (
    SELECT
        ST_AsRaster(
            ST_Rotate(
                ST_Buffer(
                    ST_GeomFromText('LINESTRING(0 2,50 50,150 150,125 50)'),
                    i*2
                ),
                pi() * i * 0.125, ST_Point(50,50)
            ),
            ref.rast, '8BUI'::text, i * 5
        ) AS rast
    FROM ref
    CROSS JOIN generate_series(1, 10, 3) AS i
) AS shapes;
                    
SELECT
    ST_NumBands(rast) As n_orig,
    ST_NumBands(ST_ColorMap(rast,1, 'greyscale')) As ngrey,
    ST_NumBands(ST_ColorMap(rast,1, 'pseudocolor')) As npseudo,
    ST_NumBands(ST_ColorMap(rast,1, 'fire')) As nfire,
    ST_NumBands(ST_ColorMap(rast,1, 'bluered')) As nbluered,
    ST_NumBands(ST_ColorMap(rast,1, '
100% 255   0   0
 80% 160   0   0
 50% 130   0   0
 30%  30   0   0
 20%  60   0   0
  0%   0   0   0
  nv 255 255 255
    ')) As nred
FROM funky_shapes;
                    
n_orig | ngrey | npseudo | nfire | nbluered | nred
--------+-------+---------+-------+----------+------
      1 |     1 |       4 |     4 |        4 |    3
                    

Exemples : Comparaison de différentes palettes de couleurs via ST_AsPNG

SELECT
    ST_AsPNG(rast) As orig_png,
    ST_AsPNG(ST_ColorMap(rast,1,'greyscale')) As grey_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'pseudocolor')) As pseudo_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'nfire')) As fire_png,
    ST_AsPNG(ST_ColorMap(rast,1, 'bluered')) As bluered_png,
    ST_AsPNG(ST_ColorMap(rast,1, '
100% 255   0   0
 80% 160   0   0
 50% 130   0   0
 30%  30   0   0
 20%  60   0   0
  0%   0   0   0
  nv 255 255 255
    ')) As red_png
FROM funky_shapes;
                    

orig_png

grey_png

pseudo_png

fire_png

bluered_png

red_png