ST_Reclassify函數(shù)返回一個raster對象。 結(jié)果對象空間參考、分辨率與原始影像相同,波段數(shù)量通過reclassexpr進行指定。
語法
raster ST_Reclassify(raster raster_obj,
cstring reclassexpr default NULL
cstring storageOption default '')
參數(shù)
參數(shù)名稱 | 描述 |
---|---|
raster_obj | 需要重分類的raster對象。 |
reclassexpr | JSON字符串用于表示分類數(shù)值區(qū)間。 |
storageOption | JSON字符串表示的返回結(jié)果的存儲選項。 |
reclassexpr為JSON字符串數(shù)組,每個子JSON對象指明波段操作參數(shù), 參數(shù)如下。
參數(shù)名稱 | 描述 | 類型 | 默認值 | 說明 |
---|---|---|---|---|
band | 波段序號。 | integer | 無 | 波段序號,從0開始。 |
remap | 分類采用的參數(shù)。 | object | - | - |
nodata | 是否使用nodata。 | boolean | false |
|
nodataValue | nodata值。 | float8 | 0 | 新的nodata值。 |
remap表示如何將原始像素值映射到新像素值。
- 鍵表示原始像素值范圍,可以由一個或多個數(shù)值構(gòu)成,中間用英文逗號(,)進行分隔 。起始和結(jié)束可以指定開閉域關系。
- ( 表示大于
- ) 表示小于
- ] 表示小于等于
- [ 表示大于等于
默認為
(]
。 - 值表示新舊像元值映射的結(jié)果,可以有一個或多個數(shù)值構(gòu)成,中間用英文逗號(,)進行分隔 。
- 映射方式包含三種:
- range --> range: 原始像素范圍和新像素范圍數(shù)值個數(shù)一致,;例如"300,400,500":"80,90,100", "[300,400,500]":"80,90,100"。
- range --> value: 原始像素范圍比新像素范圍數(shù)值個數(shù)多一個,例如"(300,400,500]":"80,90"。
- value --> value: 原始像素范圍和新像素范圍數(shù)值都為一個,例如"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
支持多個分段值,不落入該區(qū)域的設置為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參數(shù)如下。
參數(shù)名稱 | 描述 | 類型 | 默認值 | 說明 |
---|---|---|---|---|
chunking | 是否使用分塊存儲。 | boolean | 和原始raster一致 | - |
chunkdim | 分塊的維度信息。 | string | 和原始raster一致 | 在chunking=true時才有效。 |
chunktable | 分塊表名稱。 | string | '' | 如果傳入''值,則會產(chǎn)生一個隨機表名臨時塊表用于存放數(shù)據(jù)。 該臨時表只在當前會話中有效。如果需要保持一個可訪問的裁剪對象,則需要指定塊表名稱。 |
compression | 壓縮算法類型。 | string | 和原始raster一致 | 目前只支持none、jpeg、zlib、png、lzo和lz4。 |
quality | 壓縮質(zhì)量。 | integer | 和原始raster一致 | 只針對jpeg壓縮算法。 |
interleaving | 交錯方式。 | string | 和原始raster一致 | 必須是以下一種:
|
endian | 字節(jié)序。 | 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