Modelação Geográfica, Cidades e Ordenamento do Território

Grupo integrado no e-GEO – Centro de Estudos de Geografia e Planeamento Regional

Modelaçao Espacial no QGIS, utilizando o Sextante

5 Comments

Os utilizadores mais avançados de SIG, ja nao tem razao para sentir falta do “Model Builder” no QGIS.
Atraves da toolbox Sextante, ‘e possivel construir modelos de analise espacial, beneficiando de provedores de algoritmos excepcionais, como o R, o SAGA, o GDAL, ou o proprio QGIS. Ainda por cima, ‘e possivel adicionar outros provedores, ou escrever os proprios algoritmos (em Python).
Para exemplificar, resolvi iniciar uma serie de posts com a construçao de um modelo de previsao da distribuiçao de uma especie, a partir de dados ambientais (modelo de habitat). Trata se de um Generalized Additive Model (GAM), e os conceitos aqui introduzidos, podem ser facilmente traduzidos para outros contextos (por exemplo, dos modelos urbanos).

Este modelo vai buscar inspiraçao ao MGET tools, uma suite de ferramentas geospaciais orientadas para a investigaçao marinha. Neste modelo, procura-se assumir a distribuiçao da especie marinha x, atraves da sua correlaçao de forma independente, com uma serie de variaveis ambientais. Como passa normalmente com os modelos, existem uma serie de assunçoes “discutiveis”, e que nao podem ser extrapoladas para qualquer situaçao. Contudo o facto de termos de olhar para os resultados com as devidas reservas nao deve ser um impedimento para a criaçao de modelos, que nos podem ajudar a tomar decisoes, nomeadamente em situaçoes  em que temos poucos dados.

O “use case” para este primeiro post ‘e a criaçao de um dos layer de base para este modelo: o da distribuiçao da especie. Como passa normalmente nas surveys, temos os pontos onde a especie foi observada/recolhida (“presence points”), mas nao temos os pontos onde nao foi observada (“absence points”), que vao ser essenciais para ajustar o modelo. Esta metodologia, propoe gerar os “absence points”, como pontos aleatorios ao longo do precurso do navio, onde nao foram avistadas ocorrencias da especie. Isto implica em termos de SIG as seguintes operaçoes:

  •  criar um buffer em volta dos pontos observados;
  •  apagar a rota do navio com este buffer, para criar uma “erased track”.
  •  gerar pontos de forma aleatoria, ao longo da “erased_track”.
  •  acrescentar aos atributos dos pontos gerados, um campo “presence” com valor “0”.
  •  acrescentar aos atributos dos pontos observados, um campo “presence” com valor “1”.
  •  fazer o merge dos dois layers (“absence poins” e “presence points”).
  •  criar uma BD e guardar nela os resultados.

Em resumo, o output de todas estas operaçoes sera uma tabela numa BD sqlite, onde temos os pontos de presenca e ausencia, distinguidos pelo seu valor no campo “presence”. Em vez de executar cada vez, os passos um a um, vamos ver como implementar um modelo atraves do “Sextante”, no QGIS.

O primeiro passo, é instalar o plugin Sextante, directamente atraves do menu “Plugins->Fetch Python Plugins”, e habilita-lo no plugin manager (“Plugins->Manage Plugins”). O sextante acrescenta ao UI um painel, com algoritmos dos varios provedores. Podem ler no manual do utilizador (em ingles),  mais informaçoes sobre a operaçao desta toolbox.

Image

Para criar um modelo, devem “clicar” na secçao “Modeler->tools->create new model”. O dialogo de design de modelos é bastante simples; tem duas tabs: uma para input de informaçao e outra para algoritmos. basicamente temos de definir os nosso inputs de informaçao (neste caso, layers) e uma serie de algoritmos a operar sobre eles, a escolher de entre os algoritmos do sextante (GDAL, R, etc). Os dialogos de configuraçao dos algoritmos, sao iguais aos que se geram ao chamarmos os algoritmos directamente, fora do “model builder”. O Sextante
cria os dialogos “on-the-fly”, atraves de programaçao, e essa ‘e a razao porque eles teem um aspecto semelhante, qualquer que seja a origem dos algoritmos (pontos positivos para a “user friendliness”!)

