Przekształcanie wielokąta w raster za pomocą R.

15

Próbuję przekonwertować plik kształtu do rastra w R. Moje podejście polega na tym, aby czytać w rastrze w następujący sposób:

library(rgdal) # Loads SP package by default
demo <- readOGR('F:/data/', 'shapefile') # Creates a SpatialPolygonsDataFrame class (sp)

To działa dobrze i mogę to wykreślić. Jest to jednak duży plik kształtów i chcę przekonwertować go na raster. Próbowałem następujące:

r <- raster(ncol=180, nrow=180)
Demo_ras = rasterize(r, demo, 'pop')  # pop is an integer here

Komunikat o błędzie:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "rasterize", for signature "RasterLayer", "SpatialPolygonsDataFrame"

Jestem nieco zdezorientowany co do prawidłowej kolejności argumentów. Próbowałem również tego:

Demo_ras = rasterize(demo, r, 'pop')

Co powoduje następujący błąd:

Error in .polygonsToRaster(x, y, ...) : 
  polygon and raster have no overlapping areas

Chociaż ma sens to, że rastra nie można wygenerować dla obszaru, który nie obejmuje SpatialPolygonsDataFrame, nie jestem pewien, jakie informacje muszę podać, aby raster zawierał ten SpatialPolygonsDataFrameobszar.

djq
źródło

Odpowiedzi:

23

Funkcja rasterize () chce najpierw mieć kształt (wielokąt), a następnie domyślnie raster, stąd twój pierwszy błąd. Drugie polecenie, które pokazałeś, Demo_ras = rasterize(demo, r, 'pop')jest poprawne, ale jak odkryłeś , musi ono pasować!

Możesz przypisać zakresy rastra, aby obejmowały te same zakresy wielokąta:

extent(r) <- extent(demo)

... powinno to działać w podanym przykładzie, o ile „pop” jest poprawną nazwą zmiennej w „demo”. Poniższe działało właśnie teraz (R 2.14 / OSX), gdzie AREA to kolumna liczb rzeczywistych w boundary.shp:

poly <- readOGR("/workingdirectory", "boundary") # does not work  with final slash '/' 
r <- raster(ncol=180, nrow=180)
extent(r) <- extent(poly)
rp <- rasterize(poly, r, 'AREA')
Simbamangu
źródło
Widziałem swoją edycję i sprawdziłem ponownie - ostatni ukośnik jest najwyraźniej opcjonalny w OSX, nie biorę go z Windowsem? Warto wiedzieć!
Simbamangu,
hmmm, miałem problem z ukośnikiem zarówno w systemie OSX, jak i Windows. Nie jestem pewien, czy używamy tej samej wersji, czy nie.
djq,
OSX 10.7.2 / R 2.14 na moim; zdecydowanie działa w obie strony. Czego używasz?
Simbamangu,
Aby zautomatyzować konwersję, napisałem to: github.com/brry/misc/blob/master/shp2raster.R
Berry