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

leastcostpath包create_slope_cs函数报错求助:‘srs’非BasicRaster类槽

解决create_slope_cs报错:‘srs’ is not a slot in class “BasicRaster”

问题重现

执行以下代码创建成本表面时触发报错:

Adm1 <-
    rgeoboundaries::geoboundaries(
      country = "Austria",
      adm_lvl = "adm0")
r <- get_elev_raster(Adm1,z=4)
cs <- create_slope_cs(dem = r, cost_function = 'tobler', neighbours = 16)

报错信息:

Error in h(simpleError(msg, call)) :
error in evaluating the argument 'x' in selecting a method for function 'extent': ‘srs’ is not a slot in class “BasicRaster”

代码可在另一台设备正常运行,说明问题源于当前环境的包版本或对象属性差异。

解决方案

  • 统一关键包版本
    该报错大概率是raster、elevatr(get_elev_raster所属包)、gdistance(create_slope_cs所属包)的版本不一致导致。在正常运行的设备上执行sessionInfo(),记录这些包的版本号,然后在报错设备上安装对应版本:

    # 示例:安装指定版本的raster包
    install.packages("devtools")
    devtools::install_version("raster", version = "3.6-20")
    
  • 显式设置DEM投影
    手动为获取的DEM对象指定空间参考,匹配边界数据的投影:

    library(raster)
    # 同步Adm1的投影到DEM
    crs(r) <- crs(Adm1)
    # 或直接指定EPSG代码(如WGS84)
    crs(r) <- "+init=epsg:4326"
    # 重新执行成本表面创建
    cs <- create_slope_cs(dem = r, cost_function = 'tobler', neighbours = 16)
    
  • 转换DEM对象类型
    将BasicRaster类型的r转换为标准RasterLayer:

    r <- raster(r)
    cs <- create_slope_cs(dem = r, cost_function = 'tobler', neighbours = 16)
    
  • 获取DEM时指定投影
    在get_elev_raster调用中显式声明crs参数,确保返回的DEM自带正确投影:

    r <- get_elev_raster(Adm1, z=4, crs = crs(Adm1))
    cs <- create_slope_cs(dem = r, cost_function = 'tobler', neighbours = 16)
    

内容的提问来源于stack exchange,提问作者Sherry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:06:45