【问题标题】:Extract number of raster cells included in a SpatialPolygons提取 SpatialPolygons 中包含的栅格单元数
【发布时间】:2017-09-17 08:38:42
【问题描述】:

我想创建一个函数来计算 SpatialPolygonsDataframe 对象的多边形内的栅格单元数,并将该值添加为新列而不使用循环。 我找不到怎么做...

这是我的代码:

library(sp)
library(raster)
# Create a SpatialPolygonsDataframe and a raster objets to overlay
# Polygons
p1 <- rbind(c(-180,-20), c(-140,55), c(-50, 0), c(-140,-60), c(-180,-20))
p2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55), c(-10,0))
p3 <- rbind(c(-125,0), c(0,60), c(40,5), c(15,-45), c(-125,0))
polys <- as(spPolygons(p1, p2, p3), "SpatialPolygonsDataFrame")
# Raster
p4 <- rbind(c(-180,10), c(0,90), c(40,90), c(145,-10),  
        c(-25, -15), c(-180,0), c(-180,10))
rpol <- spPolygons(p4)
r <- raster(ncol=90, nrow=45)
grd <- rasterize(rpol, r, fun=sum)

# Function to count the share of occupied cells per polygon
myFunction <- function(polys,grd){
    over <- crop(mask(grd, polys), polys)
    share <- length(over[!is.na(over)]) / ncell(over) * 100
  return(share)
}  

myFunction(polys,grd) 

非常感谢您的帮助!

【问题讨论】:

    标签: r spatial r-raster iterated-function


    【解决方案1】:

    您可以使用函数raster::extract。默认情况下,这会为 SpatialPolygonDataFrame 的每个多边形提取单元格信息。输出是一个列表,这样您就可以计算列表中的对象数量。

    library(sp)
    library(raster)
    # Create a SpatialPolygonsDataframe and a raster objets to overlay
    # Polygons
    p1 <- rbind(c(-180,-20), c(-140,55), c(-50, 0), c(-140,-60), c(-180,-20))
    p2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55), c(-10,0))
    p3 <- rbind(c(-125,0), c(0,60), c(40,5), c(15,-45), c(-125,0))
    polys <- as(spPolygons(p1, p2, p3), "SpatialPolygonsDataFrame")
    
    # Create raster
    r <- raster(ncol=90, nrow=45)
    values(r) <- 1:ncell(r)
    # Extract values
    r.ext <- extract(r, polys)
    # Count number of cell for each polygon
    lengths(r.ext)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多