如何使用R将WGS84转换为Lat/Long
我有一个包含WGS84坐标的大型数据集,我想将其转换为Long/Lat坐标。WGS84坐标目前分为自己的列(即“北”“东”),另外还有带相应区域的“区域”。总共有几个区域 关于如何将这些列转换为Lat/Long并保存为新列,您有什么建议吗 数据集示例:如何使用R将WGS84转换为Lat/Long,r,geolocation,coordinates,coordinate-systems,gis,R,Geolocation,Coordinates,Coordinate Systems,Gis,我有一个包含WGS84坐标的大型数据集,我想将其转换为Long/Lat坐标。WGS84坐标目前分为自己的列(即“北”“东”),另外还有带相应区域的“区域”。总共有几个区域 关于如何将这些列转换为Lat/Long并保存为新列,您有什么建议吗 数据集示例: Longitude Latitude zone 233243 6571770 33 262706 6653520 33 195348 6573696 33 256880 6645020 3
Longitude Latitude zone
233243 6571770 33
262706 6653520 33
195348 6573696 33
256880 6645020 33
260610 6654042 32
13799 6505840 33
您可能需要阅读
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
该计划是:通过区域
id将列表拆分为一个列表,然后为每个列表元素创建一个空间点数据框,使用坐标参考系“+init=epsg:326”+“区域”(例如区域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
它们在预期的位置吗?嗯,WGS84是lat-long(嗯,有点像,但是当人们说“WGS84”时,通常是指EPSG:4326 lat-long)。有没有可能偷看一下你的实际数据?否则我们在这里猜测…事实上,原始数据是“长而宽”这里是列名称为()4952(经度)6470636(纬度)32(区域)的数据示例目标格式看起来像:例如:13.665768(经度)59.739838(纬度)我对所有这些格式都不稳定:p这些格式看起来像UTM坐标,而不是WGS84。有没有可能将几行数据粘贴到问题的编辑中?谢谢您的回复!我编辑了主要帖子:)非常感谢!,这确实解决了我的问题!:)更新:现在看起来有些UTM/lat长Cordinate在地图上对应(即),而另一些有明显的不匹配。。对可能的原因有什么建议吗?