Image

Neste caso, vamos usar uma serie de funçoes do QGIS e do GDAL; quem estiver interessado, pode ver aqui o codigo do modelo.  No final, podemos gravar o modelo num ficheiro, para poder corre-lo mais tarde.

Image

Se quisermos “melhorar” ainda mais o modelo, podemos criar um ficheiro de “estilos”
(qml), para fazer o render da legenda. Assim, o mapa final mostrara directamente os “presence” and “absence” points atraves da simbologia.

Image

Para correr o modelo, basta procura-lo na seccao “modeler” (dentro do grupo e nome, com que foi criado), ou na lista de funçoes recentes, caso se aplique. Depois ‘e necessario carregar nele com o botao direito, para chamar o “context menu” e seleccionar “run”.

Image

O output final – o unico a ser adicionado á view do QGIS – será uma BD em SQLite com os resultados: todos os outros layers sao temporarios. Por esse motivo, o unico parametro de input ‘e o nome e a path da BD SQLite. Muita atençao ao escolher um nome (de extensao sqlite) e formato adequado (SQLite) para a BD!

Image

Notas finais: este modelo envolve alguns processos “pesados” para o processador (como podem ver pela taxa de ocupaçao da memoria do computador, em baixo). Uma optimizaçao importante, poderia ser correr o modelo da linha de comando, por exemplo chamando-o de um script em python… algo a investigar.

Image

Outra nota importante é que a BD gerada nao é de SpatiaLite, mas num formato que extende estruturas espaciais ao SQLite (FDO). Podem abrir a BD no spatialite_gui, mas para ler a tabela no QGIS nao a adicionem como layer de SpatiaLite, mas como layer vectorial (o FDO é suportado sem problemas pelos drivers OGR).

Image

Author: doublebyte

H8ckr, geocoder, traceuse, skateboarder, person...

5 thoughts on “Modelaçao Espacial no QGIS, utilizando o Sextante

  1. Pingback: Modelaçao Espacial no QGIS, utilizando o Sextante: parte II | Modelação Geográfica, Cidades e Ordenamento do Território

  2. Pingback: Modelaçao Espacial no QGIS, utilizando o Sextante: parte II | heartcode

  3. ‘E verdade que o modeller no QGIS ainda tem “pequenos” bugs… e tambem me parece bastante “pesado” com o UI. Por isso queria “explorar” mais a hipotese de scripting, chamando o atraves de um script de Python (de preferencia de fora da aplicacao).
    Nunca experimentei o gvSIG, mas dizem que ‘e o ambiente “optimo” para o Sextante!🙂

  4. Olá,

    Acho o modeler do sextante muito friendly e muito útil. Geralmente utilizo-o na plataforma do gvSIG CE (http://gvsigce.sourceforge.net/joomla/) ou gvSIG 1.1, onde também se tem acesso a bibliotecas SAGA e GRASS para o caso do gvsig CE.

    Mas gostava de partilhar o seguinte , há relativamente pouco tempo quis implementar o meu modelo de geoprocessamento no modeler do sextante baseado em dados vectoriais e encontrei algumas dificuldades : 1) Modeler SEXTANTE vs QGIS o operador CLIP não corria,… um”bug” (provávelmente já resolvido); e 2) Recorri então à solução gvSIG+SEXTANTE e não tive sucesso com o operador JOIN (inacessivel).

    Solução: Graphical modeler do GRASS (apesar de “experimental” na versão 6.4.2) consegui implementar o modelo.

    O modeler do SEXTANTE no QGIS é excelente, e é muito positivo pelo facto de possibilitar a integração de bibliotecas do GRASS.
    Achei-o modeler do SEXTANTE “mais instável no QGIS” do que no GVSIG. Mas a estabilidade será uma questão de tempo :)… !

  5. Realmente, a chegada do Sextante ao QGIS representa um salto qualitativo muito grande. E a possibilidade de usar o model builder com ferramentas do GRASS, R, etc. é fantástico.

    Em relação às “assunções discutíveis”, ainda bem que as achamos “discutíveis”. Caso contrário, não seriamos sérios quando modelamos o território.

    Excelente post. Obrigado.

Deixe uma resposta

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s