使用gdistance计算绕障海上距离时遇‘srs不是BasicRaster槽’错误求助
问题解决:gdistance中transition/geoCorrection报错‘srs’ is not a slot in class “BasicRaster”
这个错误源于raster包版本更新后类结构变化,导致旧版gdistance代码无法适配,或是栅格对象缺少空间参考(CRS)引发的。以下是具体修复步骤:
1. 更新核心依赖包
运行命令更新所有相关包,确保版本兼容:
update.packages(c("raster", "gdistance", "maptools", "sp"))
2. 修复代码中的关键问题
原代码存在两个核心问题:创建的栅格无CRS、部分逻辑冗余。修改后的完整代码如下:
library(gdistance) library(maptools) library(raster) # 加载世界地图数据 data(wrld_simpl) # 创建带CRS的栅格(匹配wrld_simpl的空间参考) r <- raster(res = 1) # 可根据需求调整分辨率 crs(r) <- crs(wrld_simpl) # 栅格化陆地 r <- rasterize(wrld_simpl, r) # 处理通行成本:陆地设为NA(不可通行),水域设为1(单位成本) r[!is.na(r)] <- NA r[is.na(r)] <- 1 # 创建过渡层并进行地理校正 tr <- transition(r, mean, directions = 8) tr <- geoCorrection(tr, type = "c") # 示例:替换为你的捕捞点位经纬度 start <- c(120, 30) # 东经120,北纬30 end <- c(130, 40) # 东经130,北纬40 # 计算最短路径 AtoB <- shortestPath(tr, start, end, output = "SpatialLines")
3. 避免包冲突的额外建议
- 重启R会话后,只加载必需的包(原代码中
data.table未被使用,可移除) - 若仍报错,检查是否有
terra等其他栅格类包被加载,这类包可能与raster产生冲突,需卸载或不加载
内容的提问来源于stack exchange,提问作者Matt Horton
相关产品推荐
相关产品推荐

