在R中转换坐标格式:将度分格式转为十进制度
坐标格式转换解决方案
你可以用现成的R包或者手动计算来实现,两种方法都能保留数据框格式,无需转换为空间对象:
方法一:使用measurements包(推荐)
这个包专门处理单位转换,能直接处理带方向的坐标格式:
- 安装并加载包:
install.packages("measurements") library(measurements)
- 合并坐标与方向列,批量转换为十进制度:
# 生成十进制度纬度列 tracksFKt240108$lat_decimal <- conv_latlong( paste(tracksFKt240108$Latitude, tracksFKt240108$NorS), from = "deg_min", to = "decimal" ) # 生成十进制度经度列 tracksFKt240108$lon_decimal <- conv_latlong( paste(tracksFKt240108$Longitude, tracksFKt240108$EorW), from = "deg_min", to = "decimal" )
conv_latlong会自动根据方向(S/W)转换为负数,完全符合你的需求。
方法二:手动计算(无需额外包)
如果不想依赖第三方包,可以自己写转换逻辑,核心是把DDMM.SSS格式转为十进制度:
- 定义转换函数:
degmin_to_decimal <- function(degmin, direction) { degrees <- floor(degmin / 100) # 提取度数部分 minutes <- degmin - degrees * 100 # 提取分数部分 decimal <- degrees + minutes / 60 # 转为十进制度 # 根据方向调整正负 if (direction %in% c("S", "W")) decimal <- -decimal return(decimal) }
- 应用到数据框:
tracksFKt240108$lat_decimal <- mapply(degmin_to_decimal, tracksFKt240108$Latitude, tracksFKt240108$NorS) tracksFKt240108$lon_decimal <- mapply(degmin_to_decimal, tracksFKt240108$Longitude, tracksFKt240108$EorW)
验证:以你提供的示例值计算,3302.013 S会转为-33.03355,7136.339 W会转为-71.60565,和你给出的目标值一致(仅四舍五入差异)。
内容的提问来源于stack exchange,提问作者Nicolás Luna Bravo
相关产品推荐
相关产品推荐

