將源柵格對象進行投影變換,返回變換后的柵格對象。

語法

raster ST_Transform(raster rast,
           integer outSrid,
           cstring processexpr default '',
           cstring storageOption default '')

參數(shù)

參數(shù)名稱 描述
rast 需要投影變換的raster對象。
outSrid 輸出的影像的空間參考值,必須為有效的sird值(可以在表spatial_ref_sys查詢到)。
processExpr JSON字符串,指定重采樣的方式以及nodata處理方式。
storageOption 返回結果的存儲選項,為JSON字符串。

processExpr為JSON字符串數(shù)組,每個子JSON對象指定參數(shù)如下。

參數(shù)名稱 描述 類型 默認值 說明
resample 重采樣方式。 text 'Near' 柵格重采樣方式,支持'Near'、'Average'、'Cubic'和'Bilinear'四種。
nodata 源影像的nodata值是否有效。 bool false
  • 如果為true,表示源影像的nodata是有效的,像元值為nodata的像元不參與重采樣計算。
  • 如果為false,表示源影像的nodata是無效的,像元值為nodata的像元參與重采樣計算。
nodataValue 按波段指定新的nodata值。

float8

float8[]

NULL nodataValue可指定為單個值或數(shù)組。
  • 如果指定為單個值,表示輸出柵格對象的所有波段使用同一個nodata值。
  • 如果指定為數(shù)組,則數(shù)組元素個數(shù)必須與柵格的波段數(shù)一致。
說明 nodata與nodatavalue參數(shù)需謹慎使用,如果源柵格沒有nodata,建議nodata設置為false,同時不需要指定nodatavalue,否則會出現(xiàn)結果影像失真的情況。

storageOption參數(shù)如下。

參數(shù)名稱 描述 類型 默認值 說明
chunking 是否使用分塊存儲。 boolean 和原始raster一致 -
chunkdim 分塊的維度信息。 string 和原始raster一致 在chunking=true時才有效。
chunktable 分塊表名稱。 string '' 如果傳入''值,則會產(chǎn)生一個隨機表名臨時塊表用于存放數(shù)據(jù)。 該臨時表只在當前會話中有效。如果需要保持一個可訪問的裁剪對象,則需要指定塊表名稱。
compression 壓縮算法類型。 string 和原始raster一致 目前只支持none、jpeg、zlib、png、lzo和lz4。
quality 壓縮質(zhì)量。 integer 和原始raster一致 只針對jpeg壓縮算法。
interleaving 交錯方式。 string 和原始raster一致 必須是以下一種:
  • bip:Band interleaved by pixel
  • bil:Band nterleaved by pixel
  • bsq:Band Sequential
endian 字節(jié)序。 string 和原始raster一致 必須為以下其中之一:
  • NDR:Little endian
  • XDR:Big endian
說明 如果chunktable傳入NULL或者'',則會在當前session中創(chuàng)建一個隨機表名的臨時表用于存放轉(zhuǎn)換后的raster對象,該臨時表只在當前會話中有效,會話結束臨時表也隨即刪除。如果需要將轉(zhuǎn)換的raster對象保存下來,則chunktable選項需要指定具體表名稱。

示例

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', '{}'));

----------------------------------------------------
-- 方式一:指定chunkTable名稱,將轉(zhuǎn)換結果持續(xù)化存儲
----------------------------------------------------
CREATE TABLE rat_transform_result(id integer, rast raster);

--不指定nodata
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;

--指定單個nodatavalue,同時nodata像元參與計算
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;

--指定nodata數(shù)組
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;

----------------------------------------------------
-- 方式二:不指定chunktable名稱,轉(zhuǎn)換結果存放在隨機表名的臨時表中,僅可用于session內(nèi)部的嵌套計算
----------------------------------------------------
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;