ST_Transform — Återprojicerar ett raster i ett känt spatialt referenssystem till ett annat känt spatialt referenssystem med hjälp av en angiven omsamplingsalgoritm. Alternativen är NearestNeighbor, Bilinear, Cubic, CubicSpline, Lanczos med NearestNeighbor som standard.
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)
;
Återprojicerar ett raster i ett känt spatialt referenssystem till ett annat känt spatialt referenssystem med hjälp av en angiven pixelwarpingalgoritm. Använder "NearestNeighbor" om ingen algoritm har angetts och maxerror procent på 0,125 om ingen maxerr har angetts.
Algoritmalternativen är: "NearestNeighbor", "Bilinear", "Cubic", "CubicSpline" och "Lanczos". Hänvisa till: GDAL Warp resampling methods för mer information.
ST_Transform förväxlas ofta med ST_SetSRID(). ST_Transform ändrar faktiskt koordinaterna för ett raster (och omsamplar pixelvärdena) från ett spatialt referenssystem till ett annat, medan ST_SetSRID() helt enkelt ändrar SRID-identifieraren för rastret.
Till skillnad från de andra varianterna kräver variant 3 ett referensraster som alignto
. Det transformerade rastret kommer att transformeras till referensrastrets spatiala referenssystem (SRID) och anpassas (ST_SameAlignment = TRUE) till referensrastret.
![]() |
|
Om du upptäcker att ditt transformationsstöd inte fungerar som det ska kan du behöva ställa in miljövariabeln PROJSO till projektionsbiblioteket .so eller .dll som PostGIS använder. Detta behöver bara ha namnet på filen. Så till exempel på Windows skulle du i Kontrollpanelen -> System -> Miljövariabler lägga till en systemvariabel som heter |
![]() |
|
När du omvandlar en täckning av plattor vill du nästan alltid använda ett referensraster för att säkerställa samma inriktning och inga luckor i dina plattor, vilket visas i exemplet: Variant 3. |
Tillgänglighet: 2.0.0 Kräver GDAL 1.6.1+
Förbättrad: 2.1.0 Tillägg av ST_Transform(rast, alignto)-variant
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
![]() ursprungligt masstillstånd plana meter (mass_stm) |
![]() Efter omvandling till wgs 84 long lat (wgs_84) |
![]() Efter omvandling till wgs 84 long lat med bilineär algoritm istället för NN standard (wgs_84_bilin) |
Följande visar skillnaden mellan att använda ST_Transform(raster, srid) och 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
![]() inte_alignerad
|
![]() i linje med
|