Name

ST_Transform — Reprojette un raster depuis un système de référence spatial vers un autre, en utilisant l'algorithme de rééchantillonnage spécifié. Les algorithmes possibles sont NearestNeighbor (plus proche voisin), Bilinear (Bilinéaire), Cubic (Cubique), CubicSpline (Cubique Spline) ou Lanczos. La valeur par défaut est NearestNeighbor.

Synopsis

raster ST_Transform(raster rast, integer srid, text algorithm=NearestNeighbor, double precision maxerr=0.125, double precision scalex, double precision scaley);

raster ST_Transform(raster rast, integer srid, double precision scalex, double precision scaley, text algorithm=NearestNeighbor, double precision maxerr=0.125);

raster ST_Transform(raster rast, raster alignto, text algorithm=NearestNeighbor, double precision maxerr=0.125);

Description

Reprojette un raster depuis un système de référence spatial vers un autre, en utilisant l'algorithme de rééchantillonnage spécifié. L'algorithme utilisé par défaut est NearestNeighbor si aucun n'est spécifié. Le pourcentage d'erreur maximal est 0.125 si maxerr n'est pas spécifié.

Les algorithmes disponibles sont : 'NearestNeighbor' (plus proche voisin), 'Bilinear' (Bilinéaire), 'Cubic' (Cubique), 'CubicSpline' (Cubique Spline) et 'Lanczos'. Voir GDAL Warp resampling methods pour plus de détails.

ST_Transform est souvent confondu avec ST_SetSRID(). ST_Transform modifie réellement les coordonnées du raster (et rééchantillonne les valeurs des pixels) d'un système de référence spatial vers un autre, alors que ST_SetSRID() change uniquement l'identifiant SRID du raster.

Contrairement aux autres variantes, la variante 3 nécessite un raster de référence alignto. Le raster de sortie sera transformé dans le système de référence spatial (SRID) du raster de référence et sera aligné (ST_SameAlignment = TRUE) avec le raster de référence.

[Note]

Si vous constatez que la transformation ne fonctionne pas correctement, il se peut que vous deviez définir la variable d'environnement PROJSO pour la faire pointer vers le .so ou la .dll de la bibliothèque de projection utilisée par PostGIS. La variable doit simplement contenir le nom du fichier. Par exemple, sur Windows, aller dans Panneau de configuration > Système -> Variables d'environnement et ajouter une variable PROJSO avec comme valeur libproj.dll (si vous utilisez proj 4.6.1). Vous devrez redémarrer le service/daemon PostgreSQL après ce changement.

[Warning]

Lors de la transformation d'une couverture tuilée, vous voudrez en général utiliser un raster de référence pour garantir le même alignement et sans lacunes dans les tuiles, comme le montre l'exemple Variante 3.

Disponibilité : 2.0.0 Nécessite GDAL 1.6.1+

Amélioration : 2.1.0 Ajout de la variante ST_Transform(rast, alignto)

Exemples

SELECT ST_Width(mass_stm) As w_before, ST_Width(wgs_84) As w_after,
  ST_Height(mass_stm) As h_before, ST_Height(wgs_84) As h_after
    FROM
    ( SELECT rast As mass_stm, ST_Transform(rast,4326) As wgs_84
  ,  ST_Transform(rast,4326, 'Bilinear') AS wgs_84_bilin
        FROM aerials.o_2_boston
            WHERE ST_Intersects(rast,
                ST_Transform(ST_MakeEnvelope(-71.128, 42.2392,-71.1277, 42.2397, 4326),26986) )
        LIMIT 1) As foo;

 w_before | w_after | h_before | h_after
----------+---------+----------+---------
      200 |     228 |      200 |     170
                    

mass_stm original

Après transformation en WGS84 long lat (wgs_84)

Après transformation en WGS84 long lat avec interpolation bilinéaire au lieu de NN par défaut (wgs_84_bilin)

Exemples : Variante 3

L'exemple suivant montre la différence entre ST_Transform(raster, srid) et ST_Transform(raster, alignto)

WITH foo AS (
    SELECT 0 AS rid, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 1, 0) AS rast UNION ALL
    SELECT 1, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 2, 0) AS rast UNION ALL
    SELECT 2, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 600000, 100, -100, 0, 0, 2163), 1, '16BUI', 3, 0) AS rast UNION ALL

    SELECT 3, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 10, 0) AS rast UNION ALL
    SELECT 4, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 20, 0) AS rast UNION ALL
    SELECT 5, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599800, 100, -100, 0, 0, 2163), 1, '16BUI', 30, 0) AS rast UNION ALL

    SELECT 6, ST_AddBand(ST_MakeEmptyRaster(2, 2, -500000, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 100, 0) AS rast UNION ALL
    SELECT 7, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499800, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 200, 0) AS rast UNION ALL
    SELECT 8, ST_AddBand(ST_MakeEmptyRaster(2, 2, -499600, 599600, 100, -100, 0, 0, 2163), 1, '16BUI', 300, 0) AS rast
), bar AS (
    SELECT
        ST_Transform(rast, 4269) AS alignto
    FROM foo
    LIMIT 1
), baz AS (
    SELECT
        rid,
        rast,
        ST_Transform(rast, 4269) AS not_aligned,
        ST_Transform(rast, alignto) AS aligned
    FROM foo
    CROSS JOIN bar
)
SELECT
    ST_SameAlignment(rast) AS rast,
    ST_SameAlignment(not_aligned) AS not_aligned,
    ST_SameAlignment(aligned) AS aligned
FROM baz

 rast | not_aligned | aligned
------+-------------+---------
 t    | f           | t
                

Non aligné (not_aligned)

Aligné (aligned)

Voir aussi

ST_Transform, ST_SetSRID