使用Raster包中的getData提取高程数据



我正在尝试获取新西兰鸟类位置的一些高程。我想我可能会使用提供的代码来回答类似的问题(使用R从澳大利亚的lat/lon点的网站提取高程(,但不幸的是,我在使用光栅包中的提取函数时出错,尽管代码几乎相同。

library(raster)
m <- data.frame(lon = c(172.639847, 173.283966), lat = c(-43.525650, -41.270634))
x <- getData('alt', country = "NZL")
cbind(m, alt = extract(x, m))
plot(x)
points(m)

错误:

cbind(m, alt = extract(x, m))
Error in (function (classes, fdef, mtable)  : 
unable to find an inherited method for function ‘extract’ for signature ‘"list", "data.frame"’

有人能告诉我出了什么问题吗?我已经找了几个小时了,但找不到解决方案。

谢谢,Sam

我不知道确切的原因,但微妙的原因是,与澳大利亚相比,getData为新西兰返回了不同的数据结构。它返回一个列表,其中RasterLayers位于第一个(和第二个(列表元素中:

library(raster)
## Australia ==============
m <- data.frame(lon = c(146.9442, 146.4622), lat = c(-36.0736, -36.0491))
aus <- getData('alt', country = "AUS")
class(aus)
# [1] "RasterLayer"
# attr(,"package")
# [1] "raster"
cbind(m, alt = extract(aus, m))

## New Zealand ============
m <- data.frame(lon = c(172.639847, 173.283966), lat = c(-43.525650, -41.270634))
nzl <- getData("alt", country = "NZL")
> class(nzl) # is a list!
# [1] "list"
> class(nzl[[1]])
# [1] "RasterLayer"
# attr(,"package")
# [1] "raster"
cbind(m, alt = extract(nzl[[1]], m))
cbind(m, alt = extract(nzl[[2]], m))

最新更新