2014-09-26 17 views
14

sto indovinando c'è una soluzione semplice al problema Ho avuto, ma sto avendo qualche problema.Conversione di un oggetto "mappa" ad un oggetto "SpatialPolygon"

Sto cercando di convertire l'map seguente oggetto:

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

in un oggetto SpatialPolygon utilizzando la funzione di map2SpatialPolygons:

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

continuo a ricevere il seguente errore:

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

Dopo alcuni resea RCH, sembra che gli ID di avere una lunghezza 63 e l'oggetto map ha lunghezza 169 dopo l'applicazione della funzione .NAmat2xyList(cbind(map$x, map$y)) (per la quale non riesco a trovare la sorgente).

Qualcuno ha qualche idea? Ecco la struttura dell'oggetto usa mappa:

> 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" 

risposta

13

appena trovato un po 'di codice nel testo "Spatial Data Analysis applicata con R". Funziona alla grande!

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

Quando si utilizza la mappa specificando il database mondiale e si accede ai paesi in base al nome della propria regione, è possibile accedere alle regioni in modo più generale: germania <- mappa ("mondo", regioni = "Germania", fill = TRUE) quanto ho capito solo un insieme limitato di banche dati è definita nel modo in cui hai chiamato esso, la Germania per esempio non lo è. Tuttavia, la tua risposta mi ha salvato la giornata! – Exocom

5

poligoni hanno superficie (area), pertanto l'argomento chiave è fill = TRUE in

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

Cambiando il valore di argomento TRUE arresta il messaggio di errore.

+0

+1 Grande punto. Sarebbe utile se il riferimento? Map specificasse che l'argomento "fill" aveva questo effetto downstream. Il modo in cui è attualmente scritto (versione 2,3-11), si legge come esso influisce solo come la mappa è disegnato sullo schermo. – Arthur

Problemi correlati