在R的形状文件中查找土地覆盖类别的百分比



我在R中有shapefile和土地覆盖类别的tiff文件。如何在shapefile中找到土地覆盖类别的百分比?例如,该形状文件中的研究区域有多少土地?

#example data for cover
rat <- levels(raster2 )[[1]]
rat[["landcover"]] <- c("land","ocean/lake", "rivers")
levels(raster2 ) <- rat
#and a raster
raster1 <-  raster(matrix(c(1,1,1,2,3,4,5,6,7),ncol =3))

这里有一个最小、自包含、可复制的示例

光栅数据

library(raster)
r <- raster(ncol=36, nrow=18)
set.seed(111)
values(r) <- sample(3, 18*36, replace=TRUE)

多边形

cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
polys <- spPolygons(cds1)

解决方案

x <- extract(r, polys)
table(x)
#x
# 1  2  3 
#16  9 13 

我已经编写了一个R包来实现这一点。

包名称为SpatialCover,可以在Github上找到。它需要包光栅和sp.

Percent.cov功能将满足您的需求。您需要确保多边形/形状文件有一个ID字段。如果形状文件中有多个多边形,Percent.cov将单独计算每个多边形中每个覆盖类型的频率。

library(SpatialCover)
library(raster)
library(sp)
library(rgdal)
shapefile<- readOGR(dsn=wd, layer="filename.shp")
lcraster<- raster("filepathname/rasterfilename.tif")
FreqTable<- Percent.cov(vectorlayer=shapefile, rasterlayer=lcraster, zoneID=ID)

然后你应该得到一张看起来像的桌子

百分比覆盖
zoneID覆盖类型
1陆地20
1海洋/湖泊70
1河流10

最新更新