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

语法

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

  • 如果为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_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;