全部產品
Search
文件中心

PolarDB:ST_Reclassify

更新時間:Jul 06, 2024

ST_Reclassify函數返回一個raster對象。 結果對象空間參考、解析度與原始影像相同,波段數量通過reclassexpr進行指定。

文法

raster ST_Reclassify(raster raster_obj,
        cstring reclassexpr default NULL
         cstring storageOption default '')

參數

參數名稱描述
raster_obj需要重分類的raster對象。
reclassexprJSON字串用於表示分類數值區間。
storageOptionJSON字串表示的返回結果的儲存選項。

reclassexpr為JSON字串數組,每個子JSON對象指明波段巨集指令引數, 參數如下。

參數名稱描述類型預設值說明
band波段序號。integer波段序號,從0開始。
remap分類採用的參數。object--
nodata是否使用nodata。booleanfalse
  • 如果為true,像素值為nodata,則分類結果也為nodata。
  • 如果為false,則作為普通數值進行計算。
nodataValuenodata值。float80新的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
         }
      ]

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一致必須是以下一種:
  • bip:Band interleaved by pixel
  • bil:Band nterleaved by pixel
  • bsq:Band Sequential
endian位元組序。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