0

J'ai un grand ensemble de données contenant les coordonnées WGS84 que je veux convertir en coordonnées Long/Lat. Les coordonnées WGS84 sont actuellement séparées en colonnes propres (c'est-à-dire "Nord" "Est"), et en plus "Zone" avec la zone correspondante. Il y a plusieurs zones au total.Comment faire pour convertir WGS84 à Lat/Long en utilisant R

Des suggestions sur un moyen de convertir ces colonnes en Lat/Long et les enregistrer dans de nouvelles colonnes?

Exemple de l'ensemble de données:

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

Ummm WGS84 * est * lat-long (enfin, quand les gens disent "WGS84", ils signifient généralement EPSG: 4326 lat-long). Une chance de jeter un coup d'œil à vos données réelles? Sinon, nous devinons ici ... – Spacedman

+0

En effet, les données brutes était "long et lat" est par exemple de données ici avec le nom de colonne() 4952 (longitude) 6470636 (latitude) 32 (zone) L'objectif le format ressemble à: 13.665768 (longitude) 59.739838 (latitude) Je ne suis pas sur tous ces formats: P – andreas

+1

Ils ressemblent à des coordonnées UTM plutôt qu'à WGS84. Y a-t-il une chance que vous puissiez coller quelques lignes de vos données dans une édition de votre question? – Spacedman

Répondre

1

Vous pouvez lire sur le paquet sp, coordonne, et la fonction spTransform. Entre autres choses.

Pour d comme une trame de données:

> 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 

Le plan est: divisé en une liste par l'identifiant zone, puis pour chaque élément de liste à créer en tant que trame de données de points spatiale, en utilisant le système de coordonnées de référence « + init = epsg: 326 "+" zone "(par exemple" + init = epsg: 32633 "pour la zone 33), puis transformez-la en epsg: 4326 lat-long, puis reliez le lot à une seule trame de points spatiaux:

Besoin de:

> library(sp) ; library(raster) 

Créer une liste par zone ID:

> byzone = split(d,d$zone) 

sur toutes les parties, définir les coordonnées, CRS et transform:

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

maintenant les rejoindre:

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

Si vous tracez dll maintenant, vous verrez les points sur lat-long. Si vous voulez que les coordonnées et de comparer avec les coordonnées originales, faites ceci:

> 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 

Sont-ils à l'endroit prévu?

+0

Merci beaucoup! Cela a effectivement résolu mes problèmes! :) – andreas

+0

Mise à jour: Maintenant, il semble que certains des UTM/lat long cordinates correspondent sur une carte (à savoir http://www.geoplaner.com/) alors que d'autres ont une disparité significative .. Des suggestions sur la cause possible? – andreas