【发布时间】: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 坐标相同。我认为使用哪个库或方法来评估多边形有效性是一个有效的问题,因此人们通常知道如何修复有问题的数据。