将源栅格对象进行投影变换,返回变换后的栅格对象。
语法
raster ST_Transform(raster rast,
integer outSrid,
cstring processexpr default '',
cstring storageOption default '')
参数
参数名称 | 描述 |
---|---|
rast | 需要投影变换的raster对象。 |
outSrid | 输出的影像的空间参考值,必须为有效的sird值(可以在表spatial_ref_sys查询到)。 |
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名称,将转换结果持续化存储
----------------------------------------------------
CREATE TABLE rat_transform_result(id integer, rast raster);
--不指定nodata
INSERT INTO rat_transform_result(id, rast)
select 10, ST_Transform(rast,32652, '{"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_transform_result(id, rast)
select 11, ST_Transform(rast,32652, '{"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_transform_result(id, rast)
select 12, ST_Transform(rast,32652, '{"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_transform_result_temp(id integer, rast raster);
INSERT INTO rat_transform_result_temp(id, rast)
select 1, ST_Transform(rast,32652,'{"resample":"Near","nodata":false, "nodataValue":[255,255,255]}','{"chunking":true,"chunkdim":"(256,256,1)","compression":"none","interleaving":"bsq"}')
from datasource_table
where id =1;