Konwertuj raster na gładkie wielokąty konturowe w QGIS

14

Miałem ograniczony sukces w tworzeniu gładkich wielokątów konturowych z warstw rastrowych.

Stworzyłem linie konturowe i polilinie graniczne, a następnie użyłem QGIS Union. Następnie używam QGIS Polygonize. Następnie użyj statystyki strefowej do oryginalnego rastra, aby uzyskać wartość na wielokątach.

Drugą metodą, którą wypróbowałem, była konwersja rastra na wielokąt. Następnie utwórz nową kolumnę atrybutu zaokrągloną do pożądanego konturu. Następnie rozpuszczam linie między tą samą wartością. Następnie użyj v.generalize. Ta metoda jest nieco szybsza, ale pozostawi niektóre wielokąty postrzępione / niewygładzone.

wprowadź opis zdjęcia tutaj

Czy istnieje łatwiejsza metoda, która faktycznie działa przez cały czas? Wydaje się, że powinna istnieć prosta komenda, która wykonuje cały proces.

Rx_
źródło
2
Dlaczego korzystasz z Polygonize? czy twój wejściowy raster jest ciągły (jak zmiennoprzecinkowa DEM)? QGIS ma narzędzie do konturowania, które jest skrótem do GDAL_Contour .. qgistutorials.com/en/docs/working_with_terrain.html Czy próbujesz uzyskać kontury lub obszary hipsometryczne?
Michael Stimson
Plik wejściowy to tif, a wymagany plik wyjściowy to plik kształtu z wielobokami w określonych przyrostach. Znalazłem wiele narzędzi do tworzenia polilinii, ale nie wielokątów.
Rx_
W porządku, próbujesz uzyskać obszary hipsometryczne. Używam (głównie) Esri, która ma opcję uproszczenia wielokątów utworzonych przez raster do wielokąta, ale to nie pomoże tutaj. Jak by to wyglądało, gdybyś utworzył kontury z DEM, dodał obwiednię, a następnie poligonizował? Następnie możesz tworzyć punkty etykiet, przecinać / próbkować wartości i oznaczać wielokąty atrybutami ... być może możesz uzyskać kilka wielokątów o tej samej wartości, które można rozwiązać, ale większym problemem jest przeskakiwanie o więcej niż jeden interwał. Mam kod do przypisania hypso z konturów, ale działa on na zasięg ArcInfo
Michael Stimson
To, co opisujesz, robię według mojej pierwszej metody. Jest to uciążliwe. Musisz upewnić się, że każdy plik ma atrybut id, a następnie usunąć wielokąt, który nie zawiera obszaru powyżej zera po poligonizacji. Nie udało mi się uzyskać spójnej poprawnej etykiety linii do przeniesienia do wielokąta. Druga metoda jest tak bliska bycia tym, czego chcę, ale v.generalizacja wydaje się nie działać w 100% przypadków. Chciałbym, żeby ESRI uprościło wielokąty, jak zauważyłeś, w QGIS.
Rx_

Odpowiedzi:

12

Wystąpiły te same problemy, które masz w drugiej metodzie. Wyeksportowałem Raster do Vectora i spróbowałem użyć v.generalise i uzyskuję głównie gładkie wielokąty z okazjonalną „schodkową” granicą, która wydaje się być niezależna od algorytmu.

Znalazłem proces, który zadziałał dla mojego zadania, nie jestem pewien, czy to najlepszy sposób, ale pomyślałem, że podzielę się nim na wypadek, gdyby Ci pomógł.

Zacząłem od siatki ascii z BoM, która wyglądała tak: wprowadź opis zdjęcia tutaj

Czego chciałem czegoś podobnego do tego, co produkują BoM w ten sposób: wprowadź opis zdjęcia tutaj

Byłem w stanie dojść do wyniku (z czego byłem zadowolony), wykonując następujące kroki.

  • Załaduj siatkę (w moim przypadku ASCII Grid z BoM) do QGIS.
  • Przekodowane na odrębne klasy. (Processing Toolbox> Grass> Raster> r.recode)
  • Uruchom filtr większościowy, aby „wyczyścić”. (Processing Toolbox> SAGA> Filtr rastrowy> Filtr większości)
  • Tworzyłem kontury z filtrowanej siatki w odstępach 1 i zapisywałem je w atrybucie „klasa” (ponieważ moje klasy to 1,2,3,4 itd.). (Raster „Menu”> Ekstrakcja> Kontur)
  • Kontury wyjściowe są nieco uogólnione, ale użyłem v. Generalizacji z algorytmem „węży”, aby je wygładzić. (Przybornik przetwarzania> Trawa> Wektor> v. Generalizacja)
  • Następnie przekształciłem linie w wielokąt. (Przybornik przetwarzania> Geoalgorytmy QGIS> Narzędzia geometrii wektorowej> Linie do wielokątów)
  • W końcu musiałem przekonwertować wielokąty jednoczęściowe na wiele części, aby wszystkie wielokąty rysowały się ładnie. (Przybornik przetwarzania> Geo-algorytmy QGIS> Narzędzia geometrii wektorowej> Jednoczęściowe do Mulitpart).

Po stylizacji moje wyniki są poniżej: wprowadź opis zdjęcia tutaj

Byłbym również zainteresowany słyszeniem, jeśli ktoś zna prostszy sposób. Początkowo myślałem podobnie do @Rx_, że mogę po prostu przekonwertować raster na wektor, a następnie uogólnić i skończyć. To, co musiałem zrobić, było znacznie dłuższe.

Andrew Jeffrey
źródło
3

Lubię odpowiedzi tutaj, ale nie mogę uwierzyć, że QGIS nadal nie ma szybkiego i łatwego sposobu na zrobienie tego. MapInfo może generować kontury jako wielokąty lub linie z dowolnym interwałem, który możesz określić.

Wydaje się, że jest to tak podstawowe zadanie, a także ważne dla uzyskania zakresu. Jeśli ktoś ma zaktualizowany lub szybszy sposób na zrobienie tego, prosimy o udostępnienie!

MapInfoNewbie
źródło
1

Bardziej bezpośrednim sposobem jest użycie gdal_countourbezpośrednio (jako programu wiersza poleceń) w „trybie wielokąta” (to znaczy z -popcją).

Przykład:

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

Dokumentacja: https://gdal.org/programs/gdal_contour.html

Ta opcja jest dostępna tylko w wersji> = 2.4 (można to sprawdzić za pomocą gdalinfo --version). Jeśli używasz Ubuntu 18.4, być może będziesz musiał zainstalować go z UbuntuGIS

Paulo Vieira
źródło