調整源柵格對象的像素范圍,對應的地理空間范圍保持不變,返回調整后的柵格對象。

語法

raster ST_Resize(raster rast,
           integer outWidth,
           integer outHeight,
            cstring processexpr default '',                 
            cstring storageOption default '')

參數

參數名稱 描述
rast 需要投影變換的raster對象。
outWidth 輸出的柵格像素寬度。
outHeight 輸出的柵格像素高度。
processExpr JSON字符串,指定重采樣的方式以及nodata處理方式。
storageOption 返回結果的存儲選項,為JSON字符串。

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

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

float8

float8[]

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

storageOption參數如下。

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

--不指定nodata
INSERT INTO rat_resize_result(id, rast) 
select 10, ST_Resize(rast,1024,1024, '{"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_resize_result(id, rast) 
select 11, ST_Resize(rast,1024,1024, '{"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數組
INSERT INTO rat_resize_result(id, rast) 
select 12, ST_Resize(rast,1024,1024, '{"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名稱,轉換結果存放在隨機表名的臨時表中,僅可用于session內部的嵌套計算
----------------------------------------------------
CREATE TEMP TABLE rat_resize_result_temp(id integer, rast raster);

INSERT INTO rat_resize_result_temp(id, rast) 
select 1, ST_Resize(rast,1024,1024,'{"resample":"Near","nodata":false, "nodataValue":[255,255,255]}','{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq"}') 
from datasource_table 
where id =1;