ST_Transform — 使用指定的重采样算法将已知空间参考系中的栅格重投影到另一个已知空间参考系。选项包括NearestNeighbor、双线性、立方、三次样条、默认为NearestNeighbor的Lanczos。
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
)
;
使用指定的像素扭曲算法将已知空间参考系统中的栅格重新投影到另一个已知空间参考系统。如果未指定算法,则使用‘NearestNeighbor’,如果未指定MAXERR,则使用最大错误百分比0.125。
算法选项有:‘NearestNeighbor’、‘Billinine’、‘Cubic’、‘Cubi Spline’和‘Lanczos’。请参阅: GDAL扭曲重采样方法 了解更多详细信息。
ST_Transform经常与ST_SetSRID()混淆。ST_Transform实际上将栅格的坐标从一个空间参考系更改为另一个空间参考系(并对像素值进行重采样),而ST_SetSRID()只是更改了栅格的SRID标识符。
与其他变体不同,变体3需要参考栅格作为
alignto
。变换后的栅格将被变换到参考栅格的空间参考系(SRID),并与参考栅格对齐(ST_SameAlign=TRUE)。
![]() |
|
如果您发现您的转换支持工作不正常,您可能需要将环境变量PROJSO设置为您的PostGIS正在使用的.so或.dll投影库。这只需要有文件的名称。例如在Windows上,您可以在控制面板->系统->环境变量中添加一个名为的系统变量
|
![]() |
|
变换瓷砖覆盖范围时,您几乎总是希望使用参考栅格来确保瓷砖中的对齐方式相同且没有间隙,如示例:变体3中所示。 |
可用性:2.0.0需要GDAL 1.6.1+
增强:2.1.0添加ST_Transform(Rast,alignto)变量
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) |
![]() 转换为WGS 84 Long Late(WGS_84)后 |
![]() 使用双线性算法而不是NN默认(WGS_84_BILIN)转换为WGS 84 Long Long之后 |
下面显示了使用ST_Transform(栅格、SRID)和ST_Transform(栅格、对齐)之间的区别
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
![]() not_aligned
|
![]() 对齐
|