Converter raster em polígonos de contorno suaves no QGIS

14

Eu tive sucesso limitado na criação de polígonos de contorno suaves a partir de uma camada raster.

Criei linhas de contorno e polilinhas de contorno e usei o QGIS Union. Então eu uso o QGIS Polygonize. Em seguida, use estatísticas zonais para a varredura original para obter o valor nos polígonos.

O segundo método que tentei foi converter raster em polígono. Em seguida, crie uma nova coluna de atributo arredondada para o contorno que desejo. Então eu dissolvo linhas entre o mesmo valor. Em seguida, use v.generalize. Esse método é um pouco mais rápido, mas deixará alguns polígonos irregulares / sem suavização.

insira a descrição da imagem aqui

Existe um método mais fácil que realmente funciona o tempo todo. Parece que deve haver um comando simples que faça todo o processo.

Rx_
fonte
2
Por que você está usando o Polygonize? sua varredura de entrada é contínua (como um DEM de ponto flutuante)? O QGIS possui uma ferramenta de contorno, que é um atalho para GDAL_Contour. Qgistutorials.com/en/docs/working_with_terrain.html Você está tentando obter contornos ou áreas hipsométricas?
Michael Stimson
O arquivo de entrada é um tif e o arquivo de saída necessário é um arquivo de forma com apenas polígonos em incrementos específicos. Encontrei inúmeras ferramentas para criar polilinhas, mas não polígonos.
Rx_
É justo que você esteja tentando obter áreas hipsométricas. Eu uso (principalmente) Esri, que tem uma opção para simplificar os polígonos criados pela varredura para o polígono, mas isso não vai ajudar aqui. Como ficaria se você criasse os contornos do DEM, adicione uma caixa delimitadora e poligonize? Você pode criar pontos de etiqueta, cruzar / amostrar os valores e rotular os polígonos com os atributos ... possivelmente, você pode obter alguns polígonos de mesmo valor que podem ser dissolvidos, mas o maior problema está saltando por mais de um intervalo. Eu tenho o código para hypso atributo de contornos, mas ele funciona em cobertura ArcInfo
Michael Stimson
O que você descreve é ​​o que acho que estou fazendo no meu primeiro método. É complicado. É necessário garantir que cada arquivo tenha um atributo id e excluir polígonos que não contenham área acima de zero depois de poligonizados. Falha ao obter o rótulo correto consistente da linha para transferir para o polígono. O segundo método está tão perto de ser o que eu quero, mas o v.generalize parece não funcionar 100% do tempo. Eu gostaria que os ESRI simplificassem polígonos fosse uma opção no QGIS, como você apontou.
Rx_

Respostas:

12

Eu experimentei os mesmos problemas que você está enfrentando no seu segundo método. Exportei um Raster para um Vector e tento usar a v.generalise e recebo polígonos suaves com o limite ocasional de 'etapas' que parece não ter sido afetado pelo algoritmo.

Encontrei um processo que funcionou para a minha tarefa, não tenho certeza se é o melhor caminho, mas pensei em compartilhá-lo, caso isso o ajudasse.

O que eu comecei foi uma grade ASCII do BoM que era assim: insira a descrição da imagem aqui

O que eu queria algo semelhante ao que o BoM produz assim: insira a descrição da imagem aqui

Consegui chegar a um resultado (com o qual fiquei feliz) usando as etapas a seguir.

  • Carregar grade (no meu caso ASCII Grid from BoM) no QGIS.
  • Recodificado em classes discretas. (Caixa de ferramentas de processamento> Grama> Varredura> r.recode)
  • Execute um filtro majoritário para 'limpar'. (Caixa de ferramentas de processamento> SAGA> Filtro Raster> Filtro Majoritário)
  • Criei contornos da grade filtrada em intervalos de 1 e os armazenei no atributo 'class' (porque minhas classes eram 1,2,3,4, etc.). (Menu 'Raster'> Extração> Contorno)
  • Os contornos da saída são um pouco generalizados, mas eu usei v.generalised com o algoritmo 'snakes' para suavizá-los. (Caixa de ferramentas de processamento> Grama> Vetor> v.generalize)
  • Em seguida, converti as linhas em polígono. (Caixa de ferramentas de processamento> Geoalgoritmos QGIS> Ferramentas de geometria vetorial> Linhas em polígonos)
  • Por fim, tive que converter os polígonos de uma única peça em várias partes, para que todos os polígonos fossem bem desenhados. (Caixa de ferramentas de processamento> Geoalgoritmos do QGIS> Ferramentas de geometria vetorial> Peças únicas para parte múltipla).

Depois de estilizar, minha saída está abaixo: insira a descrição da imagem aqui

Eu também estaria interessado em ouvir se alguém souber uma maneira mais simples. Originalmente, eu estava pensando de forma semelhante ao @Rx_ que eu poderia converter meu raster em vetor e generalizar, e eu terminaria. O que eu tive que fazer foi muito, muito mais longo.

Andrew Jeffrey
fonte
3

Gosto das respostas aqui, mas não acredito que o QGIS ainda não tenha uma maneira rápida e fácil de fazer isso. O MapInfo pode gerar contornos como polígonos ou linhas com qualquer intervalo que você possa especificar.

Parece uma tarefa tão básica e também importante para obter extensões. Se alguém tiver uma maneira atualizada ou mais rápida de fazer isso, compartilhe!

MapInfoNewbie
fonte
1

Uma maneira mais direta é usar gdal_countourdiretamente (como um programa de linha de comando) no "modo poligonal" (ou seja, com a -popção).

Exemplo:

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

Documentação: https://gdal.org/programs/gdal_contour.html

Esta opção está disponível apenas na versão> = 2.4 (isso pode ser verificado com gdalinfo --version). Se você estiver usando o Ubuntu 18.4, pode ser necessário instalá-lo no UbuntuGIS

Paulo Vieira
fonte