我正在使用库sp,按照此处和此处的建议将度-分-秒(dms)表示转换为十进制度(dd)。
如果我使用 sp 尝试以下代码,结果如下:
loc$Lat<-sp::char2dms(loc$Lat)
rep(value, length.out = nrows) 中的错误: 尝试复制类型为"S4"的对象
我的数据示例如下:
c("39d47m01s N", "15d38m08s N", "12d45m01s N", "13d17m25s N",
"36d34m29s N", "24d46m34s S", "11d52m39s S", "39d47m01s N", "30d52m34s N",
"34d59m47s S")
我需要从 dms 转换为 dd,因为我想计算点之间的哈弗辛(大圆距离)。
我也愿意使用其他软件包进行转换。
我尝试使用库 birk,但它给了我一些毫无意义的答案,其中经度/经度大于 1000。在尝试 birk 之前,我已经将经度/经度表示转换为 birk 在其conv_unit
函数中接受的表示形式
这可能已经关闭了,也许比我知识渊博的人可以插话,但在这里。
我从 R-help 邮件列表(6 年前)中找到了一个线程,该线程讨论了使用公式 Decimal degrees = Degrees + (Minutes/60) + (Seconds/3600)
从 DMS 转换为十进制度。
使用正则表达式找到合适的元素,我构造了一个 data.frame,用于应用上述公式。将南和西坐标乘以 -1 以使其为负数。
xy <- c("39d47m01s N", "15d38m08s N", "12d45m01s N", "13d17m25s N",
"36d34m29s N", "24d46m34s S", "11d52m39s S", "39d47m01s N", "30d52m34s N",
"34d59m47s S")
nxy <- data.frame(degs = as.numeric(gsub("(^\d+)(.+$)", "\1", xy)),
mins = as.numeric(gsub("(^.+d)(\d+)(m.+$)", "\2", xy)),
secs = as.numeric(gsub("(^.+m)(\d+)(s [A-Z]$)", "\2", xy)),
direction = gsub("(^.+ )([A-Z])$", "\2", xy))
nxy$indec <- with(nxy, degs + (mins/60) + (secs/3600))
nxy[nxy$direction %in% c("W", "S"), "indec"] <- nxy[nxy$direction %in% c("W", "S"), "indec"] * -1
nxy
degs mins secs direction indec
1 39 47 1 N 39.78361
2 15 38 8 N 15.63556
3 12 45 1 N 12.75028
4 13 17 25 N 13.29028
5 36 34 29 N 36.57472
6 24 46 34 S -24.77611
7 11 52 39 S -11.87750
8 39 47 1 N 39.78361
9 30 52 34 N 30.87611
10 34 59 47 S -34.99639
或者,你可以让char2dms为你工作。
nxy$char2dms <- as.numeric(sp::char2dms(xy, chd = "d", chm = "m", chs = "s"))
degs mins secs direction indec char2dms
1 39 47 1 N 39.78361 39.78361
2 15 38 8 N 15.63556 15.63556
3 12 45 1 N 12.75028 12.75028
4 13 17 25 N 13.29028 13.29028
5 36 34 29 N 36.57472 36.57472
6 24 46 34 S -24.77611 -24.77611
7 11 52 39 S -11.87750 -11.87750
8 39 47 1 N 39.78361 39.78361
9 30 52 34 N 30.87611 30.87611
10 34 59 47 S -34.99639 -34.99639
我刚刚想通了。
尽管sp::char2dms
接受称为chd, chm and chs
的参数,这些参数应该让我们指定用于度,分和秒的分隔符,但它们似乎不起作用。
更改表示坐标的格式后,该函数按预期工作。因此,我只需要确保我的坐标采用 sp::char2dms 默认期望的格式,其形式为:
15d5'52.4394" N 145d40'26.04" E
度、分和秒的分隔符分别是 d、' 和 "。