2014-09-26 6 views
14

Zgaduję, że istnieje proste rozwiązanie problemu, który miałem, ale mam pewne problemy.Przekształcanie obiektu "mapy" w obiekt "Przestrzennyokolipt"

Próbuję przekonwertować następujący map obiektu:

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

w SpatialPolygon obiektu przy użyciu map2SpatialPolygons funkcję:

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

ciśgle następujący błąd:

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

Po części resea rch, wygląda na to, że identyfikatory mają długość 63, a obiekt map ma długość 169 po zastosowaniu funkcji .NAmat2xyList(cbind(map$x, map$y)) (dla której nie mogę znaleźć źródła).

Ktoś ma jakieś pomysły? Oto struktura obiektu usa mapy:

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

Odpowiedz

13

Wystarczy znaleźć jakiś kod w tekście „Applied Spatial Analysis Dane z badania”. Działa świetnie!

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

Korzystając z mapy, podając światową bazę danych i uzyskując dostęp do krajów według nazwy regionu, można uzyskać dostęp do regionów w bardziej ogólny sposób: Niemcy <- mapa ("świat", regiony = "Niemcy", wypełnienie = PRAWDA) Jak rozumiem, tylko ograniczony zestaw baz danych jest zdefiniowany w sposób, w jaki je nazwałeś, na przykład Niemcy nie są. Niemniej Twoja odpowiedź uratowała mój dzień! – Exocom

5

wielokąty mają powierzchnię (powierzchnię), dlatego kluczowym argumentem jest fill = TRUE w

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

Zmiana wartości argumentów na TRUE zatrzymuje się komunikat o błędzie.

+0

+1 Świetny punkt. Byłoby pomocne, gdyby odwołanie do mapy wskazywało, że argument "wypełnij" ma taki efekt końcowy. Sposób, w jaki jest obecnie napisany (wersja 2.3-11), czyta tak, jakby wpływał tylko na sposób rysowania mapy na ekranie. – Arthur

Powiązane problemy