Fusionne plusieurs objets raster en un seul objet raster en appliquant des expressions algébriques au niveau des pixels dans le langage Algebra Computing Language.
Syntaxe
raster ST_MapAlgebra(raster[] rasters,
cstring algebraExpr DEFAULT NULL,
cstring storageOption DEFAULT '')
Paramètres
| Paramètre | Description |
|---|---|
rasters |
Tableau d'objets raster source à traiter. |
algebraExpr |
Tableau JSON qui définit les expressions algébriques à appliquer. Chaque objet JSON du tableau génère une bande de sortie. |
storageOption |
Objet JSON qui contrôle la manière dont l'objet raster de sortie est stocké. |
La fonction exige uniquement que tous les objets raster source partagent la même unité de mesure pour la width et la height. Elle ne valide pas les systèmes de référence spatiale ni les résolutions. Si vos rasters source utilisent des unités différentes, utilisez ST_Transform , ST_Resize et ST_Clip pour les normaliser au préalable.
Paramètre algebraExpr
Le paramètre algebraExpr accepte un tableau JSON. Chaque objet du tableau définit une bande de sortie.
Mots-clés d'expression
Utilisez les mots-clés suivants pour faire référence aux valeurs et positions des pixels au sein d'une expression :
| Mot-clé | Description |
|---|---|
[r, b] |
Valeur du pixel à la bande b du raster r. Les index r et b sont basés sur zéro (de 0 à n−1). |
x |
Index de colonne basé sur zéro du pixel actuel. |
y |
Index de ligne basé sur zéro du pixel actuel. |
Champs JSON
| Champ | Type | Valeur par défaut | Description |
|---|---|---|---|
algebraExpr |
String | — | Expression algébrique à évaluer pour chaque pixel. |
nodata |
Boolean | false |
Contrôle la gestion des pixels ayant une valeur nodata. Définissez ce paramètre sur true pour ignorer ces pixels ; leur valeur de sortie est alors définie sur nodataValue. Définissez-le sur false pour les inclure dans le calcul. |
nodataValue |
float8 | 0 |
Valeur écrite dans les pixels de sortie ignorés lorsque nodata est défini sur true. |
Opérateurs et fonctions pris en charge
| Type | Opérateurs / fonctions | Notes | ||
|---|---|---|---|---|
| Arithmétique | +, -, *, /, % (reste), ** (puissance) |
|||
| Bitwise | <<, >>, &, ` |
`, ^ |
||
| Logique | <, >, ==, !=, <=, >=, &&, ` |
`, |
||
| Fonctions mathématiques | abs, sqrt, exp, log, ln, sin, cos, tan, sinh, cosh, tanh, arcsin, arccos, arctan, ceil, floor, round |
Spécifiez une seule fonction mathématique. | ||
| Fonctions statistiques | min, max, sum, mean, majority, minority, std, median, range, variety |
Spécifiez deux fonctions statistiques ou plus. |
Exemples algebraExpr
Exemple 1 : Combinaison linéaire de bandes (bande de sortie unique)
Génère un raster à bande unique. L'expression combine la bande 0 de raster[0] avec les bandes 0 et 1 de raster[1] :
[
{
"expr": "([0,0] + [1,0] * [1,1])",
"nodata": true,
"nodataValue": 999
}
]
Exemple 2 : Écart type entre les bandes
Calcule l'écart type de trois bandes issues du même objet raster :
[
{
"expr": "(std([0,0],[0,1],[0,2]))",
"nodata": true,
"nodataValue": 999
}
]
Exemple 3 : Sortie multibande avec expressions par bande
Génère un raster à trois bandes. Chaque objet JSON pilote une bande de sortie — respectivement le minimum, le maximum et la moyenne de trois bandes source :
[
{
"expr": "(min([0,0],[0,1],[0,2]))",
"nodata": true,
"nodataValue": 999
},
{
"expr": "(max([0,0],[0,1],[0,2]))",
"nodata": true,
"nodataValue": 999
},
{
"expr": "(mean([0,0],[0,1],[0,2]))",
"nodata": true,
"nodataValue": 999
}
]
Paramètre storageOption
Le paramètre storageOption accepte un objet JSON contenant les champs suivants. Tous les champs sont facultatifs et leurs valeurs par défaut correspondent aux paramètres des objets raster source.
| Champ | Type | Valeur par défaut | Description |
|---|---|---|---|
chunking |
Boolean | Identique à la source | Indique si la sortie doit être stockée sous forme de chunks. |
chunkdim |
String | Identique à la source | Dimensions des chunks. Prend effet uniquement lorsque chunking est défini sur true. |
chunktable |
String | '' (vide) |
Nom de la table de chunks. Par défaut, une table temporaire portant un nom aléatoire est créée et n'est valide que pour la session en cours. Spécifiez un nom pour rendre l'objet raster de sortie permanent. |
compression |
String | Identique à la source | Format de compression. Valeurs valides : None, JPEG, Zlib, PNG, LZO, LZ4. |
quality |
Integer | Identique à la source | Qualité de l'image. Prend effet uniquement lorsque compression est défini sur JPEG. |
interleaving |
String | Identique à la source | Format d'entrelacement. Valeurs valides : bip (band interleaved by pixel, BIP), bil (band interleaved by line, BIL), bsq (band sequential, BSQ). |
endian |
String | Identique à la source | Ordre des octets. NDR pour little-endian ; XDR pour big-endian. |
Exemple
L'exemple suivant lit des rasters à partir de deux tables, applique une expression linéaire de bande et écrit le résultat dans une table de chunks permanente.
-- Create a permanent chunk table to hold the output raster object.
CREATE TABLE rast_mapalgebra_result(id integer, rast raster);
-- Merge rasters from t1 and t2, then write the result to the permanent chunk table.
-- Expression: band[0] of raster[0] + 0.5 × band[0] of raster[1] − band[1] of raster[1]
WITH foo AS (
SELECT 1 AS rid, rast AS rast FROM t1 WHERE id = 1
UNION ALL
SELECT 2 AS rid, rast AS rast FROM t2 WHERE id = 2
)
INSERT INTO rast_mapalgebra_result
SELECT 1, ST_MapAlgebra(
ARRAY(SELECT rast FROM foo ORDER BY rid),
'[{"expr":"([0,0] + 0.5 * [1,0] - ([1,1])","nodata": true, "nodataValue":999}]',
'{"chunktable":"algebra_rbt"}' -- Store output in the permanent chunk table "algebra_rbt"
);