Неверная геометрия после полигонизации растров в R - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть растровый слой 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

Однако, если я проверяю правильность геометрии в QGis, я получаю только несколько допустимых многоугольников:
enter image description here

Q. В чем может быть причина наличия такого количества многоугольников с неверной геометрией? Какое решение, чтобы это исправить?

РЕДАКТИРОВАТЬ

Копая немного больше в проблему, я нашел этот полезный ресурс говорить о проблеме и различных решения для его решения.
Существует специальная c функция st_make_valid для исправления неверных геометрий в пакете lwgeom, которая является зависимостью пакета sf с версии 0.4.

1 Ответ

1 голос
/ 02 апреля 2020

Я думаю, что есть многочисленные причины проблемы ... перекрывающиеся геометрии, самопересекающиеся геомы и т. Д. c. Попробуйте выполнить буферизацию на расстоянии 0 - не знаю, почему это работает, но это распространенное решение для подобных сообщений, и оно также работало для меня, когда я был на вашем месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...