查看原文
其他

QGIS和R语言栅格数据重分类

走天涯徐小洋 走天涯徐小洋地理数据科学 2022-07-18

QGIS和R语言栅格数据重分类

重分类(Reclassify)是栅格数据处理中常用的操作,可以用于将土地覆被地类合并,或者将连续的像元值合并为离散的值(NDVI时间序列分析之Sen+MK分析全过程梳理)等等。

常用的GIS软件ArcGIS、QGIS都可以实现栅格数据的重分类。ArcGIS重分类网上已经很多了,不再赘述,这里主要讲讲QGIS和R语言里面的重分类。相比ArcGIS有什么特点呢?

QGIS栅格重分类

QGIS中我一般常用Reclassify by Table,和ArcGIS中Reclassify工具很接近。

使用Reclassify by Table进行重分类需要设置以下几点:

  • Raster layer:要进行重分类的栅格数据层
  • Reclassification table:重分类的值域,最大值、最小值,分类后value
  • Range boundaries:重分类值域开闭区间
  • Output data type:输出数据的类型,对于土地覆被数据,一般使用byte即可。
  • Reclassified raster:重分类后的栅格,输出数据
Reclassify by Table
  • Reclassification table:重分类的值域,在这是自己设置一个表格,告诉QGIS如何分类
Reclassification table

举个例子,IGBP分类分的类别比较多,为了提取植被区域,我划分了林地、草地、耕地,如上图所示进行了重分类,结果如下:

重分类前
重分类后

R语言重分类

R语言terra包中可以使用classify函数进行重分类,也可以使用app栅格计算函数通过自定义function的方式进行。

classify重分类

  • 需要读取栅格rast
  • 指定重分类矩阵
  • classify重分类
    • include.lowest=T, right=F设置开闭区界,左闭右开
library(terra)
CDR_slope = rast("./Sen+MK/CDR_slope.tif")
#重分类,<0 negative; >0 positive
m = c(-1, 0, -1,
      0, 1, 1)
rclmat = matrix(m, ncol = 3, byrow = T)
CDR_slope_rcl = classify(CDR_slope, rclmat, include.lowest=T, right=F)

栅格计算自定义重分类

使用app函数进行栅格计算,可以自定义重分类,将多个地类合并,提取单一地类的栅格计算结果很方便。

要点:

  • 自定义function
  • app栅格计算
library(terra)
lucc = rast("D:/R/CMRrgee/LUCC/CMR_lucc0115_reclass.tif")
#重分类
reclass <- function(a) {
  ifelse (a < 4, a, NA)   #1森林2草地3耕地,<4植被
}
#单独的森林、草地、耕地
forest = app(lucc, reclass, cores=4)

参考文献

  1. NDVI时间序列分析之Sen+MK分析全过程梳理
  2. 栅格数据的一些概念和常用处理方法,ArcGIS栅格数据显示错误问题如何解决
  3. 对比R语言Raster包和Terra包栅格计算
  4. 【更新】rgee: An R package for interacting with Google Earth Engine

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存