ST_Reclassify函数返回一个raster对象。 结果对象空间参考、分辨率与原始影像相同,波段数量通过reclassexpr进行指定。
语法
raster ST_Reclassify(raster raster_obj,
cstring reclassexpr default NULL
cstring storageOption default '')
参数
参数名称 | 描述 |
---|---|
raster_obj | 需要重分类的raster对象。 |
reclassexpr | JSON字符串用于表示分类数值区间。 |
storageOption | JSON字符串表示的返回结果的存储选项。 |
reclassexpr为JSON字符串数组,每个子JSON对象指明波段操作参数, 参数如下。
参数名称 | 描述 | 类型 | 默认值 | 说明 |
---|---|---|---|---|
band | 波段序号。 | integer | 无 | 波段序号,从0开始。 |
remap | 分类采用的参数。 | object | - | - |
nodata | 是否使用nodata。 | boolean | false |
|
nodataValue | nodata值。 | float8 | 0 | 新的nodata值。 |
remap表示如何将原始像素值映射到新像素值。
- 键表示原始像素值范围,可以由一个或多个数值构成,中间用英文逗号(,)进行分隔 。起始和结束可以指定开闭域关系。
- ( 表示大于
- ) 表示小于
- ] 表示小于等于
- [ 表示大于等于
默认为
(]
。 - 值表示新旧像元值映射的结果,可以有一个或多个数值构成,中间用英文逗号(,)进行分隔 。
- 映射方式包含三种:
- range --> range: 原始像素范围和新像素范围数值个数一致,;例如"300,400,500":"80,90,100", "[300,400,500]":"80,90,100"。
- range --> value: 原始像素范围比新像素范围数值个数多一个,例如"(300,400,500]":"80,90"。
- value --> value: 原始像素范围和新像素范围数值都为一个,例如"10":"1"。
- 像素值不属于任何映射范围,则会被归纳到nodata。
- 同一个像素值不允许被多个范围包含。
- 示例
- 示例1
以下表示对波段0进行Reclassify操作:
if 0<old_value<=100 new_value = 20 else if 100<old_value<=200 new_value = 50 else new_value = 0
[ { "band":0, "remap":{ "(0,100,200]":"20,50" } } ]
- 示例2
支持多个分段值,不落入该区域的设置为nodata:
[ { "band":0, "remap":{ "(0,100,200]":"20,50", "(300,400,500]":"80,90,100" } } ]
- 示例3
以下表示对波段0进行Reclassify操作:
if 0<old_value<=100 new_value = 20 else if 100<old_value<=200 new_value = 50 else new_value = 999
以及对波段1的Reclassify操作:
if 400<old_value<=600 new_value = 20+(old_value-400)/200 * (90-20) else if 600<old_value<=800 new_value = 90+(old_value-600)/200 * (130-90) else new_value = 0
[ { "band":0, "remap":{ "(0,100,200]":"20,50" }, "nodata":true, "nodataValue":999 }, { "band":1, "remap":{ "(400,600,800]":"20,90,130" }, "nodata":false, "nodataValue":0 } ]
- 示例1
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一致 | 必须为以下其中之一:
|
celltype | 像素类型。 | string | 和原始raster一致 | - |
示例
-- 永久表
CREATE TABLE rast_reclassify_result(id integer, rast raster);
-- 临时表
CREATE TEMP TABLE rast_reclassify_result_temp(id integer, rast raster);
-- 存放到临时表中
INSERT INTO rast_reclassify_result_temp(id, rast)
select 1, ST_Reclassify(rast, '[{"band":0,"remap":{"(0,100,200]":"20,50"}}]')
from reclass_table