【R-terra包|第二节】:栅格重分类、投影变换、分区统计

terra|第二节:栅格重分类、投影变换、区域统计、属性融合与提取

本节将介绍基于R语言terra包的栅格重分类、矢量绘图、字段融合、投影变换、区域统计、属性表的提取、栅格矢量的输出等内容。

重分类

在R-terra包|第一节中,得到处理好的NDVI,下面将对其进行栅格重分类,采用classify 函数:

# classIfy method for SpatRaster
classify(x, rcl, include.lowest=FALSE, right=TRUE, 
			others=NULL, brackets=TRUE, filename="", ...)

其中x为栅格,rcl为分类依据。具体如下:

# 重分类
m <- c( -1,   0,    1,
         0,   0.3,  2,
        0.3,  0.6,  3,
        0.6,   1,   4)
rcl <- matrix(m, ncol =3, byrow =TRUE)
rcl
re_ndvi <- classify(dx_ndvi, rcl)
# 属性表
freq(re_ndvi)
plot(re_ndvi,  main ='NDVI')

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第1张图片

矢量读取与绘图

vect函数可读取矢量数据,并可使用plot函数加上属性字段进行映射出图,如下所示:

#加载县区划(该数据为编造的)
bj <- vect("E:/Data/R_save/dingxi/bjt.shp")
bj
plot(bj, col=rainbow(n))
# 采用gdp字段进行颜色映射
plot(bj, "gpd", col=rainbow(25))  

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第2张图片
其中,name对应的为该矢量所包含的属性,或者通常所说的字段,以各地区gdp的属性绘图:
【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第3张图片

按字段合并矢量

该矢量是以县为边界,使用aggregate函数按属性中的ID_shi代码进行合并得到市行政区划,如下

#aggregate 按字段融合
shi <- aggregate(bj,  "ID_shi")   
plot(bj, col="light blue", lty=2, border="red", lwd=2)
# 叠加 县边界和市边界
lines(shi, lwd=5)
lines(shi, col="white", lwd=1)
text(bj, "name_1", cex=.8, halo=TRUE)

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第4张图片

投影变换

计算得到ndvi坐标系为WGS_1984,为矢量区划坐标系为CGCS_2000 ,因此需要投影变换到同一坐标系下,采用terra::project函数,如下所示:

#获取ndvi投影
crdref <- crs(dx_ndvi)
#投影变换
bj1 <- terra::project(bj, crdref)
bj1
plot(dx_ndvi)
plot(bj1, add = TRUE, border='red', lwd=1.5 )   

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第5张图片
【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第6张图片

区域统计

现在有区域ndvi和行政区划数据,采用extract函数提取各个县的ndvi的均值

#区域统计,结果为data.frame格式
tj <- extract(dx_ndvi1, bj1, mean, na.rm=TRUE)

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第7张图片

矢量属性表操作

将提取到ndvi均值追加到行政区划bj属性里

#  添加新变量
bj1$ndvimean <- tj$b4
head(bj1)

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第8张图片

提取属性

#法1
bjv <- values(bj1)
head(bjv)
#法2
bjv1 <- as.data.frame(bjv)
head(bjv1)

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第9张图片

提取字段

#仅获得某个字段的值,结果为向量
bj1$gpd
#获得包含改字段的新矢量
bj1[, "gpd"]

【R-terra包|第二节】:栅格重分类、投影变换、分区统计_第10张图片

栅格矢量输出

#输出
writeRaster(dx_ndvi, "E:/Data/R_save/dingxi/OUTPUT/dx_dnvi.tif", overwrite = FALSE)
writeVector(bj1,  "E:/Data/R_save/dingxi/OUTPUT/dx_bj.shp", overwrite = FALSE)

在这里插入图片描述

你可能感兴趣的:(R-terra包,空间数据处理,r语言,图像处理)