Преобразование многоугольника в растр с использованием R


15

Я пытаюсь преобразовать шейп-файл в растр в R. Мой подход заключается в следующем:

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

Это прекрасно работает, и я могу построить это. Однако это большой шейп-файл, и я хочу преобразовать его в растр. Я пробовал следующее:

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

Сообщение об ошибке:

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

Я немного запутался, что является правильным порядком аргументов. Я также попробовал это:

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

Что приводит к следующей ошибке:

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

Хотя имеет смысл, что растр не может быть сгенерирован для области, которая не покрывает область SpatialPolygonsDataFrame, я не уверен, какую информацию мне нужно указать, чтобы растр содержал эту SpatialPolygonsDataFrameобласть.

Ответы:


23

Функция rasterize () хочет сначала иметь форму (многоугольник), а затем растр, поэтому ваша первая ошибка. Вторая команда, которую вы показали, Demo_ras = rasterize(demo, r, 'pop')это правильный путь, но, как вы обнаружили, ей нужны экстенты, чтобы соответствовать!

Вы можете назначить экстенты растра для покрытия тех же экстентов многоугольника:

extent(r) <- extent(demo)

... это должно работать для предоставленного вами примера, если «pop» - это правильное имя переменной в «demo». Следующее работает только сейчас (R 2.14 / OSX), где AREA - это столбец действительных чисел в border.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')

Увидел ваши изменения и проверил снова - последний слеш, по-видимому, необязателен для OSX, я так понимаю, не для Windows? Стоит знать!
Симбамангу

хм, у меня была проблема с косой чертой как на OSX, так и на Windows .. не уверен, что мы используем одну и ту же версию или нет.
DJQ

OSX 10.7.2 / R 2.14 на моем; определенно работает в ту или иную сторону. Что вы используете?
Симбамангу

Чтобы автоматизировать преобразование, я написал это: github.com/brry/misc/blob/master/shp2raster.R
Берри
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.