對源柵格對象進行像素縮放,對應的地理空間范圍保持不變,返回縮放后的柵格對象。
語法
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_x | x方向的縮放比例。 |
scale_y | y方向的縮放比例。 |
scale_xy | x、y方向的縮放比例,兩者相同。 |
processExpr | JSON字符串,指定重采樣的方式以及nodata處理方式。 |
storageOption | 返回結果的存儲選項,為JSON字符串。 |
processExpr為JSON字符串數組,每個子JSON對象指定參數如下。
參數名稱 | 描述 | 類型 | 默認值 | 說明 |
---|---|---|---|---|
resample | 重采樣方式。 | text | 'Near' | 柵格重采樣方式,支持'Near'、'Average'、'Cubic'和'Bilinear'四種。 |
nodata | 源影像的nodata值是否有效。 | bool | false |
|
nodataValue | 按波段指定新的nodata值。 |
float8 float8[] |
NULL | nodataValue可指定為單個值或數組。
|
說明 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一致 | 必須是以下一種:
|
endian | 字節序。 | string | 和原始raster一致 | 必須為以下其中之一:
|
說明 如果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;