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
  • 如果為true,像素值為nodata,則分類結(jié)果也為nodata。
  • 如果為false,則作為普通數(shù)值進行計算。
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
         }
      ]

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一致 必須是以下一種:
  • bip:Band interleaved by pixel
  • bil:Band nterleaved by pixel
  • bsq:Band Sequential
endian 字節(jié)序。 string 和原始raster一致 必須為以下其中之一:
  • NDR:Little endian
  • XDR:Big endian
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