http://mgcotunl.wordpress.com/2013/03/19/scripts-no-sextante-2/<br><br>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="padding: 4px; background-color: #c3d9ff;"><h3 style="margin:0px 3px;font-family:sans-serif">Enviado para você por termal12 através do Google Reader:</h3></div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="font-family:sans-serif;overflow:auto;width:100%;margin: 0px 10px"><h2 style="margin: 0.25em 0 0 0"><div class=""><a href="http://mgcotunl.wordpress.com/2013/03/19/scripts-no-sextante-2/">Scripts no SEXTANTE</a></div></h2>
<div style="margin-bottom: 0.5em">via <a href="http://planet.osgeo.org" class="f">Planet OSGeo</a> de doublebyte em 19/03/13</div><br style="display:none">
<div><p>Num <a href="https://mgcotunl.wordpress.com/2013/03/14/sextante-na-consola-de-pyqgis/">post</a> anterior, descrevia como aceder a API do SEXTANTE atraves da consola de Python do QGIS.</p>
<p>Neste post, vou avancar um pouco mais em termos de costumizacao e criar um script para o SEXTANTE. Atraves de scripting podemos:</p>
<ul>
<li>aceder a todas as funcoes expostas pelo SEXTANTE (incluindo thrid-party providers como o R, ou o GRASS)</li>
<li>aceder as funcoes que nos acrescentamos ao SEXTANTE (incluindo modelos criados atraves do modeller, ou R scripts)</li>
<li>aceder a API do PYQT, ou do Python em geral para criar UI (entre outras coisas)</li>
<li>aceder a API do PYQGIS, acedendo a toda a funcionalidade do QGIS.</li>
</ul>
<p>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 <a href="https://mgcotunl.wordpress.com/2013/03/07/sextante-e-r-2/#more-928">tres dos scripts de R que criei anteriormente</a>. 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.</p>
<p>Para seguir este tutorial nao sao necessarios grandes conhecimentos de Python; no entanto, se decidirem construir os vossos scripts, ja vai ser importante. Neste <a href="http://wiki.python.org/moin/BeginnersGuide/NonProgrammers">website </a>podem encontrar sobre python para nao programadores (se souberem programacao, torna-se logo mais facil). Eu gosto <a href="http://openbookproject.net/thinkcs/python/english2e/">deste</a> em particular (from scratch!)</p>
<p><span></span></p>
<p>O procedimento para criar um novo script no SEXTANTE, ‘e semelhante ao procedimento para <a href="https://mgcotunl.wordpress.com/2013/03/07/sextante-e-r-2/#more-928">criar scripts de R</a>: expandir a entrada “Scripts->Tools”, na toolbox e escolher “Create new script”.</p>
<p><a href="http://doublebyteblog.files.wordpress.com/2013/03/script1.png"><img alt="Image" src="http://doublebyteblog.files.wordpress.com/2013/03/script1.png?w=244"></a></p>
<p>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.</p>
<pre>#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))
</pre>
<p>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 <a href="http://docs.qgis.org/pdf/QGIS-1.8-UserGuide-en.pdf">manual do QGIS</a>, para uma descricao mais completa dos tipos de input). A partir da linha 10, temos entao o “corpo” do script,</p>
<p>As linhas 10-12 estabelecem que bibliotecas queremos usar neste script. Podem usar <a href="http://www.riverbankcomputing.com/software/pyqt/intro">PyQt</a>, <a href="http://www.qgis.org/pyqgis-cookbook/intro.html">PyQGIS</a>, 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).</p>
<p>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).</p>
<p>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. <a href="https://mgcotunl.wordpress.com/2013/03/14/sextante-na-consola-de-pyqgis/">Neste</a> tutorial ja vimos como o metodo <em>runalg()</em> 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 <em>alglist()</em>), os inputs do script, e os outputs do script (tal como aparece descrito pela funcao <em>alghelp()</em>). 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 <em>runalg()</em> nao abre nenhuns resultados no QGIS*<strong>. Se quiserem visualizar os resultados no QGIS, teem de os guardar, e  adicionar manualmente</strong>. Na linha 40 (tal como na linha 15) usamos uma classe de PyQt4, para mostrar uma message box com informacao sobre os ficheiros gravados.</p>
<p>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 <em>progress</em>, com metodos <em>setText()</em> para descrever as operacoes que estao a ter lugar, e <em>setPercentage()</em> para preencher uma proporcao da barra de progresso. Na linha 19 teem um exemplo do <em>setText()</em> e na linha 30, um exemplo do <em>setProgress()</em>.</p>
<p>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 <em>features</em> mais avancadas.</p>
<p>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).</p>
<p><a href="http://doublebyteblog.files.wordpress.com/2013/03/script2.png"><img alt="Image" src="http://doublebyteblog.files.wordpress.com/2013/03/script2.png?w=487"></a></p>
<p><a href="http://doublebyteblog.files.wordpress.com/2013/03/script3.png"><img alt="Image" src="http://doublebyteblog.files.wordpress.com/2013/03/script3.png?w=487"></a></p>
<p><a href="http://doublebyteblog.files.wordpress.com/2013/03/script4.png"><img alt="Image" src="http://doublebyteblog.files.wordpress.com/2013/03/script4.png?w=487"></a></p>
<p>Os resultados serao guardados em ficheiros de html, nas paths definidas pelo utilizador.</p>
<p>Para mais informacao sobre scripting em SEXTANTE, dentro do QGIS, podem consultar a <a href="http://docs.qgis.org/pdf/QGIS-1.8-UserGuide-en.pdf">ultima versao do manual do QGIS</a>.</p>
<br>  <img alt="" border="0" height="1" src="http://stats.wordpress.com/b.gif?host=mgcotunl.wordpress.com&blog=42452319&post=1126&subd=mgcotunl&ref=&feed=1" width="1"></div></div>
<br>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="padding: 4px; background-color: #c3d9ff;"><h3 style="margin:0px 3px;font-family:sans-serif">Coisas que você pode fazer a partir daqui:</h3>
<ul style="font-family:sans-serif"><li><a href="http://www.google.com/reader/view/feed%2Fhttp%3A%2F%2Fplanet.osgeo.org%2Fatom.xml?source=email">Inscrever-se no Planet OSGeo</a> usando o <b>Google Reader</b></li>
<li><a href="http://www.google.com/reader/?source=email">Começar a usar o Google Reader</a> para se manter facilmente atualizado sobre <b>todos os seus sites favoritos</b></li></ul></div>
<div style="margin: 0px 1px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>
<div style="margin: 0px 2px; padding-top: 1px;    background-color: #c3d9ff; font-size: 1px !important;    line-height: 0px !important;"> </div>