跨12个UTM区的追踪数据如何投影适配运动分析?
我正在处理一份覆盖12个UTM区(32-43)的大规模追踪数据集,当前数据为经纬度格式,但多数轨迹分析工作流需UTM的Easting和Northing坐标。我尝试将数据投影至中心UTM区(37区),但轨迹出现严重变形。拆分UTM区会破坏单一个体的连续轨迹,因此考虑采用Lambert投影或Equal Earth投影,想了解这类投影是否能提供适配隐马尔可夫模型(HMM)分析的米制Easting和Northing信息?
数据片段
> head(springsub) id DateTime lat lon Altitude Sex Age Tag distance time_interval velocity velocity_kmh 1 N34234@1BF1A215 2022-03-15 10:42:00 45.50620 12.57837 5 1 6 GPS-GSM_TECHNOSMART 0.00000 NA NA NA 2 N34234@1BF1A215 2022-03-16 06:42:00 48.62932 20.51655 274 1 6 GPS-GSM_TECHNOSMART 695286.88086 72000 9.656762234 34.76434404 3 N34234@1BF1A215 2022-03-16 08:42:00 48.62761 20.51720 262 1 6 GPS-GSM_TECHNOSMART 195.38842 7200 0.027137281 0.09769421 4 N34234@1BF1A215 2022-03-16 10:42:00 48.62785 20.51662 271 1 6 GPS-GSM_TECHNOSMART 50.60765 7200 0.007028840 0.02530382 5 N34234@1BF1A215 2022-03-16 12:41:00 48.62737 20.51678 270 1 6 GPS-GSM_TECHNOSMART 54.77180 7140 0.007671121 0.02761603 6 N34234@1BF1A215 2022-03-16 18:42:00 49.30252 20.92450 914 1 6 GPS-GSM_TECHNOSMART 80799.38930 21660 3.730350383 13.42926138 utm_zone 1 33 2 34 3 34 4 34 5 34 6 34
尝试过的代码
# Project to UTM llcoord <- st_as_sf(springsub[, c("lon", "lat")], coords = c("lon", "lat"), crs = CRS("+proj=longlat +datum=WGS84")) utmcoord <- st_transform(llcoord, crs = CRS("+proj=utm +zone=37 +datum=WGS84")) # Add Easting and Northing to data (in km) data[, c("x", "y")] <- st_coordinates(utmcoord)/1000
解决方案与分析
1. Lambert投影(推荐用于HMM分析)
Lambert投影(常用的是Lambert Conformal Conic,LCC)可以输出米制的Easting/Northing坐标,且局部角度和距离变形极小,完全适配依赖运动特征(速度、方向、距离)的HMM分析。
针对你的研究区域(覆盖UTM 32-43,大致为欧洲中东部到西亚一带),可以定制适合该区域的LCC投影参数,比如选择区域的南北标准纬线、中央经线,确保整个研究范围内的变形在可接受范围内。
示例转换代码:
# 自定义Lambert投影参数(适配研究区域) lambert_crs <- CRS("+proj=lcc +lat_1=40 +lat_2=55 +lon_0=15 +datum=WGS84 +units=m +no_defs") llcoord <- st_as_sf(springsub[, c("lon", "lat")], coords = c("lon", "lat"), crs = 4326) # WGS84的EPSG代码为4326 lambert_coord <- st_transform(llcoord, crs = lambert_crs) # 添加米制坐标到数据集 springsub[, c("easting", "northing")] <- st_coordinates(lambert_coord)
2. Equal Earth投影
Equal Earth是等面积投影,同样可以输出米制坐标,但它的角度变形明显,会导致运动方向、速度的计算出现偏差。如果你的HMM仅依赖面积相关特征(比如活动范围大小),可以使用;但如果HMM需要基于距离、方向的状态推断,Equal Earth不是最优选择。
示例转换代码:
# Equal Earth投影的EPSG代码是8857 equal_earth_crs <- CRS("+proj=eqearth +datum=WGS84 +units=m +no_defs") ee_coord <- st_transform(llcoord, crs = equal_earth_crs) springsub[, c("ee_easting", "ee_northing")] <- st_coordinates(ee_coord)
3. 额外建议
如果坚持使用UTM体系,也可以尝试动态UTM转换+轨迹拼接:对每个点使用其对应的UTM区转换坐标,然后通过坐标偏移的方式将不同UTM区的坐标统一到同一坐标系下(比如以37区为基准,计算其他区坐标的偏移量),这样既避免了单UTM区的变形,又保持了轨迹的连续性。不过这种方法需要处理UTM区边界的坐标衔接问题,实现起来比直接用Lambert投影复杂。
内容的提问来源于stack exchange,提问作者Devon

