Convertir ráster en polígonos de contorno suave en QGIS

14

He tenido un éxito limitado al crear polígonos de contorno suave a partir de capas ráster.

He creado líneas de contorno y polilíneas de límite y luego usé QGIS Union. Luego uso QGIS Polygonize. Luego use estadísticas zonales para el ráster original para obtener el valor en los polígonos.

El segundo método que probé fue convertir el ráster a polígono. Luego cree una nueva columna de atributo redondeada al contorno que deseo. Luego disuelvo líneas entre el mismo valor. Luego use v.generalize. Este método es un poco más rápido, pero dejará algunos polígonos irregulares / sin relieve.

ingrese la descripción de la imagen aquí

¿Existe un método más fácil que realmente funcione todo el tiempo? Parece que debería haber un comando simple que realiza todo el proceso.

Rx_
fuente
2
¿Por qué estás usando Polygonize? ¿su ráster de entrada es continuo (como un DEM de punto flotante)? QGIS tiene una herramienta de contorno, que es un acceso directo a GDAL_Contour .. qgistutorials.com/en/docs/working_with_terrain.html ¿Está tratando de obtener contornos o áreas hipsométricas?
Michael Stimson
El archivo de entrada es un archivo tif y el archivo de salida requerido es un archivo de forma con solo polígonos en incrementos específicos. He encontrado numerosas herramientas para crear polilíneas, pero no polígonos.
Rx_
Es justo que intentes obtener áreas hipsométricas. Utilizo (principalmente) Esri, que tiene una opción para simplificar los polígonos creados por ráster a polígono, pero eso no ayudará aquí. ¿Cómo se vería si creara los contornos desde el DEM, agregue un cuadro delimitador y luego poligonalice? Luego puede crear puntos de etiqueta, intersecar / muestrear los valores y etiquetar los polígonos con los atributos ... posiblemente podría obtener algunos polígonos del mismo valor que se pueden disolver, pero el mayor problema es saltar más de un intervalo. Tengo un código para atribuir hypso de los contornos, pero funciona en la cobertura de ArcInfo
Michael Stimson
Lo que describe es lo que creo que estoy haciendo en mi primer método. Es engorroso. Debe asegurarse de que cada archivo tenga un atributo de identificación y luego eliminar los polígonos que no contienen área por encima de cero una vez poligonalizados. No pude obtener la etiqueta correcta consistente de la línea para transferir al polígono. El segundo método está tan cerca de ser lo que quiero, pero v.generalize parece no funcionar el 100% del tiempo. Desearía que el ESRI simplifique los polígonos como una opción en QGIS como usted señaló.
Rx_

Respuestas:

12

He experimentado los mismos problemas que tienes en tu segundo método. Exporté un Ráster a un Vector e intento usar v.generalise y obtengo polígonos suaves en su mayoría con el límite 'escalonado' ocasional que parece no haber sido afectado por el algoritmo.

Encontré un proceso que funcionó para mi tarea, no estoy seguro de si es la mejor manera, pero pensé en compartirlo en caso de que te ayudara.

Con lo que comencé fue con una cuadrícula ascii de BoM que se veía así: ingrese la descripción de la imagen aquí

Lo que quería era algo similar a lo que BoM produce así: ingrese la descripción de la imagen aquí

Pude llegar a un resultado (con el que estaba feliz) usando los siguientes pasos.

  • Cargue la cuadrícula (en mi caso, la cuadrícula ASCII de BoM) en QGIS.
  • Recodificado en clases discretas. (Caja de herramientas de procesamiento> Grass> Ráster> r.recode)
  • Ejecute un filtro mayoritario para 'limpiar' (Caja de herramientas de procesamiento> SAGA> Filtro ráster> Filtro mayoritario)
  • Creé contornos de la cuadrícula filtrada a intervalos de 1, y los almacené en un atributo 'clase' (porque mis clases eran 1,2,3,4, etc.). ('Menú' de ráster> Extracción> Contorno)
  • Los contornos de salida están algo generalizados, pero utilicé v.generalized con el algoritmo 'snakes' para suavizarlos (Processing Toolbox> Grass> Vector> v.generalize)
  • Luego convertí las líneas a polígono. (Caja de herramientas de procesamiento> Geoalgoritmos QGIS> Herramientas de geometría vectorial> Líneas a polígonos)
  • Finalmente, tuve que convertir los polígonos de una sola parte en varias partes, para que todos los polígonos se dibujaran bien. (Caja de herramientas de procesamiento> Geoalgoritmos de QGIS> Herramientas de geometría vectorial> Partes individuales a Mulitpart).

Después de diseñar mi salida está a continuación: ingrese la descripción de la imagen aquí

También me interesaría saber si alguien conoce una forma más simple. Originalmente estaba pensando de manera similar a @Rx_ que podría convertir mi ráster a vector y luego generalizar y ya estaría. Lo que tuve que hacer fue mucho más largo.

Andrew Jeffrey
fuente
3

Me gustan las respuestas aquí, pero no puedo creer que QGIS todavía no tenga una manera rápida y fácil de hacerlo. MapInfo puede generar contornos como polígonos o líneas con cualquier intervalo que pueda especificar.

Parece una tarea tan básica y también importante para obtener extensiones. Si alguien tiene una forma actualizada o más rápida de hacerlo, ¡por favor comparta!

MapInfoNewbie
fuente
1

Una forma más directa es usar gdal_countourdirectamente (como un programa de línea de comandos) en "modo poligonal" (es decir, con la -popción).

Ejemplo:

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

Documentación: https://gdal.org/programs/gdal_contour.html

Esta opción solo está disponible en la versión> = 2.4 (esto se puede verificar con gdalinfo --version). Si está utilizando Ubuntu 18.4, es posible que deba instalarlo desde UbuntuGIS

Paulo Vieira
fuente