使用R的raster包getData提取新西兰高程时extract函数报错如何解决
问题排查与解决方案
错误原因
raster::getData()获取多岛屿国家的高程数据时,会按地理分区返回栅格列表而非单一栅格对象。新西兰包含南北两个主岛,因此你赋值的x是列表类型,extract函数没有适配列表输入的处理方法,直接调用就会触发你遇到的签名匹配错误。
修复代码(适配原有raster包逻辑)
library(raster) m <- data.frame(lon = c(172.639847, 173.283966), lat = c(-43.525650, -41.270634)) x <- getData('alt', country = "NZL") # 将多栅格列表合并为栅格栈 x_stack <- stack(x) # 提取高程后过滤每个点对应的非NA有效值 m_alt <- cbind(m, alt = apply(extract(x_stack, m), 1, \(val) na.omit(val)[[1]])) print(m_alt) # 绘图 plot(x_stack) points(m$lon, m$lat, col = "red", pch = 19)
更优替代方案
raster包已停止官方维护,建议使用目前主流的terra和geodata包实现同等需求,代码逻辑更简洁:
# 首次使用先安装依赖 # install.packages(c("terra", "geodata")) library(terra) library(geodata) m <- data.frame(lon = c(172.639847, 173.283966), lat = c(-43.525650, -41.270634)) # 下载新西兰全境3秒分辨率高程数据 nz_elev <- elevation_3s(country = "NZL", path = tempdir()) # 直接提取高程值 m$alt <- extract(nz_elev, m)[[2]]
内容的提问来源于stack exchange,提问作者SKrouse
相关产品推荐
相关产品推荐

