在 R 中对栅格进行多边形化后几何无效

Invalid geometry after polygonizing rasters in R

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

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

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

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

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 中检查几何有效性,我最终只会得到几个有效的多边形:

Q. 有这么多多边形的几何形状无效的原因可能是什么?什么解决方案可以解决?

编辑

深入研究这个问题,我发现这个很有用resource讨论这个问题和不同的解决方案来处理它。
lwgeom 包中有一个特定的函数 st_make_valid 来修复无效的几何图形,它是 sf 包从 0.4.

版本开始的依赖项

我认为导致问题的原因有很多...重叠的几何图形、自相交的几何图形等。尝试以 0 的距离进行缓冲 - 不确定为什么会这样,但这是像这样的帖子中的常见解决方案和当我处在你的位置时,它也对我有用。