Como arrumar geometrias inválidas em polígonos no QGIS 3.X
Colegas pesquisadores e entusiastas de SIG de código-livre,
Bem-vindos ao meu blog!
Gostaria de começar com um aviso - posso ser uma pesquisadora desta área, mas isso não significa que tudo o que faço ou escrevo aqui funcionará para você, em suas próprias configurações de desktop e versões de packages. Não tenho nenhuma responsabilidade se você perder dados ou estragar sua instalação. Eu também não autorizo nenhuma cópia do meu conteúdo.
Hoje, vou falar sobre 1) um erro simples de ser evitado quando estamos desenhando polígonos e 2) como consertar geometrias inválidas de polígonos no QGIS.
Na maioria das vezes, é só usar a funcionalidade criada para consertar geometrias “quebradas”, chamada de “Fix geometries” (Consertar geometrias), mas se ela não funcionar, a boa notícia é que há uma solução alternativa!
Primeiro, vou criar, de propósito, uma geometria inválida para aplicar a correção. Em seguida, mostrarei duas maneiras de consertá-la. Em uma delas, simplesmente aplica-se a ferramenta nativa “Fix geometries” do QGIS. A outra é usando a ferramenta Buffer. Em um truque simples, vou mostrar como criar um buffer infinitesimal em torno da minha geometria inválida, o que acaba arrumando a mesma, mas tem suas desvantagens.
Meu amigo Iporã Possanti, que também escreve sobre SIG foi quem me ensinou esse truque no QGIS 2, nos velhos tempos pré-pandêmicos, me salvando de uma dor de cabeça por causa de um polígono teimoso!
Para os exemplos aqui mostrados, estarei usando o QGIS 3.16 Hannover, a versão estável atual.
Como desenhar um polígono com geometria inválida
Crie uma nova camada vetorial e ligue o modo de edição
Com o modo de edição ligado, clique em “Add Polygon Feature”.
Comece a desenhar o seu polígono.
Ops! Você acidentalmente clicou duas vezes em um vértice. Sem problema, certo? CERTO?
Digamos que você ignorou esse pequeno erro e continuou desenhando o polígono. Já passei por isso.
Aqui está o seu polígono!
Agora, o próximo passo é gerar pontos aleatórios para uma análise no Oceano Atlântico. Usando a ferramenta “Random Points inside Polygons” (pontos aleatórios dentro de polígonos), tento criar 50 pontos distribuídos aleatoriamente dentro desta área.
Mas quando clico em Run, obtenho um erro:
Feature (-28) from “bad_polygon” has invalid geometry. Please fix the geometry or change the Processing setting to the “Ignore invalid input features” option.
Execution failed after 0.02 seconds
Minha reação automática seria ir lá e marcar “Ignore invalid input features” (ignorar atributos de entrada inválidos), mas se eu fizer isso, neste caso, o algoritmo irá ignorar o único polígono que eu tenho. Existem soluções melhores para este problema.
Ok, como eu evito este erro, então?
Ao gerar seu polígono, evite criar interseções entre as linhas. Isto é uma interseção:
E isso é a principal causa de problemas em geometrias.
E como consertar uma geometria em que o erro acima já foi cometido?
Eu tenho duas opções para você. Provavelmente, você deve começar com o algoritmo clássico “Fix geometries” (Corrigir geometrias). Se isso não resolver o problema, ou se você quiser pular para a outra solução, uma alternativa é usar o “Buffer”. Ambos são descritos detalhadamente abaixo.
Usando a ferramenta QGIS “Fix geometries”
Sem delongas, “Fix geometries” corrigirá a maioria dos problemas de geometria que você possa encontrar. Quando aplicado ao meu polígono criado anteriormente, ele gera este resultado:
E ainda é um polígono único, como pode ser visto na tabela de atributos:
Porém, quando eu ligo o modo de edição e tento editar os vértices, vejo que um novo vértice foi criado na interseção entre as linhas. Este vértice não existia anteriormente.
Depois de fazer este ajuste, o QGIS executou “Random Points inside polygons” sem problemas.
Buffer com distância=0
Você também pode resolver esse problema usando a ferramenta nativa “Buffer”.
A única propriedade que alterei foi a distância do buffer, que preenchi com “0” graus.
Depois de clicar em “Run”, obtive o seguinte:
A segunda parte do polígono, que ficava do lado direito da interseção, foi eliminada por este procedimento.
Com este polígono, eu também pude executar “Random Points inside polygons” sem problemas.
O uso do algoritmo “Buffer” pode alterar fundamentalmente a geometria do polígono, mas é uma alternativa válida à ferramenta “Fix geometries”. Na minha experiência, usar um buffer com distância de 0m sempre funcionou para corrigir até as geometrias mais difíceis.