R语言中经纬度度分秒转小数

使用R语言将经纬度度分秒转为小数

原始**度分秒**数据----------->>>>>>>> -----转换后的数据如图:

R代码如下: 

rm(list = ls())

# 安装加载相应的包
library(xlsx)
library(stringr)
library(magrittr)
library(sp)

##### 公式开始 #####
dms2dd <- function(dms, EN="E"){  # EN默认设置为E,在DMS类中有E和N方向。在这里我们只需将度分秒转为数字,所以不必考虑方向的问题。
  char.dms <- str_c(dms,"E") %>%    # 并不影响最后的结果
    str_replace(replacement = "d", pattern = "°") %>% # 这里用英文符号'和"替换了中文符号′与″
    str_replace(replacement = "'", pattern = "′") %>% # 注意符号是中文字符还是英文字符
    str_replace(replacement = "\"", pattern = "″")    # "与″ '与′ 是不一样的。 DMS类中需要英文字符
  dms <- char2dms(char.dms)
  d <- dms@deg # 从dms类中获取度、分、秒的数值
  m <- dms@min
  s <- dms@sec
  dd <- d + m/60 + s/3600 # 进行数据转换
  return(dd)
}
##### 公式结束 #####


# 测试 ----------------------------------------------------------------------

# 1.导入数据
lonlat <- xlsx::read.xlsx(file = "lonlat.xlsx", sheetIndex = 1, header = T) 

# 2.数据度分秒转数字
templist <- lapply(lonlat, dms2dd)
outlonlat <- do.call(cbind, templist)

# 3.输出结果
write.xlsx(outlonlat, file = "lonlat_new.xlsx", row.names = F)


这里主要利用sp包中DMS类中的相关方法。有兴趣的小伙伴可以看下例如:char2dms()和dd2dms()等相关函数。

首先利用stringr包中的字符串替换函数str_replace(),将度分秒的符号直接转为DMS类中可以识别的符号,然后进行数据的转换。

    

 

 

 

 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值