如何使用R将WGS84转换为Lat / Long

时间:2017-04-04 19:09:16

标签: r geolocation coordinates coordinate-systems gis

我有一个包含WGS84坐标的大型数据集,我希望将其转换为长/纬坐标。 WGS84坐标当前被分成自己的列(即" North"" East"),另外" Zone"与相应的区域。总共有几个区域。

有关将这些列转换为Lat / Long并将这些列保存到新列的方法的建议吗?

数据集示例:

Longitude Latitude zone  
233243    6571770   33  
262706    6653520   33  
195348    6573696   33   
256880    6645020   33  
260610    6654042   32  
13799     6505840   33  

1 个答案:

答案 0 :(得分:1)

您可能需要阅读sp包,坐标和spTransform函数。除此之外。

d作为数据框:

> d
  Longitude Latitude zone
1    233243  6571770   33
2    262706  6653520   33
3    195348  6573696   33
4    256880  6645020   33
5    260610  6654042   32
6     13799  6505840   33

计划是:按zone id拆分成一个列表,然后为每个列表元素创建一个空间点数据框,使用坐标参考系统" + init = epsg:326" +"区" (例如" + init = epsg:32633"对于区域33),然后转换为epsg:4326 lat-long,然后将批次rbind到一个空间点数据框:

需要这些:

> library(sp) ; library(raster)

按区域ID创建列表:

> byzone = split(d,d$zone)

在所有部件上,设置坐标,CRS和变换:

> zdll = lapply(byzone, 
    function(zd){
      coordinates(zd)=~Longitude+Latitude
      proj4string(zd)=paste0("+init=epsg:326",zd$zone[1])
      spTransform(zd, CRS("+init=epsg:4326"))
     })

现在加入他们:

> dll = do.call(rbind.SpatialPointsDataFrame, zdll)

如果您现在绘制dll,那么您将在lat-long上看到这些点。如果您想要坐标并与原始坐标进行比较,请执行以下操作:

> cbind(d, coordinates(dll))
  Longitude Latitude zone Longitude Latitude
5    233243  6571770   33  4.712098 59.95395
1    262706  6653520   33 10.327202 59.20086
2    195348  6573696   33 10.750120 59.95049
3    256880  6645020   33  9.663825 59.19259
4    260610  6654042   32 10.656096 59.87099
6     13799  6505840   33  6.663177 58.42136

他们是否在预期的位置?