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

使用amt包make_track()设置CRS失败,返回NA无报错求助

问题分析与解决

你遇到的make_track()设置CRS后返回NA的问题,核心原因有两个:

  1. make_track()默认返回非sf对象
    amt包的make_track()默认生成track_xyt类的轨迹对象,而非sf空间对象。这种情况下CRS信息存储在对象的属性中,不会在head()输出中显示,且sf包的st_crs()无法识别该类对象的CRS,导致返回NA。

  2. 误用st_crs()处理普通数据框
    你代码中的st_crs(polarBear_GPS, 4326)是无效操作——polarBear_GPS是普通数据框,没有空间属性,这行代码既不会给数据框添加CRS,也不会产生任何实际效果。


解决方法

方法1:生成sf格式的轨迹对象(推荐)

在make_track()中添加sf = TRUE参数,直接生成带CRS的sf空间对象,这样st_crs()就能正确识别:

# 创建带CRS的sf格式轨迹
trk1 <- make_track(
  polarBear_GPS,
  .x = Longitude,
  .y = Latitude,
  .t = Datetime,
  id = Bear, 
  crs = 4326,
  sf = TRUE)  # 开启sf格式输出

# 验证CRS
st_crs(trk1)
# 输出应该包含WGS84坐标系的完整信息

# 查看sf对象的结构
head(trk1)
# 会显示geometry列,包含空间坐标信息

方法2:保留track_xyt对象并查看CRS

如果你不需要sf格式,只想保留amt原生的track_xyt对象,可以用amt包自带的crs()函数查看或设置CRS:

trk1 <- make_track(
  polarBear_GPS,
  .x = Longitude,
  .y = Latitude,
  .t = Datetime,
  id = Bear, 
  crs = 4326)

# 查看CRS(使用amt的crs函数)
crs(trk1)
# 输出:[1] "EPSG:4326"

额外注意事项

删除代码中无效的st_crs(polarBear_GPS, 4326)行,避免混淆。如果后续需要对轨迹进行空间操作,推荐使用方法1生成sf对象,方便与sf/terra包的空间函数兼容。

内容的提问来源于stack exchange,提问作者Ellery Vincent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:13:15