You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用geodata包从WorldClim提取气候数据时SpatialPoints创建报错求助

问题

尝试用geodata包从WorldClim提取气候数据,创建SpatialPoints对象时遇到CRS相关错误。使用的代码如下:

library(sp)
library(raster)
library(geodata)

r <- worldclim_global(var = "bio", res = 2.5, path= tempdir())
r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")


lats <- c(14.628434, 9.396111)
lons <- c(-90.5227, -11.72975)
coords <- data.frame(x=lons, y = lats)

points <- SpatialPoints(coords, proj4string = r@crs)

执行最后一行时触发错误:

Error in initialize(value, ...) : 
  no slot of name "crs" for this object of class "SpatRaster"

调整代码后又出现新错误:

Error in h(simpleError(msg, call)) : 
  error in evaluating the argument 'obj' in selecting a method for function 'bbox': assignment of an object of class "Rcpp_SpatRaster" is not valid for slot ‘proj4string’ in an object of class "Spatial"; is(value, "CRS") is not TRUE

此前尝试用raster包的getData方法下载数据,但该方法已无法使用,求解决思路。

解决思路
  • 问题根源:geodata包返回的是**SpatRaster类型对象**(属于terra包的核心类),而非raster包的RasterLayer,因此不能用r@crs这种S4槽位访问方式获取坐标参考系,需要使用terra包的原生函数。
  • 修正方案:
    1. 显式加载terra包(geodata依赖该包,通常会自动加载,但显式加载可避免潜在问题)。
    2. 使用terra::crs()函数提取SpatRaster的CRS信息,该函数返回的CRS对象完全符合SpatialPoints的参数要求。

修正后的完整代码:

library(sp)
library(raster)
library(geodata)
library(terra) # 显式加载terra包

r <- worldclim_global(var = "bio", res = 2.5, path= tempdir())
r <- r[[c(1,12)]]
names(r) <- c("Temp","Prec")

lats <- c(14.628434, 9.396111)
lons <- c(-90.5227, -11.72975)
coords <- data.frame(x=lons, y = lats)

# 用terra::crs()获取合法的CRS对象
points <- SpatialPoints(coords, proj4string = crs(r))
  • 备选方案:若习惯使用raster包的对象体系,可将SpatRaster转换为RasterLayer后再操作:
# 将SpatRaster转换为RasterLayer
r_raster <- raster(r)
# 用raster包的方式访问CRS
points <- SpatialPoints(coords, proj4string = r_raster@crs)
  • 补充说明:raster包的getData方法确实已被官方弃用,geodata是官方推荐的替代工具,因此你的数据获取流程是正确的,问题仅出在后续对象类型的适配环节。

内容的提问来源于stack exchange,提问作者Gerardo Manzanarez-Villasana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:49:57