0

我有一個包含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

回答

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「+」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