ST_Resize

调整源栅格对象的像素范围,对应的地理空间范围保持不变,返回调整后的栅格对象。

语法

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;