使用缓冲函数从栅格中提取 xy 坐标
Extract xy coordinates from raster using buffer function
我有一些 xy 坐标作为 SpatialPoints(点)对象,并使用它们从 RasterLayer(栅格)中提取这些位置的温度值:
extract = extract(raster, points)
然而,有几个点落在栅格图层之外(即不在陆地上绘制),我想使用缓冲区参数将每个点周围的半径扩大 10000 米 -
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 坐标栅格层。我该怎么做?
这是来自 ?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)
以上在许多情况下都有效,但不适用于边缘或 lon/lat 数据,因为可能有不同数量的单元格。在这种情况下,您可以这样做:
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)
我有一些 xy 坐标作为 SpatialPoints(点)对象,并使用它们从 RasterLayer(栅格)中提取这些位置的温度值:
extract = extract(raster, points)
然而,有几个点落在栅格图层之外(即不在陆地上绘制),我想使用缓冲区参数将每个点周围的半径扩大 10000 米 -
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 坐标栅格层。我该怎么做?
这是来自 ?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)
以上在许多情况下都有效,但不适用于边缘或 lon/lat 数据,因为可能有不同数量的单元格。在这种情况下,您可以这样做:
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)