使用amt包make_track()设置CRS失败,返回NA无报错求助
问题分析与解决
你遇到的make_track()设置CRS后返回NA的问题,核心原因有两个:
make_track()默认返回非sf对象
amt包的make_track()默认生成track_xyt类的轨迹对象,而非sf空间对象。这种情况下CRS信息存储在对象的属性中,不会在head()输出中显示,且sf包的st_crs()无法识别该类对象的CRS,导致返回NA。误用
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
相关产品推荐
相关产品推荐

