隐藏多边形问题导致光栅化不正确

时间:2018-03-16 17:37:54

标签: r raster sf

我使用sfraster软件包格式化了许多空间多边形。它已经很好了,除了这一个案例,我已经没有关于如何解决问题的想法:

我有一个多边形作为简单的特征多边形和一个栅格模板。两者都已转变为贝尔曼投影的等面积。多边形存在几何有效性问题,我使用st_make_valid包中的lwgeom进行了修复。

library(sf)
library(lwgeom)
library(raster)

spfile <- 'sp.rds'
rasterfile <- 'rasterTemplate_150km.tif'

sp <- readRDS(spfile)
rasterTemplate <- raster(rasterfile)

# are there any geometry validity issues? yes!
st_is_valid(sp)
[1] FALSE
Warning message:
In evalq((function (..., call. = TRUE, immediate. = FALSE, noBreaks. = FALSE,  :
  Ring Self-intersection at or near point 9947244.3466675151 1450099.5373749144


sp2 <- st_make_valid(sp)

st_is_valid(sp2)
[1] TRUE

plot(sp2, col='blue')

enter image description here 在视觉上,多边形看起来很好。

现在我光栅化它(我需要转换为SpatialPolygon以与栅格兼容):

sp3 <- as(sp2, 'Spatial')

cover <- rasterize(sp3, rasterTemplate, getCover=TRUE)

plot(cover, box=F, axes=F)

enter image description here

问题是澳大利亚有一家酒吧。

这是否意味着st_is_valid未检测到该多边形仍存在几何有效性问题?如果是这样,那么这种类型的问题很难解决,因为它不容易被检测到,除了视觉......

回过头来,我可以确认as(sp, 'Spatial)发生光栅化问题,因此st_make_valid不会产生此问题。

如何解决此问题?

更新

以下建议使用st_cast。我试过了sp4 <- as(st_cast(sp, "POLYGON"), 'Spatial')。同样的光栅化问题仍然存在。

我还尝试使用sp5 <- as(st_buffer(sp, dist = 0), 'Spatial')缓冲0,但这也无法解决问题。

可以将多边形下载为.rds文件here。 可以下载栅格here

1 个答案:

答案 0 :(得分:1)

来自fasterize包的quickize函数显然不会导致相同的错误。 Fasterize也将合并到stars(see this issue)中,该包应该很快就会出现在CRAN上。

也不需要st_cast或st_make_valid。

library(sf)
library(fasterize)

df <- readRDS('sp.rds') %>% st_sf(field = 1)
template <- raster('rasterTemplate_150km.tif')
r <- fasterize(df, template, field = 'field')
plot(r)

enter image description here