R 如何提取海拔大于 600 米的每个多边形的栅格平均值?
R How to extract the mean values of a raster for each polygon for an altitude greater than 600m?
首先,我设法使用以下程序提取每个多边形的平均栅格温度值:
您可以在此 link 上下载 GIS 图层:
https://depots.univ-perp.fr/get?k=iTzEDSUkdyZVw2st78G
## load packages
library(raster); library(rgdal)
## Read rasters
ras_temp<-raster("ras_temp.tif")
plot(ras_temp)
ras_alti<-raster("ras_alti.tif")
## read polygon
polygon <- readOGR(dsn = getwd(), layer = "polygon")
plot(polygon,add=TRUE)
## extract mean value for each polygon
v1 <- extract( ras_temp, polygon, fun=mean, na.rm=TRUE)
nom <- sapply(polygon@polygons, slot, "ID")
v1 <- data.frame(ID = nom, Value = v1)
View(v1)
然后,我想提取每个多边形的温度平均值,但仅限于海拔超过 600 米的表面?
不幸的是,我做不到,我的问题是如何在我的函数中集成高度条件"extract"?
提前致谢
您可以像这样轻松地做到这一点:
# first resample the altitude raster to the temperature one so that they are
# "aligned"
ras_alti.new = resample(ras_alti, ras_temp, "bilinear")
# set to NA all data in ras_temp corresponding to cells in ras_alti.new below 600
# metre
ras_temp.new = ras_temp
ras_temp.new[ras_alti.new <= 600] = NA
# extract the data
v2 <- extract(ras_temp.new, polygon, fun=mean, na.rm=TRUE, sp = T)
v2@data
ID ras_temp
0 417 64.11342
1 433 68.53541
首先,我设法使用以下程序提取每个多边形的平均栅格温度值:
您可以在此 link 上下载 GIS 图层:
https://depots.univ-perp.fr/get?k=iTzEDSUkdyZVw2st78G
## load packages
library(raster); library(rgdal)
## Read rasters
ras_temp<-raster("ras_temp.tif")
plot(ras_temp)
ras_alti<-raster("ras_alti.tif")
## read polygon
polygon <- readOGR(dsn = getwd(), layer = "polygon")
plot(polygon,add=TRUE)
## extract mean value for each polygon
v1 <- extract( ras_temp, polygon, fun=mean, na.rm=TRUE)
nom <- sapply(polygon@polygons, slot, "ID")
v1 <- data.frame(ID = nom, Value = v1)
View(v1)
然后,我想提取每个多边形的温度平均值,但仅限于海拔超过 600 米的表面?
不幸的是,我做不到,我的问题是如何在我的函数中集成高度条件"extract"?
提前致谢
您可以像这样轻松地做到这一点:
# first resample the altitude raster to the temperature one so that they are
# "aligned"
ras_alti.new = resample(ras_alti, ras_temp, "bilinear")
# set to NA all data in ras_temp corresponding to cells in ras_alti.new below 600
# metre
ras_temp.new = ras_temp
ras_temp.new[ras_alti.new <= 600] = NA
# extract the data
v2 <- extract(ras_temp.new, polygon, fun=mean, na.rm=TRUE, sp = T)
v2@data
ID ras_temp
0 417 64.11342
1 433 68.53541