如何计算多边形内的非NA栅格单元格数

时间:2014-01-27 16:25:09

标签: r extract polygon raster

我一直在使用ArcGIS ZonalStats遇到各种各样的问题,并认为R可能是一个很好的方式。说我对R很新,但有一个编码背景。 情况是我有几个栅格和多边形形状文件,其中包含许多不同大小的特征(尽管所有特征都比栅格单元大,并且多边形特征与栅格对齐)。 我已经想出如何使用带有extract的光栅库获取每个面要素的平均值:

#load packages required
require(rgdal)
require(sp)
require(raster)
require(maptools)
# ---Set the working directory-------
datdir <- "/test_data/"

#Read in a ESRI grid of water depth
ras <- readGDAL("test_data/raster/pl_sm_rp1000/w001001.adf")
#convert it to a format recognizable by the raster package
ras <- raster(ras)

#read in polygon shape file
proxNA <- readShapePoly("test_data/proxy/PL_proxy_WD_NA_test") 
#plot raster and shp
plot(ras)
plot(proxNA)

#calc mean depth per polygon feature
#unweighted - only assigns grid to district if centroid is in that district
proxNA@data$RP1000 <- extract(ras, proxNA, fun = mean, na.rm = TRUE, weights = FALSE)
#check results
head(proxNA)

#plot depth values 
spplot(proxNA[,'RP1000'])

我遇到的问题是我还需要多边形区域与同一多边形中所有非NA单元格之间的基于区域的比率。我知道栅格的像元大小是什么,我可以得到每个多边形的区域,但缺失的链接是每个特征中所有非NA细胞的数量。我设法得到多边形proxNA@data$Cnumb1000 <- cellFromPolygon(ras, proxNA)中所有单元格的单元格编号,我确信有一种方法可以获得栅格单元格的实际值,然后需要一个循环来获取所有非单元格的数量。 -NA细胞结合计数等 但是,我确信有更好更快的方法!如果你们有任何想法或者能指出我正确的方向,我将非常感激!

1 个答案:

答案 0 :(得分:0)

我无权访问您的文件,但根据您所描述的内容,这应该有效:

library(raster)
mask_layer=shapefile(paste0(shapedir,"AOI.shp"))
original_raster=raster(paste0(template_raster_dir,"temp_raster_DecDeg250.tif"))
nonNA_raster=!is.na(original_raster)
masked_img=mask(nonNA_raster,mask_layer) #based on centroid location of cells
nonNA_count=cellStats(masked_img, sum)