我试图计算一个散射器(land.sub)内6个波段的面积(理想的百分比)。我通过裁剪原始的土地覆盖栅格到多边形数据(代表海草的存在)来制作这个散射图。我试图弄清楚有多少6种土地覆盖类型存在于我的栅格(land.sub)上,并尝试使用exact_extractr和terra的提取功能,但似乎无法弄清楚如何去做。这是我的代码:
的库(terra)
library(dplyr)
library(rgdal)
library(ggplot2)
library(exactextractr)
##READ IN RASTER###
rcp19<-rast("7landtypes/SSP1_RCP19/global_SSP1_RCP19_2050.tif")
crs(rcp19, proj = T)
###READ IN POLYGON DATA AND TRANSFORM TO SAME CRS AS RASTER(CEA) BY TYPING >CMU AND COPY PASTING CRS DETAILS IN OUTPUT####
cmu <- st_read("units-attributes-wgs84L2.gpkg") %>%
st_transform("+proj=cea +lat_ts=30 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs") %>%
###FILTER FOR JUST AUSTRALIA FROM TERRITORY1 VARIABLE#####
filter(TERRITORY1 == 'Australia')
###FILTER TO JUST SEAGRASS###
sg<-cmu[, names(cmu)%in% c ("seagrass", "unit_ID")] %>% filter(seagrass==1)
plot(sg)
rcp19
######################EXACT EXTRACTR############################################
###CREAT OBJECT CALLED LAND.SUB WHICH COMBINES RCP19 ONLY WITH WHERE SEAGRASS PRESENT###
land.sub <- terra::crop(rcp19, vect(sg), mask = T)
plot(land.sub)
####RENAME NUMERIC VARIABLES TO LANDCOVER TYPES####
levels(land.sub)<-data.frame(id=1:6, cover = c("water", "forest", "grassland", "barren", "cropland", "urban"))
plot(land.sub)
我还应该提到,当尝试使用exact_extractr进行计算时,我一直得到错误:列未定义。图片我的地图上。
陆地栅格,土地覆盖栅格和海草多边形裁剪在一起
我不能按照你的例子,但如果你想计算不同类的面积,你可以像我下面展示的那样做。
示例数据
library(terra)
r <- rast(system.file("ex/elev.tif", package="terra"))
r <- round(r/100)
v <- vect(system.file("ex/lux.shp", package="terra"))
如果你想用多边形来划分一个区域的子集你可以这样做
r <- crop(r, v[1:2, ], mask=TRUE)
您可以使用freq
freq(r)
# layer value count
#1 1 2 47
#2 1 3 219
#3 1 4 314
#4 1 5 475
计算每个类的面积:
a <- cellSize(r)
zonal(a, r)
zonal(a, r)
# elevation area
#1 2 555404.2
#2 3 555412.9
#3 4 554315.4
#4 5 553053.0