将 DMS 坐标转换为 R 中的十进制度数
Convert DMS coordinates to decimal degrees in R
我有以下 DMS 格式的坐标。我需要将它们转换为十进制度数。
# Libraries
> library(sp)
> library(magrittr)
# Latitide & Longitude as strings
> lat <- '21d11m24.32s'
> lng <- '104d38m26.88s'
我试过:
> lat_d <- char2dms(lat, chd='d', chm='m', chs='s') %>% as.numeric()
> lng_d <- char2dms(lng, chd='d', chm='m', chs='s') %>% as.numeric()
> print(c(lat_d, lng_d))
[1] 21.18333 104.63333
虽然接近,但这个结果与我从 this website 得到的输出不同。根据这个网站,正确的输出应该是:
Latitude: 21.190089
Longitude: 104.6408
好像sp::char2dms
和as.numeric
在坐标四舍五入。我在使用这种方法转换大量 DMS 坐标时注意到了这个问题,因为转换后唯一值的数量急剧减少。
你说得对!说实话,我没有注意到这个问题。
为了解决这个问题,这里有一个使用包 measurements
:
的解决方案
REPREX:
install.packages("measurements")
library(measurements)
lat <- conv_unit('21 11 24.32', from = "deg_min_sec", to = "dec_deg")
long <- conv_unit('104 38 26.88' , from = "deg_min_sec", to = "dec_deg")
print(c(lat, long))
#> [1] "21.1900888888889" "104.6408"
由 reprex package (v2.0.1)
于 2021-10-07 创建
从 OP 编辑
这也可以通过在纬度上添加'N'
或'S'
以及在经度上添加'E'
或'W'
来解决。
# Add character to lat & long strings
> lat_d <- char2dms(paste0(lat,'N'), chd='d', chm='m', chs='s') %>% as.numeric()
> lng_d <- char2dms(paste0(lng,'W'), chd='d', chm='m', chs='s') %>% as.numeric()
> print(c(lat_d, lng_d))
[1] 21.19009 -104.64080
我有以下 DMS 格式的坐标。我需要将它们转换为十进制度数。
# Libraries
> library(sp)
> library(magrittr)
# Latitide & Longitude as strings
> lat <- '21d11m24.32s'
> lng <- '104d38m26.88s'
我试过:
> lat_d <- char2dms(lat, chd='d', chm='m', chs='s') %>% as.numeric()
> lng_d <- char2dms(lng, chd='d', chm='m', chs='s') %>% as.numeric()
> print(c(lat_d, lng_d))
[1] 21.18333 104.63333
虽然接近,但这个结果与我从 this website 得到的输出不同。根据这个网站,正确的输出应该是:
Latitude: 21.190089
Longitude: 104.6408
好像sp::char2dms
和as.numeric
在坐标四舍五入。我在使用这种方法转换大量 DMS 坐标时注意到了这个问题,因为转换后唯一值的数量急剧减少。
你说得对!说实话,我没有注意到这个问题。
为了解决这个问题,这里有一个使用包 measurements
:
REPREX:
install.packages("measurements")
library(measurements)
lat <- conv_unit('21 11 24.32', from = "deg_min_sec", to = "dec_deg")
long <- conv_unit('104 38 26.88' , from = "deg_min_sec", to = "dec_deg")
print(c(lat, long))
#> [1] "21.1900888888889" "104.6408"
由 reprex package (v2.0.1)
于 2021-10-07 创建从 OP 编辑
这也可以通过在纬度上添加'N'
或'S'
以及在经度上添加'E'
或'W'
来解决。
# Add character to lat & long strings
> lat_d <- char2dms(paste0(lat,'N'), chd='d', chm='m', chs='s') %>% as.numeric()
> lng_d <- char2dms(paste0(lng,'W'), chd='d', chm='m', chs='s') %>% as.numeric()
> print(c(lat_d, lng_d))
[1] 21.19009 -104.64080