2014-09-26 12 views
14

Ich vermute, dass es eine einfache Lösung für das Problem gibt, das ich hatte, aber ich habe einige Probleme.Konvertieren eines "Map" -Objekts in ein "SpatialPolygon" -Objekt

ich folgendes map Objekt zu konvertieren Ich versuche:

require(maps) 
usa <- map("state") 

in ein SpatialPolygon Objekt mit der map2SpatialPolygons Funktion:

require(maptools) 
usa.sp <- map2SpatialPolygons(usa, IDs=usa$names,proj4string=CRS("+proj=longlat")) 

Ich halte die folgende Fehlermeldung erhalten:

Error in map2SpatialPolygons(usa, IDs = usa$names, proj4string = CRS("+proj=longlat")) : 
    map and IDs differ in length 

Nach einigen Resea rch, es sieht so aus, als hätten die IDs die Länge 63 und das map Objekt hat die Länge 169 nach Anwendung der Funktion .NAmat2xyList(cbind(map$x, map$y)) (für die ich die Quelle nicht finden kann).

Wer hat irgendwelche Ideen? Hier ist die Struktur des usa Kartenobjekt:

> str(usa) 
List of 4 
$ x : num [1:1705] -88.4 -88.1 -88 -87.9 -87.8 ... 
$ y : num [1:1705] 30.4 30.4 30.8 30.6 30.3 ... 
$ range: num [1:4] -124.7 -67 25.1 49.4 
$ names: chr [1:63] "alabama" "arizona" "arkansas" "california" ... 
- attr(*, "class")= chr "map" 

Antwort

13

gefunden Nur einige Code in dem Text "Applied Spatial Data Analysis mit R". Es funktioniert super!

require(maps) 
usa <- map("state", fill = TRUE) 

require(sp) 
require(maptools) 
IDs <- sapply(strsplit(usa$names, ":"), function(x) x[1]) 
usa <- map2SpatialPolygons(usa, IDs=IDs, proj4string=CRS("+proj=longlat +datum=WGS84")) 
+0

Wenn Sie die Karte verwenden, indem Sie die Weltdatenbank angeben und auf die Länder über ihren Regionennamen zugreifen, können Sie auf Regionen allgemeiner zugreifen: Deutschland <- map ("world", regions = "Germany", fill = TRUE) Wie ich weiß, ist nur eine begrenzte Anzahl von Datenbanken definiert, so wie Sie es genannt haben, Deutschland zum Beispiel nicht. Trotzdem hat deine Antwort meinen Tag gerettet! – Exocom

5

Polygone Fläche (Bereich), damit das Hauptargument ist fill = TRUE in

usa <- map('state', fill = TRUE) 

Ändern der Argument-Wert auf WAHR stoppt die Fehlermeldung.

+0

+1 Großartiger Punkt. Es wäre hilfreich, wenn die Map-Referenz angibt, dass das Argument "Füllen" diesen Downstream-Effekt hat. Die Art, wie es momentan geschrieben ist (Version 2.3-11), liest sich so, als ob es nur beeinflusst, wie die Karte auf dem Bildschirm gezeichnet wird. – Arthur