将指定的raster对象进行镶嵌操作,合并成为一个新的raster对象。
语法
raster ST_MosaicFrom(
raster source[],
cstring chunkTableName,
cstring storageOption default '{}',
cstring mosaicOption default '{}'
);
参数
参数名称 | 描述 |
source | 需要拼接的源raster对象。 |
chunkTableName | 拼接完成的块表名称,必须符合数据库表名规范。 |
storageOption | JSON字符串表示的返回结果的存储选项。 |
mosaicOption | JSON字符串表示的返回结果的镶嵌操作选项。 |
storageOption是基于JSON格式的字符串,描述raster对象分块存储信息。支持的参数如下:
参数名称 | 描述 | 类型 | 默认值 | 说明 |
chunking | 是否使用分块存储 | boolean | 与参考影像一致 | / |
chunkdim | 分块的维度信息 | string | 与参考影像一致 | 在chunking=true下才有效,格式为: |
interleaving | 交错方式 | string | 与参考影像一致 | 必须是以下一种:
|
compression | 压缩算法类型 | string | 与参考影像一致 | 目前只支持:
|
quality | 压缩质量 | integer | 与参考影像一致 | 只针对jpeg/jp2k压缩算法。 |
mosaicOption是基于JSON格式的字符串,描述镶嵌算法的具体信息。支持的参数如下:
参数名称 | 描述 | 类型 | 默认值 | 说明 |
srid | 输出栅格对象的空间参考SRID值 | integer | 左上角影像srid | srid与cell_size必须同时指定。 |
cell_size | 输出栅格对象像素大小 | float8[] | 左上角影像cell_size |
|
resample | 重采样方式 | text | 'Near' | 栅格重采样方式,支持:
|
nodata | 源影像的nodata值是否有效 | bool | false |
|
nodataValue | 按波段指定新的nodata值 | float8 float8[] | NULL | nodataValue可指定为单个值或数组;如果指定为单个值表示输出栅格对象的所有波段使用同一个nodata值;如果指定为数组,则数组元素个数必须与栅格的波段数一致。 |
color_balance | 是否匀色 | bool | false | 设置是否进行匀色。 |
step | 匀色计算步长 | integer | 0.1 | color_balance为true时有效,步长越大,可以更快地获得结果,但可能无法得到最优解。 |
iteration | 匀色计算迭代次数 | integer | 50000 | color_balance为true时有效,迭代次数越多匀色效果越好,但会增加耗时。 |
parallel | 并行度 | integer | 1 | 设置操作并行度。取值范围为1~64。 |
描述
镶嵌函数会创建一个新的raster对象。
所有指定的raster对象需要满足以下条件:
具有相同的波段数。
所有的raster对象要么都进行了地理参考,要么都不是。如果都是地理参考,则采用世界坐标镶嵌且SRID或仿射参数可不相同。
指定raster对象的像素类型可以不同。
该函数提供了基于gamma矫正技术实现的匀色能力。基本过程如下:
首先,生成全局颜色平面。对所有参与镶嵌的raster对象进行重采样,通过多项式拟合生成全局像素矩阵,用作匀色基准面。
然后,依次计算每个raster对象对应的局部颜色平面(双线性插值),近似代替整个栅格对象的像素矩阵。
最后,计算生成raster对象上每个像素位置对应的全局颜色平面和局部颜色平面上的像素值,并通过对gamma矫正参数进行计算来实现颜色矫正,以达到最终的匀色效果。
示例
Insert Into raster_obj Values(1, ST_MosaicFrom(Array(select raster_obj from raster_table where id < 10), 'chunk_table_mosaic', '', ''))
Update raster_table Set raster_obj = ST_MosaicFrom(Array(select raster_obj from raster_table where id < 10), 'chunk_table_mosaic','{"srid":4326,"cell_size":[0.00002,0.00002]}') where id = 11;
--nodata
Insert Into rat_mosaicfrom Values(110, ST_MosaicFrom(Array(select rast from rat_mosaicfrom where id < 5), 'rbt_mosaic','{"chunking":true, "chunkdim":"(256,256,3)","compression":"jpeg","quality":75, "interleaving":"bsq","celltype":"8bui"}','{"resample":"Average","srid":4326,"cell_size":[0.00002,0.00002],"nodata":true, "nodataValue":[255,255,255]}'));
-- 并行
Insert Into raster_obj Values(1, ST_MosaicFrom(Array(select raster_obj from raster_table where id < 10), 'chunk_table_mosaic', '', '{"srid":4326,"cell_size":[0.00002,0.00002],"parallel":4}'))
-- 匀色
Insert Into raster_obj Values(1, ST_MosaicFrom(Array(select raster_obj from raster_table where id < 10), 'chunk_table_mosaic', '', '{"srid":4326,"cell_size":[0.00002,0.00002], "color_balance":true, "parallel":4}'))