<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Geo.NET &#187; OOP</title>
	<atom:link href="http://blog.geoprocessamento.net/tag/oop/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.geoprocessamento.net</link>
	<description>Geoprocessamento, SIG e Sensoriamento Remoto</description>
	<lastBuildDate>Wed, 21 Sep 2011 12:00:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>#Python &#8211; pt4</title>
		<link>http://blog.geoprocessamento.net/2010/01/python-pt4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-pt4</link>
		<comments>http://blog.geoprocessamento.net/2010/01/python-pt4/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 00:18:00 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=275</guid>
		<description><![CDATA[


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/usando-python-e-o-geoprocessing-framework-2/' rel='bookmark' title='Permanent Link: Usando Python e o geoprocessing framework #2'>Usando Python e o geoprocessing framework #2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt3/' rel='bookmark' title='Permanent Link: #Python &#8211; pt3'>#Python &#8211; pt3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">Boa noite pessoal,</p>
<p>Como disse anteriormente o Python é a linguagem "preferida" pela ESRI para se construir ferramentas e modelos de geoprocessamento.</p>
<p>Na última vez, usei um exemplo pequeno, mas até útil.</p>
<p>Hoje vou mostrar como se pode fazer múltiplas operações, com uma só Feature Class.</p>
<p>O Python é ótimo em executar tarefas tediosas e repetitivas, daquelas que gastaríamos anos para terminar se feito na mão.</p>
<p>Imagine que você precise converter uma série de SRTMs para pontos, juntá-los, e depois interpolar tudo isso (espero que seu computador seja bom <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</p>
<p>Vamos ao exemplo:</p>
<p>#lembrem-se que o python faz questão de código identado, se ele não tiver identado, não funcionará.<br />
#aqui ao invez de espaços usaremos -</p>
<p>#vamos importar nossas coisas<br />
import sys, os, arcgisscripting, string</p>
<p>gp = arcgisscripting.create(9.3)</p>
<p>diretorio = raw_input("Digite o diretório que contém os rasters. Não se esqueça de duplicar as barras \\, senão não conseguirei achar o caminho...")<br />
#aqui você pode indicar qualquer coisa, um diretório, um banco de dados SDE e até um banco de dados file/personal.<br />
if diretorio:<br />
----pass<br />
else:<br />
----print "Workspace/Espaço de trabalho inválido. Reinicie o script e tente denovo."<br />
----exit()</p>
<p>gp.Workspace = diretorio</p>
<p>ListaRasters = gp.ListDatasets("*","Raster")<br />
#se tivessemos escolhido "SRTM*" ao invés de "*" o Python listaria todos os rasters que começam com as letras SRTM</p>
<p>gp.AddToolbox("conversion") #adiciona a toolbox conversion<br />
gp.AddToolbox("sa") #adiciona a toolbox do spatial analyst - só funciona para quem TEM a licença eim pessoal.<br />
gp.AddToolbox("management") #adiciona management</p>
<p>#já temos nossas ferramentas, mãos à obra.</p>
<p>for Raster in ListaRasters:<br />
----OutFeature = diretorio + "\\" + "ponto_convertido_" + Raster<br />
----gp.RasterToPoint_conversion(Raster,OutFeature)<br />
----print Raster + " convertido para ponto."</p>
<p>#vamos listar nossas feature classes de ponto. lembra do "*"?<br />
ListaFeatureClasses = gp.ListFeatureClasses("ponto_convertido_*","POINT")<br />
#assim garantimos que só vamos mosaicar as featureclasses convertidas e não outras perdidas no mesmo workspace, e claro só do tipo ponto <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>#a ferramenta merge exige uma lista das featureclasses a serem juntadas separadas por ponto e virgula, entao vamos dar a ela o que ela quer!</p>
<p>OutputMerge = gp.Workspace+"\\" + "MergeFinal"</p>
<p>gp.Merge_management(string.join(ListaFeatureClasses,";"),OutputMerge)<br />
#a funcao join concatena uma lista utilizando um caractere (ou caracteres separadores) ou seja: ['shape1','shape2',shape3'] viram shape1;shape2;shape3</p>
<p>print "Já está tudo junto, vamos interpolar?"<br />
print "interpolando. deve demorar, vá tomar um café..."</p>
<p>gp.Idw_sa(OutputMerge,"VALUE",gp.workspace+"\\"+"raster_interpolado",30,1)</p>
<p>print "interpolado. parabens!"</p>
<p>Bem pessoal, não testei o código, mas deve funcionar de acordo. O python é muito poderoso e suas funções internas se encaixam muito bem com a API da ESRI. Vejam na parte do Merge. Em outras linguagens teriamos de escrever loops e loops para concatenar as palavras daquela maneira, mas em python tudo é feito rapidinho!</p>
<p>Espero que gostem e que comecem a utilizar Python no seu dia a dia. É de fato um negócio muito útil. 1 hora para escrever um script, mas te salva 80mil horas de trabalho chato, cansativo e passível de erro humano.</p>
<p>Ahn! Não se esqueçam de consultar a documentação das funções utilizadas (join do Python, Merge_management, RasterToPoint_conversion e IDW_sa). Todas as versões do Help do ArcGIS possuem essa documentação. É só apertar F1 e correr para o help de cada ferramentinha, na última parte delas, Scripting. Se acharem algum erro no código postados, favor dar um toque que eu corrijo.</p>
<p>Python Rocks!</p></div>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/usando-python-e-o-geoprocessing-framework-2/' rel='bookmark' title='Permanent Link: Usando Python e o geoprocessing framework #2'>Usando Python e o geoprocessing framework #2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt3/' rel='bookmark' title='Permanent Link: #Python &#8211; pt3'>#Python &#8211; pt3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/01/python-pt4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#Python &#8211; pt3</title>
		<link>http://blog.geoprocessamento.net/2010/01/python-pt3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-pt3</link>
		<comments>http://blog.geoprocessamento.net/2010/01/python-pt3/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 00:15:58 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=272</guid>
		<description><![CDATA[Bom dia pessoal, No post #python parte 2, eu deixei como exercício para vocês uma pequena tarefa. Como podemos perguntar ao usuário qual é pasta que ele quer projetar e qual a projeção. Existem duas maneiras, uma delas é criar o script para rodar somente dentro do ArcGIS ou utilizar algum tipo de manipulação dentro [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-o-que-e/' rel='bookmark' title='Permanent Link: #Python &#8211; o que é?'>#Python &#8211; o que é?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">Bom dia pessoal,</p>
<div style="text-align: justify;">No post #python parte 2, eu deixei como exercício para vocês uma pequena tarefa. Como podemos perguntar ao usuário qual é pasta que ele quer projetar e qual a projeção. Existem duas maneiras, uma delas é criar o script para rodar somente dentro do ArcGIS ou utilizar algum tipo de manipulação dentro do script, que roda em DOS/Python.<br />
Vou mostrar a segunda maneira. Os scripts criados pelo ArcGIS são bastante simples, mas é preciso um pouco mais de base teórica, então fica pra depois.</p>
<p>Bem, para isso precisamos utilizar umas manhazinhas. Esta solução vai em duas partes, e poderia ser muito mais complexa, mas o Python vai nos ajudar.</p>
<p>Primeiramente, como perguntar qualquer coisa ao usuário? O Python tem uma pequena função chamada raw_input.</p>
<p>A função raw_input tem como único argumento opcional uma mensagem à ser passada ao seu usuário, mostrando a ele o que ele tem de digitar:</p>
<p>pasta = raw_input("Digite a pasta onde se encontram os shapefiles. ")<br />
#funciona<br />
pasta2 = raw_input()<br />
#funciona também, mas sem mensagem</p>
<p>Bem, antes do script rodar e começar a tentar processar as pastas, é bom testar se o valor que o usuário digitou é válido. Existem diversas validações que poderiam ser executadas, mas vamos usar uma em especial.</p>
<p>#lembre-se que cada - equivale à um espaço e um conjunto com ---- equivale à uma tabulacao.</p>
<p>import sys, os, arcgisscripting</p>
<p>pasta = raw_input("Digite a pasta que deseja projetar. Lembre-se de duplicar as barras \\ senão não acho o caminho. ")</p>
<p>if os.path.isdir(pasta) == true:<br />
----#é uma pasta válida e existe.<br />
----#processe<br />
else:<br />
----#não é uma pasta válida.<br />
----#imprima uma mensagem de erro e saia do script.<br />
----print "Erro, a pasta indicada não é válida."<br />
----exit</p>
<p>Bem pessoal, esse é o começo de tudo. Não repetirei os processamentos com o arcgisscripting, e isso é pra vocês estudarem e tentarem por aí.</p>
<p>Não se esqueçam, o F1 do Python traz a ajuda da versão utilizada, que contém as assinaturas de funções (quais são os paramêtros de entrada e qual é a saída), notas importantes e exemplos de como usá-las.</p>
<p>Agora, como permitir o usuário escolher o datum? Essa é um pouco mais difícil. Teremos de usar um outro tipo de dados do Python, chamado dicionário, que é tão poderoso quanto as listas, mas existem algumas diferenças sobre ele. O dicionário não suporta aquela maravilha de "for x in lista:", pois ele é um...dicionário, e não uma lista.</p>
<p>Os dicionários tem alguns métodos que nos ajudam a achar o que queremos:</p>
<p>a = {'SAD6922SUL':'\\Coordinate Systems\\Projected Coordinate Systems\\Utm\\Other GCS\\South American 1969 UTM Zone 22S.prj'}</p>
<p>Este é um dicionário com somente uma entrada. Enquanto as listas utilizam a posição de cada item (de 0 à n), os dicionários utlizam as keys. No caso supracitado, a key para este endereço monstro é SAD6922SUL, ou seja, ela armazena um valor, que é o diretório para este datum.</p>
<p>Métodos:<br />
len(dicionario) retorna o tamanho do dicionario.<br />
k in dicionario. Verdadeiro se a chave k está presente no dicionario dicionario.<br />
k not in dicionario. Verdadeiro se a chave k NÃO está presente em dicionario.<br />
dicionario.has_key(k). Mesmo que k in dicionario. Versão nova da função.<br />
dicionario.keys(). Copia as keys para uma lista.<br />
dicionario.values(). Copia os valores para uma lista.<br />
dicionario[k] = v. Adiciona uma chave k com o valor de v no dicionario.</p>
<p>Existem outros métodos, mas estes são os mais básicos e necessários para começar.</p>
<p>Imagine o seguinte dicionario:</p>
<p>dicionarioDatums = {'sad69utm22s':\\Coordinate Systems\\Projected Coordinate Systems\\Utm\\Other GCS\\South American 1969 UTM Zone 22S.prj',<br />
'sad69utm23s':'\\Coordinate Systems\\Projected Coordinate Systems\\Utm\\Other GCS\\South American 1969 UTM Zone 23S.prj',<br />
'sad69utm24s':'\\Coordinate Systems\\Projected Coordinate Systems\\Utm\\Other GCS\\South American 1969 UTM Zone 24S.prj'}</p>
<p>e o código a seguir:</p>
<p>chaveDatums = dicionarioDatums.keys()</p>
<p>for chave in chaveDatums:<br />
----print chave</p>
<p>datumEscolhido = raw_input("Digite o datum de sua escolha. ")</p>
<p>if datumDicionario.has_key(datumEscolhido):<br />
----#processo<br />
else:<br />
----print "Você não escolheu um datum válido. Reinicie e tente novamente."</p>
<p>Bem, veja que hoje apenas estruturei a solução. Quero ver algum código aí nos comentários. Alguém tem uma outra idéia para fazer isso?</p>
<p>É bom notar que existem melhoras a serem feitas neste script, por exemplo, forçar o usuário a digitar algo correto no último raw_input, e software não sair daí enquanto ele não o fizer. Existe também a possibilidade de se mapear a pasta Coordinate System automaticamente, sem a necessidade de sempre que precisarmos de um datum novo, que não está na lista, reescrever o código. Deem suas sugestões e espero ter ajudado.</p>
<p>Abraço</p>
<p>George</p></div>
</div>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-o-que-e/' rel='bookmark' title='Permanent Link: #Python &#8211; o que é?'>#Python &#8211; o que é?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/01/python-pt3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#Python &#8211; pt2</title>
		<link>http://blog.geoprocessamento.net/2010/01/python-pt2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-pt2</link>
		<comments>http://blog.geoprocessamento.net/2010/01/python-pt2/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 23:52:14 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=269</guid>
		<description><![CDATA[Buenas pessoal, Bem, Python, como expliquei no post passado é uma linguagem de alto nível e muito recomendada pela ESRI para se construir modelos de geoprocessamento (semelhantes aos construídos no ModelBuilder) e scripts para processamento de informações. Primeiro, para quem deseja aprender Python: python.org e python.org.br Aqui encontramos algumas coisas fundamentais, como documentação e links [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt3/' rel='bookmark' title='Permanent Link: #Python &#8211; pt3'>#Python &#8211; pt3</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-o-que-e/' rel='bookmark' title='Permanent Link: #Python &#8211; o que é?'>#Python &#8211; o que é?</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Buenas pessoal,</p>
<p>Bem, Python, como expliquei no post passado é uma linguagem de alto nível e muito recomendada pela ESRI para se construir modelos de geoprocessamento (semelhantes aos construídos no ModelBuilder) e scripts para processamento de informações.</p>
<p>Primeiro, para quem deseja aprender Python:</p>
<p><a rel="nofollow" target="_blank" href="http://www.python.org/">python.org</a> e <a rel="nofollow" target="_blank" href="http://www.python.org.br/">python.org.br</a></p>
<p>Aqui encontramos algumas coisas fundamentais, como documentação e links para trocar idéias com a comunidade que desenvolve em Python.</p>
<p>Segundo: irc.freenode.net nos canais #python e #python-br . Nestes locais é possível conversar com desenvolvedores brasileiros e internacionais e resolver possíveis dúvidas.</p>
<p>Terceiro: este aplicado a quem quer integrar esta poderosa ferramenta aos seus métodos de trabalho - <a rel="nofollow" target="_blank" href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=An_overview_of_commonly_used_tools">WebHelp ESRI</a> e <a rel="nofollow" target="_blank" href="http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=An_overview_of_writing_geoprocessing_scripts">WebHelp Esri 2</a>.</p>
<p>Não tenha medo de errar e não tenha medo de buscar ajuda.</p>
<p>Então vamos lá.</p>
<p>Para qualquer coisa que você queira fazer em python, é necessário importar o módulo que cuida dos objetos geográficos da ESRI, o arcgisscripting.</p>
<p>#importando o módulo arcgisscripting<br />
import arcgisscripting</p>
<p>Quando um script .py contém esta instrução (ela deve ser feita no ínicio do seu script), o python deixa a sua disposição os objetos da ESRI. No webhelp você pode encontrar uma descrição ampla de TODOS eles, bem como exemplos.</p>
<p>Certo, mas depois que este módulo está disponível, o que fazemos para começar a mexer com o ArcGIS?</p>
<p>É necessário criar um objeto do tipo geoprocessing, fornecido pelo módulo arcgisscripting. Olhem o exemplo</p>
<p>gp = arcgisscripting.create()<br />
#este método, sem parâmetros serve tanto para 9.2 quanto para 9.3<br />
#para 9.3, é melhor especificar o paramêtro 9.3 e.g.: gp = arcgisscripting.create(9.3)</p>
<p>O que podemos fazer com o Python? Bem, em teoria, tudo o que estiver disponível dentro de uma Toolbox do ArctoolBox também está disponível para o Python. O Python na verdade, consegue fazer qualquer coisa que esteja em uma toolbox e ainda mais!</p>
<p>Lembre-se que o Python contém muitos módulos, como acesso à sítios remotos, módulos para gerenciar emails, matemáticos, FTP, conversores para PDF, acesso à banco de dados (MSSQL, PostgreSQL, SQLite, entre outros), manipuladores XML...ou seja, é muito flexível e extensível.</p>
<p>Para realizarmos operações dentro do ArcGIS, temos que utilizar o módulo sys e geralmente o módulo os, ambos nativos no Python. Hoje não falarei de como construir scripts que rodam à partir do ArcGIS, apenas scripts que rodam diretamente da shell python (alguém conhece alguma utilidade pra isso? acessar objetos geográficos sem abrir o ArcGIS?)</p>
<p>Bem, imaginemos que queremos Projetar ou Definir projeção de diversos itens, ao mesmo tempo:</p>
<p>#projetar diversos shapefiles para uma única projeção<br />
import sys, os, arcgisscripting</p>
<p>Caminho = "C:\\Pasta\\Shapefiles\\"<br />
#no Python, temos de duplicar as barras, pois uma barra \ é interpretada como alguns<br />
#caracteres especiais, como nova linha, tabulação, entre outros</p>
<p>gp = arcgisscripting.create(9.3)</p>
<p>#vamos projetar shapefiles/featureclasses. temos de utilizar<br />
#as toolboxes correspondentes, entao vamos adicioná-las</p>
<p>gp.AddToolbox("C:\\CaminhoAtéAToolbox\\Nome da Toolbox.tbx")</p>
<p>#podemos adicionar tantas toolboxes quanto precisarmos<br />
#só devemos lembrar que mesmo através de scripts Python, as licensas de extensões<br />
#SÃO CHECADAS. se você não tiver o spatial analyst, o Python irá dar um chilique</p>
<p>gp.Workspace = Caminho<br />
#vamos definir o workspace. No ArcGIS + Python, muita coisa depende do workspace.<br />
#ele é basicamente um apontamento para o diretório correto.</p>
<p>ListaShapefiles = gp.ListDatasets("*","ALL")<br />
#vamos criar um objeto do tipo lista, e inserir nela todos os objetos do arcgis.<br />
#os parametros "*" e "ALL" está dizendo para o ArcGIS inserir na lista todos<br />
#os objetos, sem especificação de tipo (que podem ser Feature, TIN, Raster e CAD)</p>
<p>print ListaShapefiles<br />
#me mostre o que será projetado</p>
<p>projecao = "C:\\CaminhoAteAProjecao\\Projecao.prj"</p>
<p>for Shapefile in ListaShapefiles:<br />
----gp.Project_management(Shapefile,Shapefile+"_projetado",projecao)<br />
----print "Projetei " + Shapefile</p>
<p>#considere os quatro - como uma identação, um toque na tecla tab (o blog está engolindo os espaços)<br />
#fim</p>
<p>Este script é bem simples, deve ser salvo como .py, e ser rodado através da shell python ou com dois cliques no mesmo (desde que o Python esteja devidamente e corretamente instalado).</p>
<p>Algumas notas no entanto: note a forma que duplicamos as barras. Se você utilizar somente uma barra o Python não conseguirá achar os caminhos corretamente.</p>
<p>Os nomes de saída da função project são Shapefile_projetado.</p>
<p>A identação no trecho "gp.Project_management..." é PROPOSITAL E DEVE ESTAR LÁ. SEM ELA O SCRIPT NÃO FUNCIONARÁ. O Python usa a identação obrigatória como forma de controle de código.</p>
<p>Não se esqueça, tudo o que vem depois de # é considerado pelo Python um comentário, não influenciando no programa.</p>
<p>Note que para projetar uma pasta/set de shapefiles diferentes, temos que alterar a variável Caminho, lá em cima. O que podemos fazer para dinamizar esta questão? Como podemos perguntar ao usuário qual é a pasta que precisamos projetar? E a projeção, como definir ela dinamicamente? Essa fica de dever de casa <img src='http://blog.geoprocessamento.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>E agora senhores, o que podemos fazer com Python? Podemos utilizar todas as Toolboxes do ArcGIS para realizar milhares de operações com diversos shapes/featureclasses, e até mesmo cosntruir modelos complexos, do tipo que vemos em ModelBuilder, simulando eventos.</p>
<p>Vamos aprender Python?</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt3/' rel='bookmark' title='Permanent Link: #Python &#8211; pt3'>#Python &#8211; pt3</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-o-que-e/' rel='bookmark' title='Permanent Link: #Python &#8211; o que é?'>#Python &#8211; o que é?</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/01/python-pt2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>#Python &#8211; o que é?</title>
		<link>http://blog.geoprocessamento.net/2010/01/python-o-que-e/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=python-o-que-e</link>
		<comments>http://blog.geoprocessamento.net/2010/01/python-o-que-e/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 22:47:21 +0000</pubDate>
		<dc:creator>George Rodrigues da Cunha Silva</dc:creator>
				<category><![CDATA[George Silva]]></category>
		<category><![CDATA[ArcGIS]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.geoprocessamento.net/?p=141</guid>
		<description><![CDATA[Olá pessoal, Primeiro gostaria de falar sobre a Geo Rede. GeoRede é um projeto do site Geo.NET, um agregador de feeds de diversos blogs sobre Geoprocessamento/Sensoriamento Remoto em geral. Estou lá também! Depois passem lá e deêm uma olhada. Se você não conhece o Geo.NET é mais uma coisa bacana. Fórum, seção de downloads e [...]


Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/usando-python-e-o-geoprocessing-framework-2/' rel='bookmark' title='Permanent Link: Usando Python e o geoprocessing framework #2'>Usando Python e o geoprocessing framework #2</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal,</p>
<p>Primeiro gostaria de falar sobre a Geo Rede. <strong>GeoRede</strong> é um projeto do site <a rel="nofollow" target="_blank" title="Geo.NET" href="http://www.geoprocessamento.net" target="_blank">Geo.NET</a>, um agregador de feeds de diversos blogs sobre Geoprocessamento/Sensoriamento Remoto em geral.</p>
<p>Estou lá também! Depois passem lá e deêm uma olhada. Se você não conhece o <a rel="nofollow" target="_blank" title="Geo.NET" href="http://www.geoprocessamento.net/" target="_blank">Geo.NET</a> é mais uma coisa bacana. Fórum, seção de downloads e muito mais.</p>
<p>Bem, hoje falo para os usuários de ArcGIS. Vocês já devem ter notado, que durante a instalação do ArcGIS ele te pergunta/pede para instalar uma linguagem de programação chamada Python. Bem, se algum de vocês já abriram a aba dela no menu Iniciar do windows devem ter se deparado com algo bastante simples, a IDLE. A IDLE é um shell que intepreta comandos em Python. Algo como o DOS.</p>
<p>Bem, não dá pra fazer muita coisa pela IDLE, já que estamos limitados a "programas" de uma linha. Mas o porque estou falando de Python? O ArcGIS, felizmente, tem um ambiente customizável e permite ao usuário mais avançado a desenvolver suas próprias ferramentinhas, para executar uma infinidade de ações. Desde tarefas de "geoprocessamento" (<em>geoprocessing</em>) à customizar suas layers e representações.</p>
<p>Existem duas maneiras de se estender o ArcGIS. Uma delas é através de uma linguagem compilada .NET (ou VBA) e através do Python.</p>
<p>De acordo com a própria <em>ESRI</em>, a linguagem recomendada para se trabalhar com <em>geoprocessing</em> é Python. O .NET é mais fácil caso você precise estender a GUI (<em>Graphic User Interface</em>) e montar coisinhas mais complexas. O Python é recomendado para geoprocessing e a criação de ferramentas mais simples justamente pelo Python ser simples. A linguagem Python, criada em 1991, é considerada VHLL (<em>Very High Level Language</em>) e traz enormes facilidades para desenvolvedores iniciantes.</p>
<p>Primeiramente, ela é dinamicamente tipada (<em>what the hell?!</em>). Bem isso significa que não é necessário declarar com QUE tipos de variáveis queremos trabalhar antecipadamente. Você coloca alguma coisa na variável e o Python identifica o que ela é pra você. Ou seja, não existe muita confusão no momento de falar que A = 3 ou A = "spam". (neste exemplo, A = 3, representa automaticamente que A é uma variável do tipo inteiro e que em segundo momento, ela é do tipo <em>string</em>)</p>
<p>Segundamente, Python não é uma linguagem compilada. Não é necessário desenvolver um arquivo executável ou algo do tipo, ela é interpretada conforme o Python lê o código digitado. Isso traz uma perda de velocidade (nada muito importante) mas o ganho em agilidade no desenvolvimento compensa.</p>
<p>Python tem tipos muito flexíveis, como listas e dicionários. Não entrarei em detalhes, mas você pode com uma única expressão, criar uma lista com valores que você esteja trabalhando e de forma mais fácil ainda, ler os mesmos.</p>
<p>Um exemplo de lista, que sempre estão entre COLCHETES:</p>
<pre name="code" class="python">

ListaTeste = ['spam','geoprocessamento',2,['arcgis','envi','arcsde']]
</pre>
<p>Temos na lista acima os items 'spam', 'geoprocessamento',2 e uma outra lista! aninhada, com os objetos 'arcgis','envi' e 'arcsde'. Listas são o carro-chefe do Python e devem ser aprendidas o quanto antes. Através delas podemos fazer o capeta com muito pouco código.</p>
<p>Agora, como integro ArcGIS com Python? A ESRI disponibiliza uma "API" própria para manipulação (de seus) objetos geográficos, como Feature Classes, Layers, Datasets, Geodatabases entres outros.</p>
<p>tudo o que tiver após # são considerados comentários, e não são interpretados pelo Python.</p>
<p>Um exemplinho simples de um script em Python (embora não muito útil) manipulando dados do ArcGIS seria:</p>
<pre name="code" class="python">

import os, sys, arcgisscripting

gp = arcgisscripting.create(9.3) #vamos criar um objeto do tipo geoprocessing, versão 9.3

ListaCamadas = gp.ListDatasets(r"C:\teste python\geodatabase.gdb")
#pega uma lista dos featuredatasets no geodatabase.gdb

for camada in ListaCamadas: #para cada camada em ListaCamadas
    print camada #imprima camada

#a resposta do Python vai ser algo assim.

&gt;&gt;&gt;&gt;['Hidrografia','Altimetria','Geologia','Transportes']
</pre>
<p>Bem, vejam como é fácil andar pelas listas e realizar operações em série. Os loops em Python são descomplicadíssimos.</p>
<p>Sugiro que agora, corram ao site da ESRI, e deem uma olhada nos <em>geoprocessing Objects</em>. Eles podem facilitar muito a vida de um utilizador de SIG.</p>
<p>Um abraço</p>


<p>Related posts:<ol><li><a href='http://blog.geoprocessamento.net/2010/01/python-pt2/' rel='bookmark' title='Permanent Link: #Python &#8211; pt2'>#Python &#8211; pt2</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/01/python-pt4/' rel='bookmark' title='Permanent Link: #Python &#8211; pt4'>#Python &#8211; pt4</a></li>
<li><a href='http://blog.geoprocessamento.net/2010/07/usando-python-e-o-geoprocessing-framework-2/' rel='bookmark' title='Permanent Link: Usando Python e o geoprocessing framework #2'>Usando Python e o geoprocessing framework #2</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.geoprocessamento.net/2010/01/python-o-que-e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

