名稱

ST_Transform — 使用指定的重採樣演算法,將已知空間參考系統中的網格重新投影到另一個已知的空間參考系統。選項有 NearestNeighbor、Bilinear、Cubic、CubicSpline、Lanczos,預設為 NearestNeighbor。

概要

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 的 maxerror 百分比。

演算法選項有:'NearestNeighbor'、'Bilinear'、'Cubic'、'CubicSpline' 和 'Lanczos'。請參閱:GDAL Warp 重採樣方法 以了解更多詳細資訊。

ST_Transform 經常與 ST_SetSRID() 混淆。ST_Transform 實際上是將網格的坐標(並重新取樣像素值)從一個空間參考系統更改為另一個空間參考系統,而 ST_SetSRID() 只是更改網格的 SRID 識別符號。

與其他變體不同,變體 3 需要一個參考網格作為 alignto。轉換後的網格將被轉換為參考網格的空間參考系統 (SRID),並且與參考網格對齊 (ST_SameAlignment = TRUE)。

[Note]

如果您發現您的轉換支援無法正常運作,您可能需要將環境變數 PROJSO 設定為您的 PostGIS 使用的 .so 或 .dll 投影庫。這只需要檔案的名稱。因此,例如在 Windows 上,您可以在控制台 -> 系統 -> 環境變數中新增一個名為 PROJSO 的系統變數,並將其設定為 libproj.dll (如果您使用的是 proj 4.6.1)。在此變更後,您必須重新啟動 PostgreSQL 服務/守護程式。

[Warning]

在轉換瓦片覆蓋時,您幾乎總是希望使用參考網格,以確保瓦片對齊且沒有間隙,如範例中所示:變體 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 經緯度(wgs_84)之後

使用雙線性演算法而不是 NN 預設值轉換為 wgs 84 經緯度之後 (wgs_84_bilin)

範例:變體 3

以下顯示使用 ST_Transform(raster, srid) 和 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
                

未對齊

已對齊