本节将介绍基于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')
vect
函数可读取矢量数据,并可使用plot
函数加上属性字段进行映射出图,如下所示:
#加载县区划(该数据为编造的)
bj <- vect("E:/Data/R_save/dingxi/bjt.shp")
bj
plot(bj, col=rainbow(n))
# 采用gdp字段进行颜色映射
plot(bj, "gpd", col=rainbow(25))
其中,name对应的为该矢量所包含的属性,或者通常所说的字段,以各地区gdp的属性绘图:
该矢量是以县为边界,使用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)
计算得到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 )
现在有区域ndvi和行政区划数据,采用extract
函数提取各个县的ndvi的均值
#区域统计,结果为data.frame格式
tj <- extract(dx_ndvi1, bj1, mean, na.rm=TRUE)
bj
属性里# 添加新变量
bj1$ndvimean <- tj$b4
head(bj1)
#法1
bjv <- values(bj1)
head(bjv)
#法2
bjv1 <- as.data.frame(bjv)
head(bjv1)
#仅获得某个字段的值,结果为向量
bj1$gpd
#获得包含改字段的新矢量
bj1[, "gpd"]
#输出
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)