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

使用R语言mcp()(最小凸多边形)计算物种雌雄分组家域时结果异常的求助

嘿,我帮你排查出几个关键问题,应该能解决雌雄家域面积一致的异常情况!

问题1:UTM坐标赋值完全搞反了

你在转换UTM坐标后,错误地把UTM的东向坐标(Easting,对应原经度)赋值给了Lat列,北向坐标(Northing,对应原纬度)赋值给了Long列,这直接导致后续分析的坐标系统混乱,是家域计算异常的核心原因。

正确的做法应该是保留UTM坐标的语义,保证坐标列的对应关系正确:

# 转换UTM后,正确赋值坐标列
cord.dec.coords <- as.data.frame(cord.UTM@coords)
# 把Easting(原Long转换后)赋值给原Long列,Northing(原Lat转换后)赋值给原Lat列
cat.shark.data$Long <- cord.dec.coords$coords.x1  # 原Long → UTM Easting
cat.shark.data$Lat <- cord.dec.coords$coords.x2   # 原Lat → UTM Northing

你之前的代码把这两个赋值完全颠倒了,导致后续创建shark.sp时,x/y坐标反向,严重干扰了凸多边形的计算逻辑。

问题2:Proj4字符串不一致

在转换UTM时你用了包含南半球参数的+proj=utm +south +zone=34,但给shark.sp设置投影时却去掉了+south参数。UTM南北半球的坐标计算规则不同,缺少这个参数会让系统默认按北半球处理,进一步加剧坐标错误。

修正后的投影设置应该和转换时保持一致:

slot(shark.sp, "proj4string") <- CRS("+proj=utm +south +zone=34 +datum=WGS84 +units=m +no_defs")

修正后的完整家域计算流程

# 重新整理正确的空间对象
shark.sp <- cat.shark.data[,c("Sex..M.F.", "Long", "Lat")]
coordinates(shark.sp) <- c("Long", "Lat")
proj4string(shark.sp) <- CRS("+proj=utm +south +zone=34 +datum=WGS84 +units=m +no_defs")

# 重新计算95% MCP
shark.MCP <- mcp(shark.sp, percent = 95, unout = "km2")
print(shark.MCP)

# 重新计算不同百分比的家域面积
hrs <- mcp.area(shark.sp, percent = seq(50, 100, by = 5))
print(hrs)

额外建议

  • 建议给UTM坐标列起更清晰的名字(比如Easting和Northing),避免和原经纬度列混淆,减少后续出错概率。
  • 运行代码前可以用plot(shark.sp, col = as.factor(shark.sp@data$Sex..M.F.))再次确认雌雄个体的点分布是否符合预期,确保坐标没有错乱。

按照上述步骤修正后,应该能得到符合生物学预期的雌雄家域差异结果啦!

内容的提问来源于stack exchange,提问作者Janneke de Bresser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:42:29