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
相关产品推荐
相关产品推荐

