首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐多边形问题导致不正确的栅格化

隐多边形问题导致不正确的栅格化
EN

Stack Overflow用户
提问于 2018-03-16 17:37:54
回答 1查看 202关注 0票数 3

我有许多空间多边形,我正在使用sfraster软件包进行栅格化。这件事取得了很好的效果,除了这一次,我对如何解决这个问题已经没有什么想法了:

我有一个多边形作为一个简单的特征多边形,和一个光栅模板。两者都被转换成等面积的Behrmann投影。多边形存在几何有效性问题,我用st_make_validlwgeom包修复了这个问题。

代码语言:javascript
复制
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 ):

代码语言:javascript
复制
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,但这也解决不了问题。

多边形可以作为.rds文件这里下载。栅格可以下载这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 17:54:32

来自土化包的fasterize函数显然不会导致相同的错误。Fasterize也将被合并到星辰(见本议题)中,它很快就会在CRAN上运行。

也没有必要使用st_cast或st_make_valid。

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49326586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档