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 if100<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 if100<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 if600<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 | 是否使用分Block Storage。 | 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