你可能想在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
它們是否在預期的位置?
Ummm WGS84 *是* lat-long(很好,但是當人們說「WGS84」時,他們通常意味着EPSG:4326 lat-long)。是否有機會窺視您的實際數據?否則,我們的確猜測這裏... – Spacedman
,原始數據是「長和LAT」 這裏是在() 4952(經度)6470636(緯度)32(區) 目標列名數據例如格式看起來像例如: 13.665768(經度)59.739838(緯度) 我不會穩定所有這些格式:P – andreas
這些看起來像UTM座標而不是WGS84。你有可能將幾行數據粘貼到你的問題的編輯中? – Spacedman