2014-09-17 4 views
0

Compte tenu d'une série chronologique zoo avec des colonnes "lat", "LON" et "valeur":R: Lat-Lon UTM pour les séries chronologiques de zoo

z <- zoo(...) 
# anyone knows how to create a simple example series here? 

Je dois convertir les degrés lat et lon à UTM pour effectuer d'autres opérations comme le calcul de distance. Après un peu de recherche, je suis venu avec un extrait de travail qui convertit tout à un data.frame:

d <- as.data.frame(z) 
coordinates(d) <- ~ lon+lat 
proj4string(d) <- CRS("+proj=longlat +datum=WGS84") 
d.final <- spTransform(d, CRS(paste("+proj=utm +zone=",zone," ellps=WGS84",sep=""))) 

Cela supprime les premières colonnes lat et ajoute deux LON et nouveaux UTM comme des colonnes lat et longitude. Y at-il un moyen simple de le faire directement avec l'objet zoo?

En outre, cet extrait manque clairement d'informations de la variable zone. De Determining UTM zone (to convert) from longitude/latitude nous apprenons comment obtenir le numéro de la zone de la longitude:

zone.number <- (floor((z$lon + 180)/6) %% 60) + 1 

Mais je ne toujours pas maintenant comment calculer la zone lettre, par exemple. "N". Comment l'obtenir? En général, je peux m'attendre à ce que la zone de toutes mes séries chronologiques soit constante.

Cette solution modifiée à partir d'une réponse a été ce qui a été utilisé:

# coming from a zoo time series z with columns z$lat and z$lon 
library(rgdal) 
# assume that z stays within a zone 
zone <- (floor((z$lon[1] + 180)/6) %% 60) + 1 
# convert 
utm <- project(merge(z$lon, z$lat), paste0("+proj=utm +zone=", zone)) 
# assign UTM values to new columns in z 
z$utmx <- utm[,1] 
z$utmy <- utm[,2] 

Répondre

1

Essayez ceci:

library(zoo) 
library(rgdal) 
z <- zoo(cbind(lat = 12:14, lon = 10:12, value = 1:3)) # test data 

zone <- (floor((z$lon[1] + 180)/6) %% 60) + 1 
cbind(utm = project(z[, 2:1], paste0("+proj=utm +zone=", zone)), value = z[, 3]) 

donne:

 utm.1 utm.2 value 
1 608864.2 1326751  1 
2 716922.6 1437988  2 
3 824104.0 1549780  3 

utm.1 et utm.2 sont x et y (ou easting a nd northing) respectivement. Notez que les hypothèses quant au positif/négatif sont tels que dans

http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html

et que la sortie de code de R ci-dessus doubles contrôles à cette page. Il vérifie également la sortie dans le lien dans les commentaires si vous regardez la sortie UTM standard sur cette page.

Mise à jour: corrections et exemple modifié.

+0

Comment la conversion peut-elle être indépendante de la lettre de zone? Je m'attends à ce que la forme de la courbure de la géométrie UTM soit liée à la latitude beaucoup plus que la longitude. – Martin

+0

Il vérifie pour moi. Veuillez fournir un exemple qu'il ne vérifie pas. –

+0

Je viens de découvrir que «projet» a besoin de «lon» d'abord, que «lat», ce qui est contradictoire et je ne peux pas voir documenté clairement. Donc ce simple liner convertit latlon en UTM dans R: 'projet (t (c (lon, lat)), paste0 (" + proj = utm + zone = ", zone)'. – Martin

-1

Ce post est fondamentalement une reformulation d'une autre réponse et a été déplacé vers le bas de la question.

+0

(1) Il crée un objet UTM à partir d'une série temporelle zoo, avec laquelle on peut tout faire: remplacer les colonnes, ajouter, utiliser ailleurs, ... (2) Il utilise une série de zoo arbitraires où les numéros et l'ordre des colonnes ne sont pas connus – Martin

+0

Les gens ont une grande quantité de colonnes dans leurs séries chronologiques, qui changent si souvent, que vous ne savez jamais à quelle position se trouve votre colonne. C'est pourquoi les noms de colonnes existent, la colonne "value" n'est qu'un exemple.Dans cette réponse, il peut y avoir des centaines de colonnes avec des valeurs différentes, et vous pouvez remplacer ou ajouter une colonne UTM sans vous soucier des autres colonnes. C'est un avantage évident pour votre solution. En outre, j'ai augmenté votre réponse il y a quelques heures et j'ai insisté sur le fait que les crédits devraient vous être accordés. Je ne comprends vraiment pas vos émotions ici. – Martin

Questions connexes