我有许多空间多边形,我正在使用sf和raster软件包进行栅格化。这件事取得了很好的效果,除了这一次,我对如何解决这个问题已经没有什么想法了:
我有一个多边形作为一个简单的特征多边形,和一个光栅模板。两者都被转换成等面积的Behrmann投影。多边形存在几何有效性问题,我用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')

从视觉上看,多边形看起来不错。
现在,我将其光栅化(为了与光栅兼容,我需要转换为SpatialPolygon ):
sp3 <- as(sp2, 'Spatial')
cover <- rasterize(sp3, rasterTemplate, getCover=TRUE)
plot(cover, box=F, axes=F)

问题是在澳大利亚有一家酒吧。
这是否意味着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')缓冲by 0,但这也解决不了问题。
发布于 2018-06-16 17:54:32
https://stackoverflow.com/questions/49326586
复制相似问题