每个区域的 R 统计信息使用 raster::zonal
R statistics per zone using raster::zonal
我想计算与经纬网对齐的区域的区域统计数据。
获得范围列表后,想法是分配块编号,因为 raster::zonal 函数需要一个栅格图层,其中包含表示区域的代码。
当我尝试用区域编号填充范围时,填充的区域与范围不对应(见图表)。这是为什么?
library(raster)
library(foreach)
filename <- system.file("external/test.grd", package="raster")
r=raster(filename)
xmin = seq(178000, 181000, 1000)
ymin = seq(329000, 333000, 1000)
e=foreach(j=ymin,.combine=c) %:%
foreach(i=xmin) %do% {
e=extent(i,i+1000,j,j+1000)
}
# this should be going into the foreach loop
n=length(r[e[[1]]])
r[e[[1]]]=rep(1,n)
plot(r)
plot(e[[1]],add=T)
您可以使用 QGIS 生成一个包含网格单元格作为规则网格的 shapefile。之后,您可以将 shapefile 和栅格文件与 raster::extract
(https://www.rdocumentation.org/packages/raster/versions/3.0-7/topics/extract) or even faster with exactextractr::exact_extract
(https://cran.r-project.org/web/packages/exactextractr/index.html)
一起使用
这是你想要的吗?如果你不想修改你的渔网,我已经修改了栅格的范围。
library(raster)
library(foreach)
filename <- system.file("external/test.grd", package="raster")
r=raster(filename)
extent(r) <- c(178000,182000,329000,334000 )
xmin = seq(178000, 181000, 1000)
ymin = seq(329000, 333000, 1000)
e=foreach(j=ymin,.combine=c) %:%
foreach(i=xmin) %do% {
e=extent(i,i+1000,j,j+1000)
n=length(r[e])
r[e]=rep((j-i),n)#zonal stat instead of j-i?
}
plot(r);plot(raster(filename), add=T, alpha=0.5, legend=F)
我想计算与经纬网对齐的区域的区域统计数据。
获得范围列表后,想法是分配块编号,因为 raster::zonal 函数需要一个栅格图层,其中包含表示区域的代码。
当我尝试用区域编号填充范围时,填充的区域与范围不对应(见图表)。这是为什么?
library(raster)
library(foreach)
filename <- system.file("external/test.grd", package="raster")
r=raster(filename)
xmin = seq(178000, 181000, 1000)
ymin = seq(329000, 333000, 1000)
e=foreach(j=ymin,.combine=c) %:%
foreach(i=xmin) %do% {
e=extent(i,i+1000,j,j+1000)
}
# this should be going into the foreach loop
n=length(r[e[[1]]])
r[e[[1]]]=rep(1,n)
plot(r)
plot(e[[1]],add=T)
您可以使用 QGIS 生成一个包含网格单元格作为规则网格的 shapefile。之后,您可以将 shapefile 和栅格文件与 raster::extract
(https://www.rdocumentation.org/packages/raster/versions/3.0-7/topics/extract) or even faster with exactextractr::exact_extract
(https://cran.r-project.org/web/packages/exactextractr/index.html)
这是你想要的吗?如果你不想修改你的渔网,我已经修改了栅格的范围。
library(raster)
library(foreach)
filename <- system.file("external/test.grd", package="raster")
r=raster(filename)
extent(r) <- c(178000,182000,329000,334000 )
xmin = seq(178000, 181000, 1000)
ymin = seq(329000, 333000, 1000)
e=foreach(j=ymin,.combine=c) %:%
foreach(i=xmin) %do% {
e=extent(i,i+1000,j,j+1000)
n=length(r[e])
r[e]=rep((j-i),n)#zonal stat instead of j-i?
}
plot(r);plot(raster(filename), add=T, alpha=0.5, legend=F)