全部產品
Search
文件中心

PolarDB:ST_Rescale

更新時間:Jul 06, 2024

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

文法

raster ST_Rescale(raster rast,
         f8 scale_x,
          f8 scale_y,
      cstring processexpr default '',
       cstring storageOption default '');

raster ST_Rescale(raster raster,
         f8 scale_xy,
      cstring processexpr default '',
       cstring storageOption default '')

參數

參數名稱描述
rast需要投影變換的raster對象。
scale_xx方向的縮放比例。
scale_yy方向的縮放比例。
scale_xyx、y方向的縮放比例,兩者相同。
processExprJSON字串,指定重採樣的方式以及nodata處理方式。
storageOption返回結果的儲存選項,為JSON字串。

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

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

float8

float8[]

NULLnodataValue可指定為單個值或數組。
  • 如果指定為單個值,表示輸出柵格對象的所有波段使用同一個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_rescale_result(id integer, rast raster);

--不指定nodata
INSERT INTO rat_rescale_result(id, rast) 
select 10, ST_Rescale(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_rescale_result(id, rast) 
select 11, ST_Rescale(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_rescale_result(id, rast) 
select 12, ST_Rescale(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_rescale_result_temp(id integer, rast raster);

INSERT INTO rat_rescale_result_temp(id, rast) 
select 1, ST_Rescale(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;