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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:42:14