栅格化错误:多边形到栅格转换会产生水平线

时间:2016-12-15 15:51:51

标签: r vector mapping gis raster

我正在使用R中的shapefile,我需要将其从多边形转换为栅格。虽然绘制时矢量看起来很完美,但使用' rasterize'转换为光栅时它们产生错误的水平线。以下是问题的一个示例:

Polygon Raster

以下是我正在使用的代码的一般示例(抱歉我无法上传数据本身,因为它是专有的):

spdf.dat <- readOGR("directory here", "layer here")

# Plot polygon
plot(spdf.dat, col = 'dimgrey', border = 'black')

# Extract boundaries
ext <- extent(spdf.dat)

# Set resolution for rasterization
res <- 1 

# determine no. of columns from extents and resolution
yrow <- round((ext@ymax - ext@ymin) / res)
xcol  <- round((ext@xmax - ext@xmin) / res)

# Rasterize base
rast.base <- raster(ext, yrow, xcol, crs = projection(spdf.dat))

# Rasterize substrate polygons
rast <- rasterize(spdf.dat, rast.base, field = 1, fun = 'min', progress='text')
plot(rast, col = 'dimgrey')

这似乎是源数据或栅格化函数的问题吗?有没有人见过这种错误?感谢您提供的任何建议。

3 个答案:

答案 0 :(得分:1)

为了使其正式化以便将问题视为已回答,我将在此复制我的评论回复。你可以接受它。

当我看到你的身影时,在我看来,光栅中有问题的出现线位于某些岛屿的同一纬度。尝试从数据集中删除这些岛。如果问题消失,您就会知道数据存在问题,数据存在于问题所在。

另一种选择是尝试gdalUtils包,它具有一个函数:gdal_rasterize。也许gdal在输入数据中不那么紧迫。

答案 1 :(得分:1)

我对华盛顿州圣胡安群岛以及毛伊岛的TIGER地区水资源数据进行栅格化时遇到了类似的问题 - 这两个空间多边形数据框都是由Tigris包使用由点定义的栅格返回的默认分辨率相距1 /弧秒的纬度/经度。有几条水平条纹从似乎是海岸线的急转弯开始。各种简化算法有助于,但不可预测,并且不完美。

尝试使用Velox软件包,因为它使用了引用类,因此需要一些时间。它可能有大小限制,因为它使用Boost几何库并在内存中工作。你不需要了解它,我不需要。与raster :: rasterize(特别是大型和复杂的空间线数据帧)相比,它速度很快,虽然我没有经历过百倍的加速声称,但我不会抱怨仅仅10或20加速的因素。最重要的是,velox $ rasterize()不会为我在raster :: rasterize所发现的位置留下条纹!

我发现它留下了大量的内存垃圾,当转换从velox $ rasterize派生的大型rasterLayers时,在以本机R .grd格式编写光栅(以INT1S格式保存磁盘空间)之前运行gc()很有帮助。

答案 2 :(得分:0)

根据我的经验,作为对该问题的后续工作。

水平线是上述“岛”的结果。但是,仅当多边形为“多部分”时才会发生。如果“岛”是不同的多边形而不是一个多边形的单独部分,则raster:rasterize()可以正常工作。