ST_Transform reprojette un objet raster d'un système de référence spatiale (SRS) vers un autre en transformant ses coordonnées sous-jacentes et en rééchantillonnant les valeurs des pixels.
Syntaxe
raster ST_Transform(raster rast,
integer outSrid,
cstring processExpr default '',
cstring storageOption default '')
Paramètres
| Paramètre | Description |
|---|---|
rast |
Objet raster source à reprojeter. |
outSrid |
SRID du système de référence spatiale cible. Doit correspondre à un SRID valide de la table spatial_ref_sys. |
processExpr |
Chaîne JSON contrôlant le rééchantillonnage des pixels et la gestion des valeurs nodata. |
storageOption |
Chaîne JSON définissant le mode de stockage du raster de sortie. |
Champs de processExpr
| Champ | Type | Valeur par défaut | Description |
|---|---|---|---|
resample |
Texte | Near |
Algorithme de rééchantillonnage. Valeurs valides : Near, Average, Cubic, Bilinear. |
nodata |
Booléen | false |
Indique si les valeurs nodata du raster source sont considérées comme valides. Si la valeur est true, les pixels contenant des valeurs nodata ne sont pas rééchantillonnés. Si la valeur est false, ces pixels sont rééchantillonnés. |
nodataValue |
float8 ou float8[] | NULL |
Valeur(s) nodata à attribuer aux bandes du raster de sortie. Spécifiez une valeur unique pour l'appliquer à toutes les bandes, ou un tableau contenant une valeur par bande. |
Définissez avec soin les paramètres nodata et nodataValue. Si le raster source ne contient aucun pixel avec des valeurs nodata, définissez nodata sur false et omettez nodataValue. Dans le cas contraire, des artefacts visuels peuvent apparaître dans l'image.
Champs de storageOption
| Champ | Type | Valeur par défaut | Description |
|---|---|---|---|
chunking |
Booléen | Identique à la source | Indique si le raster de sortie doit être stocké sous forme de blocs (chunks). |
chunkdim |
Chaîne | Identique à la source | Dimensions des blocs. Ce paramètre n'est pris en compte que si chunking est défini sur true. |
chunktable |
Chaîne | '' (chaîne vide) |
Nom de la table de blocs pour un stockage permanent. Si ce champ est vide ou défini sur NULL, une table de blocs temporaire avec un nom aléatoire est créée et supprimée à la fin de la session. Pour conserver le raster de sortie, spécifiez un nom de table. |
compression |
Chaîne | Identique à la source | Format de compression. Valeurs valides : None, JPEG, Zlib, PNG, LZO, LZ4. |
quality |
Entier | Identique à la source | Qualité de l'image. Ce paramètre n'est effectif qu'avec le format JPEG. |
interleaving |
Chaîne | Identique à la source | Type d'entrelacement. Valeurs valides : bip (band interleaved by pixel, BIP), bil (band interleaved by line, BIL), bsq (band sequential, BSQ). |
endian |
Chaîne | Identique à la source | Ordre des octets. Utilisez NDR pour le little endian ; utilisez XDR pour le big endian. |
Exemples
Les exemples suivants utilisent un fichier GeoTIFF chargé dans une table source.
CREATE TABLE IF NOT EXISTS datasource_table (id integer, rast raster);
INSERT INTO datasource_table VALUES (
1,
ST_ImportFrom('rbt', '$(RAST_DATA_DIR)/512_512_1_bsq_8u_geo.tif', '{}')
);
Persistance de la sortie dans une table de blocs permanente
Spécifiez un nom pour le paramètre chunktable afin de sauvegarder le raster reprojeté entre les sessions.
Sans valeur nodata :
CREATE TABLE rat_transform_result (id integer, rast raster);
INSERT INTO rat_transform_result (id, rast)
SELECT
10,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":false}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq","chunktable":"result_rbt"}'
)
FROM datasource_table
WHERE id = 1;
Avec une seule valeur nodata (les pixels ayant des valeurs nodata sont rééchantillonnés) :
INSERT INTO rat_transform_result (id, rast)
SELECT
11,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":true,"nodatavalue":255}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq","chunktable":"result_rbt"}'
)
FROM datasource_table
WHERE id = 1;
Avec des valeurs nodata par bande :
INSERT INTO rat_transform_result (id, rast)
SELECT
12,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":false,"nodatavalue":[255,255,255]}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq","chunktable":"result_rbt"}'
)
FROM datasource_table
WHERE id = 1;
Stockage de la sortie dans une table de blocs temporaire
Omettez le paramètre chunktable pour écrire la sortie dans une table temporaire limitée à la session. Cette table étant supprimée à la fin de la session, utilisez cette méthode uniquement pour des calculs intermédiaires.
CREATE TEMP TABLE rat_transform_result_temp (id integer, rast raster);
INSERT INTO rat_transform_result_temp (id, rast)
SELECT
1,
ST_Transform(
rast,
32652,
'{"resample":"Near","nodata":false,"nodataValue":[255,255,255]}',
'{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq"}'
)
FROM datasource_table
WHERE id = 1;