【问题标题】:Invalid geometry after polygonizing rasters in R在R中多边形化栅格后几何无效
【发布时间】:2020-07-13 21:03:14
【问题描述】:

我有一个来自USGS 的 1 角秒 SRTM 栅格图层。

我正在尝试将该栅格转换为每 100 m 高程带的一组多边形。然后我想将具有相同属性的多边形分解或合并在一起。

我的问题是大多数多边形在这个过程中得到了无效的几何图形。

我不确定问题出在哪里,所以我将描述我所做的所有步骤:

library(tidyverse)
library(sf)
library(stars)

# First I open the raster, remove NAs and set the min and max values
r <- raster::raster(my_raster)
raster::NAvalue(r) <- -1
r <- raster::setMinMax(r)

# Then I reclassify the raster in 100 m elevational bands
k <- 100
lv <- raster::minValue(r) %>% floor_nearest(100)
hv <- raster::maxValue(r) %>% floor_nearest(100)
s <- seq(lv, hv, k)

tibble(
  lower = s,
  higher = s + k,
  new = s
) %>% 
  raster::reclassify(r, ., right = FALSE) %>% 

  # Finally, I polygonize the reclassified raster and save the shapefile
  st_as_stars() %>% 
  st_as_sf(as_points = FALSE, merge = TRUE, connect8 = TRUE) %>% 
  st_write(dsn = "my_shapefile.shp")

上述代码的输出如下所示:

但是,如果我在 QGis 中检查几何有效性,我最终会得到几个有效的多边形:

问。为什么会有这么多带有无效几何图形的多边形?有什么解决办法?

编辑

深入研究这个问题,我发现resource 谈论这个问题以及处理它的不同解决方案很有用。
lwgeom 包中有一个特定的函数st_make_valid 可以修复无效的几何图形,它是自 0.4 版本以来的 sf 包的依赖项。

【问题讨论】:

  • 注意到@Brent-Pease 的回答,好奇在 QGIS 中哪里/如何检查多边形有效性。 is 是 postGIS 中的 JTE(Java 拓扑引擎),并且仅关闭第一个和最后一个 x,y 坐标相同。我认为使用哪个库或方法来评估多边形有效性是一个有效的问题,因此人们通常知道如何修复有问题的数据。

标签: r gis raster sf


【解决方案1】:

我认为问题的原因有很多...重叠的几何图形、自相交的几何图形等。尝试缓冲 0 的距离 - 不知道为什么会这样,但它是此类帖子的常见解决方案,它也当我在你的鞋子里为我工作。

【讨论】:

  • 谢谢,这解决了问题。我还发现可以从sf 包中访问一个特定的函数来修复无效的几何图形(请参阅我帖子中的编辑)。它产生的输出略有不同,但在某些情况下可能更合适。
猜你喜欢
  • 1970-01-01
  • 2015-09-27
  • 2022-01-18
  • 1970-01-01
  • 2020-11-12
  • 2021-01-20
  • 2021-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多