当前位置: 首页 > 知识库问答 >
问题:

使用R中的矢量多边形提取光栅像素值

戚永福
2023-03-14

我已经为此挣扎了几个小时。我有一个包含177个多边形(即177个县)的shapefile(称为“shp”)。这个shapefile覆盖在光栅上。我的光栅(称为“ras”)由具有不同污染值的像素组成。

现在我想提取每个多边形的所有像素值及其出现次数。

这正是QGIS功能“分区直方图”所做的。但我想在R中做同样的事情。

我尝试了提取()函数,并设法获得了每个县的平均值,这已经是第一步,但我想制作像素分布(直方图)。

有人能帮我一下吗?

非常感谢,

玛丽·劳尔

共有2个答案

诸葛砚文
2023-03-14

这是一个最小的、自包含的、可重复的示例(几乎字面上来自? raster::extrac,因此不难制作)

library(raster)
r <- raster(ncol=36, nrow=18, vals=rep(1:9, 72))
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
polys <- spPolygons(cds1, cds2)

现在你可以

v <- extract(r, polys)
par(mfrow=c(1,2))
z <- lapply(v, hist)

或者更花哨

mains <- c("first", "second")
par(mfrow=c(1,2))
z <- lapply(1:length(v), function(i) hist(v[[i]], main=mains[i]))

还是要柱状图

z <- lapply(1:length(v), function(i) barplot(table(v[[i]]), main=mains[i]))
盖锦程
2023-03-14

非常感谢你的帮助。下次我保证,我会小心,更详细地解释我的问题。

在你的帮助下,我设法找到了一个解决方案。我还使用了这个网站:http://zevross.com/blog/2015/03/30/map-and-analyze-raster-data-in-r/

作为参考,首先我必须卸载“tidyr”包,因为它与extract函数有冲突。

如果它可以帮助某人,以下是最终代码:

# Libraries loading
library(raster) 
library(rgdal)
library(sp)

# raster layer import
ras=raster("C:/*.tif")

# shapefile layer import
shp<-shapefile("C:/*.shp")

# Extract the values of the pixels raster per county
ext <- extract(ras, shp, method='simple')

# Function to tabulate pixel values by region & return a data frame
tabFunc                            <- function(indx, extracted, region, regname) {
  dat                              <- as.data.frame(table(extracted[[indx]]))
  dat$name                         <- region[[regname]][[indx]]
  return(dat)
}

# run through each county & compute a table of the number
# of raster cells by pixel value. ("CODE" is the county code) 
tabs <- lapply(seq(ext), tabFunc, ext, shp, "CODE")

# assemble into one data frame
df <- do.call(rbind, tabs)  

# to see the data frame in R
print(df)

# table export 
write.csv(df,"C:/*.csv", row.names = FALSE)
 类似资料:
  • 在R中,与包“光栅”中的“提取”相比,在包“空间生态”的函数“zonal.stats”中计算平均值存在偏差。对于两者,我都使用多边形作为区域字段,并使用光栅作为值。 这是一个例子: z2和z1偏差的原因是什么?

  • 我想将光栅数据聚合到自定义形状文件中的每个多边形。 在这种情况下,我想获得撒哈拉以南非洲次国家区域城市化的平均程度。 我的sf如下所示: 或绘制: 另一方面,光栅数据采用以下形式: 这些比整个星球所需的要细得多。为了加速计算,我首先聚合光栅,然后将其转换为shapefile,剩余的每个光栅像素都转换为shapefile中的点几何形状。然后,这个shapefile可以聚合到我的区域边界。诚然,这不是

  • 我有一个多边形的形状文件,我想用它来将光栅值提取到数据帧中。所以我在下面的代码中这样做。 这为我提供了一个由两列组成的数据框:每个多边形的数字ID和关联的提取光栅值。现在,我想为每个提取的光栅值添加x,y坐标。我已经看到对点形状文件执行此操作,但我不确定如何将其应用于多边形形状文件几何体。

  • 下面的代码在我的图像上生成两个框。我正计划进一步分析这些框内的像素。 在下面的例子中,在红色方块的情况下,我不想继续下去,因为它的右上角有黑色像素。而我想继续在绿色方块的情况下,因为它没有一个黑色像素沿着它的边缘。

  • 我正在尝试在R中设置一个randomForest,以便根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的光栅图像,我想训练许多其他光栅,以尝试基于初始光栅创建光栅输出。代码示例如下: <代码>rf1 ...其中,是我的光栅格式的实际已知值,而到是我想用来预测trainingRaster1是什么的其他光栅图像。我知道您将使用向量或点的训练类来训练一系列光栅,但在我的情况下,我希望使用光

  • 我目前正在尝试根据条件计算创建一个新的光栅或形状文件,需要根据光栅文件中的值对形状值中的每个值进行计算。我通常不使用光栅和形状文件,所以我对这里的元素很不熟悉。我是笼统地问这个问题,但以下是我使用的数据,希望它能让我更好地理解我试图实现的目标: 主要目标是取与shp_probs中的每个点(纬度和经度)相关的概率,并将其乘以对应于rast_norm中相同纬度和经度的值,以及之后的一些其他计算。如果我