[Portugal] Scripts no SEXTANTE

termal12 termal12 gmail.com
Terça-Feira, 19 de Março de 2013 - 16:46:11 PDT


http://mgcotunl.wordpress.com/2013/03/19/scripts-no-sextante-2/

Enviado para você por termal12 através do Google Reader: Scripts no
SEXTANTE via Planet OSGeo de doublebyte em 19/03/13

Num post anterior, descrevia como aceder a API do SEXTANTE atraves da
consola de Python do QGIS.

Neste post, vou avancar um pouco mais em termos de costumizacao e criar
um script para o SEXTANTE. Atraves de scripting podemos:

- aceder a todas as funcoes expostas pelo SEXTANTE (incluindo
thrid-party providers como o R, ou o GRASS)
- aceder as funcoes que nos acrescentamos ao SEXTANTE (incluindo
modelos criados atraves do modeller, ou R scripts)
- aceder a API do PYQT, ou do Python em geral para criar UI (entre
outras coisas)
- aceder a API do PYQGIS, acedendo a toda a funcionalidade do QGIS.
Reunindo todas estas funcionalidades pode construir-se uma aplicacao
bastante poderosa, mas neste post eu vou me ficar por uma demonstracao
simples: uma suite de analise exploratoria dos dados, que consiste em
chamar tres dos scripts de R que criei anteriormente. Em termos de
input/output, a aplicacao unifica a recepcao de parametros para os tres
scripts e gera os resultados em ficheiros html, guardados no disco num
local definido pelo utilizador.

Para seguir este tutorial nao sao necessarios grandes conhecimentos de
Python; no entanto, se decidirem construir os vossos scripts, ja vai
ser importante. Neste website podem encontrar sobre python para nao
programadores (se souberem programacao, torna-se logo mais facil). Eu
gosto deste em particular (from scratch!)



O procedimento para criar um novo script no SEXTANTE, ‘e semelhante ao
procedimento para criar scripts de R: expandir a entrada
“Scripts->Tools”, na toolbox e escolher “Create new script”.



Automaticamente abrir-se-a uma janela para escrever o codigo, com um
botao para escrever/editar o help (em html) e outro para gravar o
script. O script sera gravado na folder definida para esse efeito na
configuracao do SEXTANTE, com extensao “py” (python). O codigo do
script ‘e apresentado abaixo: vamos comenta-lo com detalhe nos
paragrafos seguintes.

