2013-05-09 2 views
1

Je souhaite obtenir la latitude et la longitude d'un fichier de formes. Jusqu'à présent, je ne sais que lire le fichier de formes.Obtention de la latitude et de la longitude à partir d'objets spatiaux dans R

library(rgdal) 
centroids.mp <- readOGR(".","35DSE250GC_SIR") 

Mais comment puis-je extraire la latitude et la longitude de centroids.mp?

+0

On ne sait pas que votre question comprend « gdal » du tout Puisque readShapePoints est dans maptools (pas rgdal), pour savoir si la solution coordinates() fonctionnera pour la longitude/latitude, nous devons en voir plus, comme summary (centroids.mp). – mdsumner

+0

Vous avez raison. J'ai déjà édité le nom du paquet. Désolé pour ça. –

+0

Il n'y a pas de fonction 'readShapePoints()' dans ** rgdal **, donc c'est super clair ce que vous avez fait et ce que vous demandez. –

Répondre

8

Il y a quelques niveaux à cette question.

Vous demandez la longitude et la latitude, mais il se peut que ce ne soit pas le système de coordonnées utilisé par cet objet. Vous pouvez obtenir les coordonnées comme celui-ci

coordinates(centroids.mp) 

Notez que les « centres de gravité » seront toutes les coordonnées si c'est un SpatialPointsDataFrame, une liste de toutes les lignes coordonnées si c'est un SpatialLinesDataFrame, et seulement les centroïdes si c'est un SpatialPolygonsDataFrame.

Les coordonnées peuvent être la longitude et la latitude, mais l'objet peut ne pas le savoir. Utiliser

proj4string(centroids.mp) 

Si c'est "NA", alors l'objet ne sait pas (A). S'il inclut "+ proj = longlat", l'objet sait et ils sont longitude/latitude (B). Si elle inclut "+ proj =" et un autre nom (pas "longlat") alors l'objet sait et ce n'est pas la longitude/latitude (C).

Si (A) vous devez le savoir, ou cela peut être évident à partir des valeurs.

Si (B) vous avez terminé (bien que vous devriez d'abord vérifier les hypothèses, ces métadonnées peuvent être incorrectes).

Si (C), vous pouvez (assez fiable si vous devriez vérifier les hypothèses en premier) transformer la latitude de longitude (du système géodésique WGS84) comme ceci:

coordinates(spTransform(centroids.mp, CRS("+proj=longlat +datum=WGS84"))) 
+0

Est-ce 'pro4string' ou' proj4string'?(Vous avez une erreur sur le premier) –

+0

proj4string, désolé, fixé maintenant – mdsumner

+0

Merci, ça fonctionne bien maintenant :) –

4

Utilisez coordinates(), comme ceci:

library(maptools) 
xx <- readShapePoints(system.file("shapes/baltim.shp", package="maptools")[1]) 
coordinates(xx) 
#  coords.x1 coords.x2 
# 0  907.0  534.0 
# 1  922.0  574.0 
# 2  920.0  581.0 
# 3  923.0  578.0 
# 4  918.0  574.0 
#  [.......] 
+0

Je reçois une erreur lorsque j'essaie d'ouvrir un fichier de forme avec maptools. C'est l'erreur: "Erreur dans getinfo.shape (filen): Erreur lors de l'ouverture du fichier SHP". Avec Rgdal je peux lire le fichier. Savez-vous ce qui se passe? –

+0

Non. En général, j'utilise 'readOGR()' de ** rgdal ** pour lire dans les calques vectoriels. Si ** rgdal ** fonctionne, pourquoi ne pas l'utiliser et oublier ** maptools **? –

+0

Notez qu'il peut ne pas être en longitude/latitude, donc l'utilisation de coordinates() devrait inclure une vérification de sécurité sur proj4string (xx) - et si vous utilisez rgdal, ceci pourrait également inclure une transformation général n'est probablement pas sûr) – mdsumner

Questions connexes