使用R将多边形转换为栅格


15

我正在尝试将shapefile转换为R中的栅格。我的方法是按如下方式读取栅格:

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

这个工作正常,我可以绘制它。但是,它是一个很大的shapefile,我想将其转换为栅格。我尝试了以下方法:

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区域。

Answers:


23

rasterize()函数希望首先具有形状(多边形),然后默认具有栅格,因此是您的第一个错误。您显示的第二个命令Demo_ras = rasterize(demo, r, 'pop')是正确的方法,但是您发现它需要范围匹配!

您可以分配栅格的范围以覆盖面的相同范围:

extent(r) <- extent(demo)

...只要“ pop”是“ demo”中变量的正确名称,这应该对您提供的示例有效。下列代码现在可以工作了(R 2.14 / OSX),其中AREA是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')

看到您的编辑并再次检查-最终的正斜杠在OSX上显然是可选的,我不认为Windows可以吗?值得知道!
Simbamangu 2011年

嗯,我在OSX和Windows上都有斜线问题。.不确定我们是否使用相同的版本。
djq 2011年

我的OSX 10.7.2 / R 2.14;绝对可以全面运行。你在用什么
Simbamangu 2011年

为了自动进行转换,我写道:github.com/brry/misc/blob/master/shp2raster.R
Berry
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.