【问题标题】:Extract xy coordinates from raster using buffer function使用缓冲区函数从栅格中提取 xy 坐标
【发布时间】:2015-07-14 03:03:50
【问题描述】:

我有一些 xy 坐标作为 SpatialPoints(点)对象,并使用它们从 RasterLayer(栅格)中提取这些位置的温度值:

extract = extract(raster, points)

但是有几个点落在栅格层之外(即不在陆地上绘制),我想使用缓冲区参数将每个点周围的半径扩大 10000m -

extract2 = extract(raster, points, method="simple",buffer=10000, cellnumbers=TRUE)

This produces a "list" object i.e.- 

head(extract2)

[[1]]
  cell  value 
591332    165 

[[2]]
  cell  value 
475809     NA 

[[3]]
  cell  value 
534127     NA 

[[4]]
  cell  value 
534127     NA 

[[5]]
  cell  value 
534127     NA 

[[6]]
  cell  value 
534127     NA 

但我想创建一个数据框,其中有点位置的栅格值(NA 或温度值)和像元编号,以便我可以访问栅格层中感兴趣像元的原始 xy 坐标.我该怎么做?

【问题讨论】:

    标签: r buffer extract spatial raster


    【解决方案1】:

    这是来自?extract 的可重现示例。

    # example data
    r <- raster(ncol=36, nrow=18, crs='+proj=utm +zone=14 +datum=WGS84')
    r[] <- 1:ncell(r)
    xy <- cbind(x=-50, y=seq(-80, 80, by=20))
    
    # extract
    e <- extract(r, xy, buffer=10)
    ee <- t(data.frame(e))
    rownames(ee) <- NULL
    
    data.frame(xy, ee)
    

    上述方法在许多情况下都有效,但不适用于边缘或经度/纬度数据,因为可能存在不同数量的单元格。在这种情况下,您可能会这样做:

     e <- extract(r, xy, buffer=10)
     m <- max(sapply(e, length))
     x <- rep(NA, m)
     ee <- t(sapply(e, function(y) {x[1:length(y)] <- y; x}))
     data.frame(xy, ee)
    

    【讨论】:

    • 只是@Robert Hijmans 这个解决方案的问题,如果 x=1 那么Error in x[1:length(y)] &lt;- y : replacement has length zero
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2023-04-01
    • 1970-01-01
    • 2020-06-29
    • 2020-09-16
    相关资源
    最近更新 更多