#Definition of inputs and
outputs #================================== ##[GAM
scripts]=group ##input=vector ##sst=field input ##z=field
input ##clor=field input ##basefolder=folder import os from
PyQt4.QtCore import * from PyQt4.QtGui import * if basefolder=="":
QMessageBox.critical(None, "Run tests", "Empty path detected!") else:
progress.setPercentage(0) progress.setText("initializing outputs...")
filename1 = os.path.join(basefolder, "correlation.htm") filename2 =
os.path.join(basefolder, "scatterplot.htm") filename3 =
os.path.join(basefolder, "plot_z.htm") filename4 =
os.path.join(basefolder, "plot_sst.htm") filename5 =
os.path.join(basefolder, "plot_clor.htm") progress.setText("running
algorithms...") sextante.runalg("r:scatterplot",input,filename2)
progress.setPercentage(20)
sextante.runalg("r:correlation",input,sst,z,clor,filename1)
progress.setPercentage(40) sextante.runalg("r:plotz",input,filename3)
progress.setPercentage(60) sextante.runalg("r:plotsst",input,filename4)
progress.setPercentage(80)
sextante.runalg("r:plotclor",input,filename5)
progress.setPercentage(100) QMessageBox.information(None, "Run
tests", "All files were saved in: " + str(basefolder))

Ate a linha 9, nao temos mais do que definicoes do SEXTANTE. A linha 3
estabelece em que grupo o scripts vai ser listado no menu da toolbox.
As linhas 4-8 establecem os inputs a serem usados tanto pelos
algoritmos, como pelo proprio SEXTANTE para criar dialogos de input
(podem ler o manual do QGIS, para uma descricao mais completa dos tipos
de input). A partir da linha 10, temos entao o “corpo” do script,

As linhas 10-12 estabelecem que bibliotecas queremos usar neste script.
Podem usar PyQt, PyQGIS, ou qualquer outra biblioteca de Python que
tenham instalada (e.g.> os). Embora estejamos a usar a biblioteca do
SEXTANTE, nao ‘e necessario importa-la explicitamente para o script,
uma vez que o “ambiente de scripting” trata disso (as coisas serao
diferentes se corrermos o script na consola de Python, ou fora do QGIS).

Uma vez que um dos parametros do script ‘e a folder onde queremos
guardar os resultados, ‘e inutil correr o script se o utilizador nao
definir este parametro (ficamos sem resultados). Por este motivo,
criamos uma condicao na linha 14, que testa se a path esta vazia. Se
esta vazia, continua a correr o script; caso contrario, termina com uma
mensagem de erro (linha 15).

As linhas 21-25 estabelecem os nomes onde escreveremos os outputs,
utilizando a path estabelecida pelo utilizador. Finalmente as linhas
29, 31, 33, 35 e 37 executam scripts de R, usando os inputs e nomes de
outputs como argumentos. Neste tutorial ja vimos como o metodo runalg()
expoe cada algoritmo do SEXTANTE (incluindo os definidos pelo
utilizador) ao python. Este metodo ‘e muito util nao apenas para chamar
third-party algorithms, mas tambem os nossos proprios scripts, de outro
de python script (uma especie de programacao “canibalista”). Na sintaxe
‘e necessario apresentar como argumentos: o nome interno do script (tal
como aparece descrito pela funcao alglist()), os inputs do script, e os
outputs do script (tal como aparece descrito pela funcao alghelp()). Se
observarem a chamada do algoritmo na linha 29, verao apresentado como
input um layer vectorial guardado numa variavel chamada “input” (linha
4). Como output verao o nome e path de um ficheiro html; ‘e importante
frisar que o *metodo runalg() nao abre nenhuns resultados no QGIS*. Se
quiserem visualizar os resultados no QGIS, teem de os guardar, e
adicionar manualmente. Na linha 40 (tal como na linha 15) usamos uma
classe de PyQt4, para mostrar uma message box com informacao sobre os
ficheiros gravados.

Se o script demora um bocado a correr, normalmente ‘e boa ideia mostrar
alguma informacao do progresso ao utilizador (nao va ele pensar que o
computador “bloqueou”). o SEXTANTE expoe uma variavel chamada progress,
com metodos setText() para descrever as operacoes que estao a ter
lugar, e setPercentage() para preencher uma proporcao da barra de
progresso. Na linha 19 teem um exemplo do setText() e na linha 30, um
exemplo do setProgress().

Como ja referi antes, este script ‘e muito simples e quase nao utiliza
nenhumas das capacidades espaciais do QGIS, para alem do input de
layers. ‘E fortemente recomendavel fazer o browse dos exemplos (na
seccao “Scripts->Example scripts” da toolbox) para ter uma ideia de
como implementar features mais avancadas.

Depois de gravar o script, este sera automaticamente adicionado ao
grupo definido, e podem corre-lo fazendo double-click sobre ele (como
com qualquer outro algoritmo do SEXTANTE).







Os resultados serao guardados em ficheiros de html, nas paths definidas
pelo utilizador.

Para mais informacao sobre scripting em SEXTANTE, dentro do QGIS, podem
consultar a ultima versao do manual do QGIS.


Coisas que você pode fazer a partir daqui:
- Inscrever-se no Planet OSGeo usando o Google Reader
- Começar a usar o Google Reader para se manter facilmente atualizado
sobre todos os seus sites favoritos
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20130319/67fa9a1f/attachment-0001.html>


More information about the Portugal mailing list