Académique Documents
Professionnel Documents
Culture Documents
Faculdade de Letras
Faculdade de Letras
Tambm importa realar que nas duas primeiras linhas foi introduzido um cdigo que
permite ao software ler expresses com acentos e cedilhas.
#!/usr/bin/env python
#-*- coding: utf-8 -*import arcpy, os, shutil
from arcpy import env, ListFiles, ListFeatureClasses, UpdateCursor
Como temos trs verificaes e para no estar a repetir cdigo, criamos uma
funo no inicio do script que verifica se a pasta existe, se existir elimina-a, se no
existir cria uma pasta nova:
def VerificarPasta(Caminho, Dados):
if os.path.exists(Caminho):
shutil.rmtree(Caminho)
os.mkdir(Caminho)
arcpy.AddMessage("Pasta Dados "+ Dados + " vazia.")
else:
os.mkdir(Caminho)
arcpy.AddMessage("Pasta Dados criada.")
Faculdade de Letras
valores e uma lista vazia, utilizando o ciclo for vamos percorrer todos os valores da
lista e com aliando os.path.basename conseguimos seguido do splitext obtemos o
nome do ficheiro sem a terminaao correspondente ao tipo de ficheiro. Este nome vai
ser guardado na lista vazia. Tivemos de criar duas listas de entrada, numa lista esto
contidas todas as .shp e na outra todos os .prj, desta maneira, executando um ciclo for
de verificaao sempre que ele encontra dois nomes iguais (shp+prj) ele apaga o valor
da lista e vai apenas deixar na lista o nome dos ficheiros shp que no tm sistema de
coordenadas (pois no encontrou o seu homnimo .prj).
Assim utilizando uma nova condiao, se a lista tiver resultados fazemos logo um
Define Projection para esses ficheiros, caso contrario emite uma mensagem que diz
que todos os ficheiros tem sistema de coordenadas, como a priori sabiamos que
tinhamos ficheiros sem sistema de coordenadas procedemos a sua definiao sendo o
sistema de coordenas utilizado o Lisboa Hayford Gauss IGeoE, decidimos fazer um
parametro desta condio nesta Toolbox para o utilizador poder definir o sistema de
coordenadas em falta nos elementos.
def CorrerListaReterNome(Cam,Lista,ListaOut):
for i in Lista:
NFicheiro=os.path.basename(Cam + "\\" + i)
lfi= os.path.splitext(NFicheiro)[0]
ListaOut.append(lfi)
LFprj= ListFiles("*.prj")
LFCprj=ListFeatureClasses()
listaprj1=[]
listaprj2=[]
CorrerListaReterNome(Caminho,LFprj,listaprj1)
CorrerListaReterNome(Caminho,LFCprj,listaprj2)
for n in listaprj1:
for nn in listaprj2:
if n == nn:
listaprj2.remove(nn)
if len(listaprj2)!= 0:
arcpy.AddMessage("Os Ficheiros "+ str(listaprj2)+" nao tem projecao.")
#Definir a projecao dos dados:
CoordSys=arcpy.GetParameterAsText(2)
for elemento in listaprj2:
arcpy.DefineProjection_management(elemento+".shp", CoordSys)
arcpy.AddMessage("Adicionada Projecao aos Ficheiros que nao tinham
Sistema de Coordenadas.")
else:
arcpy.AddMessage("Todos os ficheiros tem projecao.")
Faculdade de Letras
Como o nosso objetivo era trabalhar sobre os dados da regio Norte e Centro
foi necessrio preparar a shapefile para o clip definindo os limites desta mesma regio
no entanto como este script o utilizado na Toolbox e como queremos que seja
possivel ao utilizador escolher a area para obteno de resultados trabalhamos um
pouco os dados para que atravs de uma expressao SQL fosse possivel definir a area.
O primeiro passo passou por criar uma funao que recebe um texto e uma lista,
o texto refere-se Area e a lista contem os municipios que pertencem a esta NUT. a
funao cria um feature layer para cada municipio e guarda numa lista, depois
Pgina | 4
Faculdade de Letras
procedendo ao merge dessa lista ficamos com a Area, depois adicionamos um campo a
essa Feature Classe e calculamos o campo para que fique com o valor da NUT. No final
faz-se o merge de todas estas NUT e voltamos a ficar com um Shapefile do pais inteiro.
def FCalculator(Area, Lista):
MunList=[]
for elem in Lista:
AreaIn= elem + ".lyr"
AreaOut = str(Area) + ".shp"
Field = "NUT"
arcpy.MakeFeatureLayer_management(CAOP, AreaIn, '"Distrito" LIKE ' +
"'" + elem + "'",CaminhoOut)
MunList.append(AreaIn)
arcpy.Merge_management(MunList, CaminhoOut + "\\" + AreaOut)
arcpy.AddField_management(AreaOut, Field, "TEXT", "", "", "", "",
"NULLABLE")
arcpy.CalculateField_management(AreaOut, Field, '"' + Area + '"' , "VB")
arcpy.AddMessage("Feature Classe "+Area+ " exportada")
#Preparar a shp para o clip
arcpy.env.workspace = CaminhoOut
CAOPFeat="CAOP_Merge.shp"
Norte = ["BRAGA","VIANA DO CASTELO", "PORTO", "VILA REAL", "BRAGAN%"]
Centro = ["AVEIRO", "VISEU", "GUARDA", "COIMBRA", "CASTELO BRANCO", "LEIRIA"]
Lisboa=["LISBOA","SET%"]
Alentejo=["SANTAR%", "PORTALEGRE", "%VORA", "BEJA"]
Algarve = ["FARO"]
FCalculator("Norte", Norte)
FCalculator("Centro", Centro)
FCalculator("Lisboa", Lisboa)
FCalculator("Alentejo", Alentejo)
FCalculator("Algarve", Algarve)
arcpy.Merge_management(["Norte.shp","Centro.shp","Lisboa.shp","Alentejo.shp",
"Algarve.shp"], CaminhoOut + "\\"+ CAOPFeat)
arcpy.Dissolve_management(CAOPFeat,"CAOP2014_Concelhos.shp",["DICO","Municipi
o","NUT"] [["Area_T_Ha", "SUM"], ["Distrito", "FIRST"]])
arcpy.AddMessage("Dissolve executado")
Pgina | 5
Faculdade de Letras
Agora que temos a rea delimitada regio Norte e Centro podemos proceder
anlise propriamente dita. Recorrendo Carta de Ocupao do Solo de 2007,
selecionamos as reas potenciais de indstria e comrcio (como o Nvel 2 definido
como 1.2) e exportmo-las.
AIndeCom= "Areas_IndeCom.shp"
SByAtributes("Feature","AreasPotenciais.Lyr","Clip_PRJ_COS2007N2.shp",
"NEW_SELECTION", '"COSN2" = \'1.2\'',CaminhoOut, AIndeCom)
arcpy.AddMessage("Areas Potenciais de Industria e Comercio exportadas")
Pgina | 6
Faculdade de Letras
OutLayer,Origem,
Selecao,
Expressao,CaminhoOut,
if type== "Feature":
arcpy.MakeFeatureLayer_management(Origem, OutLayer)
arcpy.SelectLayerByAttribute_management(OutLayer, Selecao, Expressao)
arcpy.FeatureClassToFeatureClass_conversion(OutLayer,CaminhoOut,
"\\"+ OutShape )
else:
arcpy.MakeRasterLayer_management(Origem, OutLayer)
arcpy.SelectLayerByAttribute_management(OutLayer, Selecao, Expressao)
arcpy.RasterToPolygon_conversion(OutLayer, CaminhoOut+"\\"+OutShape,
"NO_SIMPLIFY",
"VALUE")
AExclusaoBuff="Buffer.shp"
arcpy.MultipleRingBuffer_analysis(SelFeatures, CaminhoOut + "\\"+
AExclusaoBuff, [500,2000],"meters", "", "ALL")
SByAtributes("Feature", "Buffer.lyr", AExclusaoBuff, "NEW_SELECTION",
'"distance" = 2000',CaminhoOut, "AreaExclusao500_2000.shp")
arcpy.AddMessage("Areas de Exclusao entre 500 e 2000 metros das estacoes
exportadas")
Pgina | 7
Faculdade de Letras
arcpy.CheckOutExtension("Spatial")
TIN_Path=CaminhoOut + "\\TIN_Norte"
Raster="Rast_Norte.tif"
if(os.path.exists(TIN_Path)):
shutil.rmtree(TIN_Path)
arcpy.CreateTin_3d(TIN_Path, OutCoordSys, Altimetria + " ELEV Soft_Line
<None>;", "DELAUNAY")
arcpy.EditTin_3d(TIN_Path, shpClip + " <None> <None> hardclip false;
","DELAUNAY")
arcpy.AddMessage("TIN Criada")
arcpy.AddMessage("Primeira fase do processo concluida")
Pgina | 8
Faculdade de Letras
Faculdade de Letras
Toolbox:
Conforme descrito ao longo do relatorio decidimos dividir o script em dois e
entao criamos duas toolbox.
Pgina | 10
Faculdade de Letras
Faculdade de Letras
Concluso
Com este trabalho demonstraram-se algumas das potencialidades em usar a
linguagem de programao Phyton em conjugao com o ArcGis para executar rotinas
que normalmente para alm de demoradas, so repetitivas neste software. Aps a
execuo do Script, apenas necessrio definir os novos ficheiros de entrada,
gerando-se todo o sucessivo processo de comandos e funes de anlise no ArcGis,
processamento e apresentao de resultados de uma forma rpida e automtica.
A toolbox que criamos permite ainda que com a expresso SQL que serve de
parametro seja possvel atraves dos mesmos dados obter resultados para zonas
diferentes, por exemplo s Norte ou s Centro.
Ao longo deste trabalho tivemos alguns problemas, erros que foram surgindo
nuns computadores e noutros no, mas no final todos pensamos que atingimos o
objetivo pretendido com o trabalho. De realar que a ajuda do Professor Ricardo e do
Daniel foram fundamentais na deteo de pequenos erros que nos passavam ao lado,
agradecemos por isso todo o auxilio e tempo debitado em ns e com o nosso projeto.
Concluindo, sabemos que por vezes a programaao Python pode ser
complicada devido especifissidade das suas linhas de cdigo, mas terminamos este
trabalho com a certeza que o conhecimento adquirido poder ser importante no
futuro.
Bibliografia e webgrafia:
Briggs, Anthony Hello! Phyton, february 2012 - 424 pages isbn:
9781935182085
Lutz Mark Phyton pocket reference, oreilly media october 209 isbn: 9780596158088
Nathan Jennings A phyton primer for arcgis, december 2011 462 pages
isbn: 146627459x
Http://www.python.org/
Http://www.pasteur.fr/formation/infobio/python/
Http://www.rexx.com/~dkuhlman/ python_book_01.html
Http://docs.python.org/release/2.6.8/
Pgina | 12
(
!
( !
!
(!
(
POVOA DE LANHOSO
!
(
(
!
(
!
(
!
ESPOSENDE
POVOA DE VARZIM
VILA DO CONDE
(
!
(
(!
!
(
!
!
(
(
!
(
FAFE
(!
(!
!
(!
(
!
(!
!
(
(
!
(
!
(
!
(
!
(
!
(
(!
(
!
(!
(!
(!
FELGUEIRAS
(!
(!
(
!
(!
!
(
!
(
!
(
!
(
!
PAOS DE FERREIRA
(
!
(!
(!
(!
!
(
(
!
(
(
!
(
!
(!
!
(
!
(
!
(
!
(
!
( !
!
(
!
( !
!
(
(
!
( !
!
( (!
(
( !
(
!
(
!
(
!
(!
!
(
!
(!
(!
(
(!
(
!
(
!
MESAO
FRIO
(
(!
(!
!
(
!
(
!
(
!
(
!
(
!
(
!
Oceano Atlntico
!
(
(!
!
(!
(!
((
(
!
(!
(
!
( !
!
(!
!
(
(
!
(!
!
(
(
!
(
!
(
(!
!
(!
!
(
(
!
(
!
(
!
(
!
(!
!
(
(
!
(!
!
(
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(!
!
(!
(!
(
!
(!
(
!
(!
(
(!
(!
!
(
(
!
(
!
(!
!
(!
(
(!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(
(!
!
PESO DA RGUA
LAMEGO
VALE DE CAMBRA
VISEU
(
!
(!
!
(
((
!!
( (
!
(!
(
!!
!
((
!
(!
!
(
(
!
(!
(!
!
!
((
!
(
!
(
!
(
!
(
!
(!
(!
(!
(!
(!
(
!
(
!
(
!
(!
!
!
(
(
(
(
!
!
(!
!!
(
(
!
(
(
!
(
!
(
!
(
(
!!
!
!
(
(!
(
(!
(!
(
!
(!
(
(!
!
(
!
(
!
(
!
(
!
(
!
(!
(!
!!
(
(
!
(
(
!
(
(!
(!
(
!
!
!
(
!
(!
!
!
(
(
!
(!
(!
!
!
(
((
!
(
!
!
(
(!
!
(
(!
((
!
(!
((
!
!
(
(
!
(
!
(
(
!
!
(
!
(!
!
(
((
!
(
!
(
!
!
(!
(
!
!
(
(
!
(
!
(
!
(
!
(
!
(
!
(
!
(!
(
(
!
(
!
(
!
(
(
(!
!
(!
!!
(
(
!
!
(
(!
(!
(!
(
!
!(
(
!
!
!
((!
(
!!
(
(
(!
!
(!
(
!
(!
(
!
(
!!
(
!
!
!
(
(
(!
!
(!
(
(
(
!
(
!
!
(
(
(!
!
!
(
(
!
(
(
!
!
!
(
!
! !!
!
(!
(!
!
(
(
!
!(
(
((
(!
(
!!
(
(((!
!
(
(!
((
(!
!
!
!
(!
(
(!
(!
(!
(
!
!
!
(!
(
(
((
!
(!
!
(
!
(
!
(
!
(
P o
r t
u g
a l
(
!
(
(!
!
!
(
(
(
(!
(!
(!
!
((!
!
! !
(
(!
(!
(
!
(
( !
(!
(
!
(
!
( !
(
!
(!
!
(
!
(
!
(
!
(
!
(
!
(
!
(!
!
(!
(!
(
!
(
!
(
!
(
!
(
(!
(
!
(!
(
!
(
!
(
!
(!
(
( !
!
(
!
(
!
!
(!
(
!
(
!
(!
(
!
(
!
(
!
(
!
(
(
!
(!
!
(
!
(
!
(
!
(
!
(
!
(
(
(!
!!
((
(!
!
(!
(
!!
!(
((
!
(!
!
(
!
!
(
(!
(
!
!
(!
(
!
(
(!
!
(!
(!
(!
!
!
!
(
(
!
(
(
(
!
!
(
(
!
!
!
!
(
(
(
!
!
(!
(
(
(
!
!
(
(!
(!
(!
(!
(
(!
(
!
LEIRIA
(
!
(
!
(
!
MARINHA GRANDE
(
!
(
!
10
(
!
20 Km
!
(
(
!
BATALHA !
(
(
!
NAZAR
(
!
(
!
PENICHE
(
!
CALDAS DA RAINHA
(
!
(
!
(
!
Estaes CP
Declives
Inferior a 5 graus
Superior a 5 Graus
50
E s p a n h a
!
(
(
!
(
!
(
!
(
!
(
!
(
(!
!
100 km
Linhas CP
Areas Possiveis de Implantao
Concelhos com Areas Possiveis