Перетворіть растрові в гладкі контурні багатокутники в QGIS


14

Я мав обмежений успіх у створенні гладких контурних багатокутників із растрових шарів.

Я створив контурні лінії та граничні полілінії, а потім застосував об'єднання QGIS. Потім я використовую QGIS Polygonize. Потім використовуйте зональну статистику до вихідного растру, щоб отримати значення на полігонах.

2-й метод, який я спробував, - це перетворити растр у багатокутник. Потім створіть новий стовпчик атрибутів, округлений до потрібного контуру. Тоді я розчиняю лінії між однаковим значенням. Потім використовуйте v.generalize. Цей метод трохи швидший, але він залишить кілька полігонів зубчастими / неприбраними.

введіть тут опис зображення

Чи є простіший метод, який насправді працює весь час. Здається, має бути проста команда, яка виконує весь процес.


2
Для чого ви використовуєте Polygonize? чи є ваш вхідний растр безперервним (як плаваюча точка DEM)? QGIS має контурний інструмент, який є ярликом до GDAL_Contour .. qgistutorials.com/en/docs/working_with_terrain.html Ви намагаєтеся отримати контури або гіпсометричні ділянки?
Майкл Стімсон

Вхідний файл - це тиф, а необхідний вихідний файл - це форма форми з лише багатокутниками з певними кроками. Я знайшов численні інструменти для створення поліліній, але не багатокутників.
Rx_

Досить справедливо, ви намагаєтеся отримати гіпсометричні ділянки. Я використовую (в основному) Esri, який має можливість спростити багатокутники, створені растром, на багатокутник, але це не допоможе тут. Як би це виглядало, якби ви створили контури з DEM, додали обмежувальний ящик і потім полігонізували? Потім ви можете створити точки мітки, перетинати / відібрати значення та позначати багатокутники атрибутами ... можливо, ви можете отримати кілька полігонів однакових значень, які можна розчинити, але більша проблема полягає у стрибку на більше інтервалу. У мене є код, який слід віднести гіпсо від контурів, але він працює на покритті ArcInfo
Michael Stimson

Те, що ви описуєте, це те, що я думаю, що роблю в своєму першому методі. Його громіздко. Потрібно переконатися, що кожен файл має атрибут id, а потім видалити багатокутники, які не містять площі вище нуля, як тільки полігонізовані. Мені не вдалося отримати послідовну правильну мітку лінії для передачі на багатокутник. Другий метод настільки близький до того, що я хочу, але, схоже, v.generalize не працює 100% часу. Я б хотів, щоб ESRI спрощував багатокутники, був варіантом QGIS, як ви вказали.
Rx_

Відповіді:


12

У мене виникли ті самі проблеми, що і у вашому другому методі. Я експортував растр у вектор і намагаюся використовувати v.generalise, і я отримую здебільшого гладкі багатокутники з випадковими «ступінчастими» межами, які, схоже, не впливають на алгоритм.

Я знайшов процес, який працював на моє завдання, не впевнений, чи це найкращий спосіб, але подумав, що поділюсь ним у випадку, якщо він допоможе вам.

З чого я почав - сітка Ascii від BoM, яка виглядала так: введіть тут опис зображення

Що я хотів щось подібне до того, що виробляють BoM так: введіть тут опис зображення

Мені вдалося дійти до результату (яким я був задоволений), виконавши наступні кроки.

  • Завантажте сітку (в моєму випадку ASCII Grid від BoM) в QGIS.
  • Перераховано на дискретні класи. (Обробка інструментів> Трава> Растр> r.recode)
  • Запустіть фільтр більшості для 'очищення'. (Обробка інструментів> SAGA> Растровий фільтр> Фільтр більшості)
  • Створював контури з відфільтрованої сітки з інтервалом у 1 та зберігав їх у атрибуті 'class' (бо мої класи були 1,2,3,4 тощо). (Растрове "Меню"> Витяг> Контур)
  • Контури виходу дещо узагальнені, але я використовував v.generalilized за допомогою алгоритму «змій», щоб згладити їх. (Обробка інструментальної скриньки> Трава> Вектор> v.generalize)
  • Потім я перетворив лінії на багатокутник. (Обробка інструментальної скриньки> Геоалгоритми QGIS> Інструменти векторної геометрії> Лінії до полігонів)
  • Нарешті, мені довелося перетворити багатокутники з однієї частини на кілька частин, щоб усі полігони добре намалювались. (Обробка інструментальної скриньки> Геоалгоритми QGIS> Інструменти векторної геометрії> Одночасні Mulitpart).

Після стилізації вихідний результат нижче: введіть тут опис зображення

Мені також було б цікаво почути, якщо хтось знає простіший спосіб. Спочатку я думав, що схоже на @Rx_, що я міг би просто перетворити свій растр у векторний, а потім узагальнити, і я б це зробив. Те, що мені довелося зробити, було набагато набагато довше.


3

Мені подобаються відповіді тут, але я не можу повірити, що QGIS все ще не має швидкого і простого способу зробити це. MapInfo може генерувати контури як багатокутники, так і лінії з будь-яким інтервалом, який ви можете вказати.

Це здається таким основним завданням, а також важливим для отримання розширень. Якщо хтось має оновлений або швидший спосіб зробити це, будь ласка, поділіться!


1

Більш прямий спосіб - використовувати gdal_countourбезпосередньо (як програму командного рядка) в "полігональному режимі" (тобто з -pопцією).

Приклад:

gdal_contour -p -amin min_val -amax max_val -i 1 input_raster.tif output_shape.shp

Документація: https://gdal.org/programs/gdal_contour.html

Цей параметр доступний лише у версії> = 2.4 (це можна перевірити gdalinfo --version). Якщо ви використовуєте Ubuntu 18.4, можливо, доведеться встановити його з UbuntuGIS


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.