全部產品
Search
文件中心

ApsaraDB RDS:ST_Resize

更新時間:Feb 28, 2024

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

文法

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 是否使用分Block Storage。 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;