Cálculo de área entre curvas de nível - voltando ao assunto
Buenas, pessoal!
A algum tempo atrás publicamos um tutorial sobre Cálculo de área entre curvas de nível, onde procuramos resolver uma dúvida que surgiu na lista de usuários do gvSIG através da aplicação de vários geoprocessos, e onde pudemos aprender várias técnicas do gvSIG. No entanto, no referido artigo trabalhamos com uma simplificação dos dados, e quando fomos trabalhar com dados “reais”, num segundo momento, percebemos que estavam ocorrendo alguns problemas com o procedimento, e não estava sendo gerado o resultado esperado.
Uma das vantagens de trabalhar em comunidade é que o conhecimento é compartilhado, bem como as tentativas de resolver os problemas que aparecem. E foi com a ajuda do Gustavo Agüero Córdoba, que mantém o excelente blog GvSig Consultores AA, que conseguimos não apenas resolver o problema que apareceu, mas também ampliar os conhecimentos não só sobre o gvSIG, mas também sobre os geoprocessos, o Sextante e outras ferramentas que estão disponíveis para a nossa utilização. O objetivo desse artigo é compartilhar esse conhecimento que foi gerado. Vamos aos fatos:
Revisando a questão geradora apresentada, nosso objetivo será calcular a área existente entre uma série de curvas de nível, que foram digitalizadas na forma de um arquivo shape de linhas. Para isso, teremos que transformar essas linhas em polígonos, para que seja possível medir a área.
Para trabalharmos com dados reais, estarei utilizando os arquivos shapes das curvas de nível do estado do Rio Grande do Sul, obtidos do DVD Base Vetorial Contínua do Rio Grande do Sul – Escala 1:50.000, material editado pelo Laboratório de Geoprocessamento do Centro de Ecologia da URGS. Por razões de direitos autorais, e também de tamanho do arquivo, não estarei disponibilizando o arquivo total, e sim apenas um arquivo com os shapes da área de interesse e as respectivas curvas de nível que estão contidas na área de interesse que iremos trabalhar.
Nessa primeira parte do tutorial iremos trabalhar no gvSIG passo-a-passo, executando cada um dos algoritmos necessários para alcançar o nosso objetivo. Em um próximo tutorial mostraremos como automatizar o processo através da execução de um modelo do sextante, que iremos criar.
Buenas… chega de conversa e vamos botar a mão na massa! Em primeiro lugar, vamos criar um projeto, e nele inserir uma nova vista, com projeção WGS84/UTM zone 22S (EPSG 32722), que é o sistema de referência utilizado pelo shape que iremos trabalhar. Nesta vista, inseri o shape das curvas de nivel do RS, e também o shape da área de interesse que queremos trabalhar, conforme pode ser visualizado abaixo:
Neste tutorial iremos utilizar apenas os geoprocessos disponibilizados pelo Sextante, muito embora alguns dos algoritmos também estejam disponíveis nas ferramentas de geoprocessamento do gvSIG.
O primeiro processo que iremos aplicar é o Cortar (ou Clip), para podermos selecionar apenas as curvas de nível que estão dentro da nossa área de interesse.
Para tanto, abrimos o Sextante e procuramos pelo geoprocesso Cortar (Clip). Na janela que abre, selecionamos a camada das curvas de nível como Camada a recortar, e a camada da área de interesse como Camada de recorte. Em seguida, selecionamos o local e o nome do arquivo que iremos gerar, no campo Camada recortada [vetorial], e clicamos em OK. O geoprocesso Cortar será aplicado, e teremos uma nova camada no nosso TOC, com o resultado: uma camada shape (vetorial) de linhas que representam as curvas de nível existentes na nossa área de interesse. A partir de agora podemos descartar a camada de curvas de nível total, e aproveitar para renomear a camada de resultado para algo mais significativo, de forma a não nos perdermos no processo. Lembramos que o arquivo que está disponibilizado para download contém exatamente esses dois shapes, portanto, você poderá executar o processo com esse material.
Muito bem. Teoricamente poderíamos aplicar o geoprocesso Poligonar linhas (Polygonize) diretamente sobre essa nova camada gerada, que teríamos o resultado que buscamos. Vejamos o que acontece. Primeiramente, os dados de entrada:
E o resultado obtido:
Como podemos ver, não obtivemos o que esperávamos! Mas, por quê? A resposta é simples, e está contida na descrição da rotina que utilizamos: “Este algoritmo converte linhas em polígonos, considerando apenas as bordas (limites ou fronteiras), as quais descrevem áreas fechadas, e sem retornar polígonos sobrepostos”. Ou seja: o algoritmo aplicado fez apenas o que ele foi programado para fazer… converteu apenas as linhas cujas áreas estavam fechadas. As demais não puderam ser transformadas em polígonos por não estarem fechadas.
Para contornarmos esse problema precisamos forçar o fechamento dessas curvas. Como fazer isso? Utilizando o polígono definido pela área de interesse, que contorna a nossa área, e unindo ele com as curvas de nível. Esse processo deve ser feito em dois passos, pois a área de interesse é um polígono, e precisaremos antes transformá-la em uma polilinha, para depois podermos finalmente uni-la com as curvas de nível. Para converter um polígono em polilinhas utilizaremos o geoprocesso… Converter polígono em polilinha (Polygons to polylines):
Na seção Entradas, Camada vetorial, definimos como camada de Polígono a ser convertida a camada que contém a área de interesse, e definimos em Resultados, Linhas [vetorial], o caminho e o nome para o arquivo shape que será gerado pelo algoritmo. Ao clicarmos em OK o geoprocesso será aplicado e obteremos como resultado uma nova camada, que contém a nossa área de interesse, agora como uma flamante polilinha:
Agora podemos passar para o próximo passo: juntar as duas camadas de polilinhas, de modo a forçar o fechamento das curvas de nível, utilizando o geoprocesso Juntar (Merge):
Na janela do algoritmo Juntar (Merge), na seção Entrada, Camada vetorial, definimos como Camada principal a camada que contém as curvas de nível, e como Camadas adicionais selecionamos a camada que geramos no passo anterior, contendo a nossa área de interesse transformada em polilinha. Ao clicarmos em OK o geoprocesso será aplicado e obteremos como resultado uma nova camada contendo a junção das duas camadas que especificamos:
Mais uma vez, teoricamente, agora já poderíamos aplicar o geoprocesso Poligonar linhas (Polygonize) e teríamos o nosso resultado esperado. Se os dados com os quais estivermos trabalhando estiverem corrigidos topologicamente, poderíamos estar acabando o nosso trabalho. No entanto, não é esse o caso, como pode ser visto na figura abaixo, que mostra o resultado da aplicação do algoritmo Poligonar linhas (Polygonize) na camada que obtemos no passo anterior:
Isso acontece porque os nossos dados não foram tratados topologicamente, conforme pode ser conferido na próxima figura, onde demos um zoom na área de curvas de nível e selecionamos algumas delas:
Como podemos observar, algumas linhas estão “rompidas”. São linhas que, embora pertençam a mesma curva de nível, estão separadas, mas não conseguíamos visualizar isso pela simples observação. Possivelmente esse erro foi gerado no processo de digitalização das curvas de nível. Para alcançarmos o nosso objetivo precisamos aplicar um algoritmo que consiga unir estas linhas, deixando assim o nosso arquivo topologicamente correto.
O algoritmo a ser usado neste caso será o Juntar linhas adjacentes (Join adjacent lines):
Na seção Entrada, Camada vetorial, definimos como Camada de entrada a camada que obtivemos no último passo realizado, isto é, a camada de polilinhas resultante da junção das curvas de nível com a área de interesse. Em Opções, definimos o valor de 1.0 para Tolerância. Por último, definimos em Resultados, Resultados[vetorial], o caminho e o nome que será usado para o shape resultante do processo. Clicamos em OK, e teremos o geoprocesso aplicado e obteremos no TOC uma nova camada, agora com as polilinhas das curvas de nível devidamente corrigidas.
Finalmente poderemos aplicar o geoprocesso Poligonar linhas (Polygonize) sobre a camada resultante:
E obteremos a nossa camada de polígonos, contendo a área entre as curvas de nível:
Se selecionarmos alguns dos polígonos poderemos comprovar que agora obtemos os mesmos corretamente:
No entanto, não obstantemente… ainda teremos um passo a realizar antes de calcularmos a área entre cada curva de nível:
Como havíamos comentado anteriormente, algumas curvas de nível tinham erros de restituição, o que gerava problemas de topologia. Ao corrigirmos esses erros com a junção de linhas próximas, conseguimos solucionar os problemas de topologia, mas algumas vezes a aplicação desse processo pode gerar alguns polígonos extras que, mesmo pequenos, alteram a área resultante. Como esse arquivo em que estamos trabalhando parece ter sido afetado por todas as instâncias possíveis da Lei de Murphy, também tivemos presente este problema, como podemos observar neste zoom da aplicação da área de interesse sobre a nossa camada de polígonos final (área em amarelo):
Para corrigir este problema basta aplicar novamente o geoprocesso Cortar (Clip), agora usando como Camada a recortar a camada de polígonos que acabamos de gerar, e como Camada de recorte, a camada que contém o polígono da área de interesse. Com isso, conseguimos delimitar os polígonos apenas dentro da área de interesse, conforme podemos visualizar abaixo:
Agora poderemos, finalmente, obter o dado que buscávamos no início do nosso tutorial: calcular qual a área dos intervalos entre as curvas. Para tanto, basta acessarmos o menu Camada > Adicionar informação geométrica e, na janela que se abre, selecionar em Camada a camada relativa aos polígonos das curvas de nível corrigidas e, em seguida, selecionar Área na coluna da esquerda e clicar na seta para a direita, de forma a passá-la para a coluna da direita.
Clicando em Aceitar, a informação referente a área de cada um dos polígonos será acrescentada na tabela de atributos do shape:
Sempre é interessante, em qualquer trabalho que façamos, comprovar a confiança dos resultados obtidos. Neste caso, essa comprovação está diretamente relacionada com a área total da nossa área de interesse. Sendo assim, é importante verificarmos se a soma das áreas das curvas de nível individuais é igual a área da nossa área de interesse (podem ocorrer pequenas variações para mais ou para menos, em virtude das abstrações que foram aplicadas, mas essas diferenças não podem ser significativas).
Para obtermos essa comprovação devemos utilizar uma das ferramentas que nos possibilitam obter a soma de um campo de uma tabela, como por exemplo, as estatísticas de tabela. Conforme podemos visualizar abaixo, no nosso caso está tudo “nos conformes” (a diferença está na :
Antes de encerrarmos essa parte do tutorial, cabe uma pequena mas importante observação: muito embora todos esses procedimentos tenham sido executado no gvSIG 1.12, eles podem ser completamente reproduzidos utilizando o gvSIG 2.0, pois todos os recursos aqui utilizados estão disponíveis e funcionais na nova versão do gvSIG.
E por hoje é só, pessoal! No próximo artigo veremos como utilizar o modelador do sextante para fazermos o mesmo processo de forma automatizada. Voltamos em breve!
Tags: geoprocessamento, geoprocessos, gvSIG, modelador, sextante, tutorial