r - 将地理坐标从度数转换为十进制

标签 r gis

我想将我的地理坐标从度数转换为小数,我的数据如下:

         lat     long
105252 30°25.264 9°01.331
105253 30°39.237 8°10.811
105255 31°37.760 8°06.040
105258 31°41.190 8°06.557
105259 31°41.229 8°06.622
105260 31°38.891 8°06.281

我有这段代码,但我不明白为什么它不起作用:

convert<-function(coord){
tmp1=strsplit(coord,"°")
tmp2=strsplit(tmp1[[1]][2],"\\.")
dec=c(as.numeric(tmp1[[1]][1]),as.numeric(tmp2[[1]]))
return(dec[1]+dec[2]/60+dec[3]/3600) 
} 
don_convert=don1
for(i in 1:nrow(don1)){don_convert[i,2]=convert(as.character(don1[i,2]));              don_convert[i,3]=convert(as.character(don1[i,3]))}

转换函数可以工作,但我要求循环为我完成这项工作的代码不起作用。

任何建议都表示赞赏。

最佳答案

使用 CRAN 的 measurements 包,该包已经具有单位转换功能,因此您无需自己制作:

x = read.table(text = "
   lat     long
105252 30°25.264 9°01.331
105253 30°39.237 8°10.811
105255 31°37.760 8°06.040
105258 31°41.190 8°06.557
105259 31°41.229 8°06.622
105260 31°38.891 8°06.281",
header = TRUE, stringsAsFactors = FALSE)

设置好 data.frame 后:

# change the degree symbol to a space
x$lat = gsub('°', ' ', x$lat)
x$long = gsub('°', ' ', x$long)

# convert from decimal minutes to decimal degrees
x$lat = measurements::conv_unit(x$lat, from = 'deg_dec_min', to = 'dec_deg')
x$long = measurements::conv_unit(x$long, from = 'deg_dec_min', to = 'dec_deg')

最终产品:

                    lat             long
105252 30.4210666666667 9.02218333333333
105253         30.65395 8.18018333333333
105255 31.6293333333333 8.10066666666667
105258          31.6865 8.10928333333333
105259         31.68715 8.11036666666667
105260 31.6481833333333 8.10468333333333

关于r - 将地理坐标从度数转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14404596/

相关文章:

R - 仅在行子集上改变列子集

r - 使用 .SD 和 by 的 data.table 性能

javascript - 在传单 map 中绘制之前将 GeoJSON 多边形转换为点

python - 发生异常 : SSLError when adding basemap with Contextily to GeoPandas map

sql - 为什么用纬度/经度计算地理距离而不是缓存笛卡尔点?

r - 如何增加ggplot2中图例的大小

r - 一种更优雅的方式,将两个向量组合为单独的列(或数据帧),匹配行,并在不匹配的地方具有 NA

以英里为单位的 Python 距离到两个 gps 坐标之间的欧氏距离

java - 同时计算最快路线和一些点

r - 利用 dplyr 中的 across() 内的函数来处理成对列