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

使用R的adehabitatHR包计算MCP家域结果数值过小的求助

问题原因

你得到极小面积的核心原因是坐标系统设置错误:

  • 你当前的x_、y_列大概率是WGS84地理坐标系的经纬度(单位为十进制度),但你直接给它指定了UTM投影的坐标系(单位为米)。用十进制度的坐标数值直接计算面积,得到的是平方度的结果,数值自然远低于平方米单位下的合理值。
  • 另外你代码里存在列名匹配错误:构造tab2时选入的列是id,但后续拼接Mix字段时调用的是AnimalID,如果原始表的个体编号列名是AnimalID,会导致分组字段Mix生成错误,也会影响结果。

修复步骤

1. 先确认原始坐标类型

先打印几个坐标值验证:

head(tab8$x_)
head(tab8$y_)

如果x_数值范围在-180180之间、`y_`在-9090之间,就可以确定是经纬度坐标。

2. 修正坐标系转换逻辑

不要直接给经纬度指定UTM投影,先声明原始地理坐标系,再投影到UTM 33N,转换后坐标单位才会是米:

# 创建SpatialPointsDataFrame后先指定原始的WGS84地理坐标系
coordinates(tab8) <- c("x_", "y_")
proj4string(tab8) <- CRS("+proj=longlat +datum=WGS84 +no_defs")

# 投影到UTM 33N,得到米单位的坐标
tab8_utm <- spTransform(tab8, CRS("+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs"))

3. 修正列名错误(如果存在)

如果原始csv的个体编号列名为AnimalID,构造tab2时需要把对应列选入:

# 把原来的id换成AnimalID
tab2 <- tab1 [, c("AnimalID", "x_", "y_", "day", "month", "year")]

4. 重新计算MCP

用投影后的空间数据计算家域:

animals.mcp <- mcp(tab8_utm[, "Mix"], percent = 100, unin = "m", unout = "m2") 
as.data.frame(animals.mcp)

验证

转换后查看tab8_utm的坐标值,UTM投影下东向坐标为6位数字、北向坐标为7位数字,此时计算得到的面积单位就是正确的平方米。

内容的提问来源于stack exchange,提问作者Justine Güldenpfennig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:21:02