У меня есть растровый слой SRTM длительностью 1 ar c с USGS .
Я пытаюсь превратить этот растр в набор полигонов для каждых 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")
Вывод приведенного выше кода выглядит следующим образом:
![enter image description here](https://i.stack.imgur.com/sefdm.jpg)
Однако, если я проверяю правильность геометрии в QGis, я получаю только несколько допустимых многоугольников:
![enter image description here](https://i.stack.imgur.com/AY1OB.jpg)
Q. В чем может быть причина наличия такого количества многоугольников с неверной геометрией? Какое решение, чтобы это исправить?
РЕДАКТИРОВАТЬ
Копая немного больше в проблему, я нашел этот полезный ресурс говорить о проблеме и различных решения для его решения.
Существует специальная c функция st_make_valid
для исправления неверных геометрий в пакете lwgeom
, которая является зависимостью пакета sf
с версии 0.4.