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

