首页 > 解决方案 > 如何将我的坐标从六十进制更改为十进制?

问题描述

我正在使用不同格式的坐标,我希望能够在 r 中从十进制转换为六十进制格式,反之亦然。我有一个函数可以让我快速将坐标从六十进制转换为十进制,但不是相反的方向:

coord <- c("65º26.800'N",   "30º59.600'W")      #Or specify a vector

#Convert function

dms2dec <- function(dms, separators = c("º", "º", "\'", "\"")) {
  # version 1.0 (25 Sep 3013)
  # dms: a vector (or column) of latitude or longitude in degrees-minutes-seconds-hemisfere, e.g. 41? 34' 10.956" N (with or without spaces)
  # separators: the characters that are separating degrees, minutes and seconds in dms
  
  dms <- as.character(dms)
  dms <- gsub(pattern = " ", replacement = "", x = dms)
  for (s in separators) dms <- gsub(pattern = s, replacement = "_splitHere_", x = dms)
  
  splits <- strsplit(dms, split = "_splitHere_")
  n <- length(dms)
  deg <- min <- sec <- hem <- vector("character", n)
  
  for (i in 1:n) {
    deg[i] <- splits[[i]][1]
    min[i] <- splits[[i]][2]
    hem[i] <- splits[[i]][4]
  }
  
  dec <- as.numeric(deg) + (as.numeric(min) / 60)
  sign <- ifelse (hem %in% c("N", "E"), 1, 1)
  dec <- sign * dec
  return(dec)
}  # end dms2dec function 

dms2dec(df$lat)

知道如何修改此函数,以便选择十进制格式的纬度或经度值以六十进制格式返回给我吗?

提前致谢。

标签: rgisgeo

解决方案


推荐阅读