如何将WGS84转换为纬/长使用R

问题描述:

我有一个包含WGS84坐标的大数据集,我想将其转换为长/纬坐标。 WGS84坐标当前被分成自己的列(即“北”,“东”),并且另外具有相应区的“区”。总共有几个区域。如何将WGS84转换为纬/长使用R

有关将这些列转换为经纬度并将这些列保存到新列的方法的任何建议?该数据集的

例子:

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

Ummm WGS84 *是* lat-long(很好,但是当人们说“WGS84”时,他们通常意味着EPSG:4326 lat-long)。是否有机会窥视您的实际数据?否则,我们的确猜测这里... – Spacedman

+0

,原始数据是“长和LAT” 这里是在() 4952(经度)6470636(纬度)32(区) 目标列名数据例如格式看起来像例如: 13.665768(经度)59.739838(纬度) 我不会稳定所有这些格式:P – andreas

+1

这些看起来像UTM坐标而不是WGS84。你有可能将几行数据粘贴到你的问题的编辑中? – Spacedman

你可能想在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“+”zone“(例如,对于区域33,”+ init = epsg:32633“),然后转换为epsg:4326 lat-long,然后将批次合并为一个空间点数据帧:

需要这些:

> 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 

它们是否在预期的位置?

+0

非常感谢你!这确实解决了我的问题! :) – andreas

+0

更新:现在看起来像一些UTM /纬度长的坐标对应一个地图(即http://www.geoplaner.com/),而其他人有显着的不匹配。 任何关于可能的原因的建议? – andreas