我在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 |