Вы находитесь на странице: 1из 1

Identificao do local ideal para a instalao de um centro de logstica de distribuio de medicamentos

- nas NUT III Minho-Lima, Cvado, Ave, Tmega e Entre Douro e Vouga
O valor da Programao em SIG na identificao das reas adequadas

Palavras-chave:

Pinto, Dulcineia.; Arajo, Marta.; Moutinho, Sandra.

Programao, Arcpy, Python, ArcGis, PyDev, Shapefile, Excel, Raster

Introduo

Resultados

No mbito da Unidade Curricular de Introduo Programao em SIG do Mestrado de Sistemas de Informao Geogrfica e Ordenamento do Territrio foi proposto o desenvolvimento de uma biblioteca
Python, no qual fosse capaz de executar um conjunto de operaes especficas para o tratamento de dados geogrficos e tabulares, de rasters, de modelos digitais de terreno (MDT) para conseguir chegar
melhor localizao de um centro logstico de distribuio de medicamentos. Seguidamente, foi a este grupo de trabalho atribuda uma rea de estudo (NUT III) sendo estas as NUT III Minho-Lima, Cvado, Ave, Tmega e Entre Douro e Vouga, segundo a Organizao Administrativa do ano de 2002.
Para conseguir criar esta biblioteca, recorreu-se biblioteca ArcPy integrada no software ArcGis 10.3. Relativamente ao cdigo, este foi criado, desenvolvido e testado no software Eclipse.
No que diz respeito aos dados de partida, foram disponibilizados ficheiros referentes altimetria, CAOP2015, COS2007n2, vias rodovirias em formato shapefile, assim como ficheiros Excel sobre dados
demogrficos, localizao de hospitais, centros hospitalares, centros de sade e farmcias de todo o pas. Toda a informao disponibilizada foi ao nvel de Concelho.

Objetivos

import arcpy
from arcpy import env, da, UpdateCursor
env.overwriteOutput=True

RESULTADO FINAL
import arcpy
from arcpy import env, da, UpdateCursor
env.overwriteOutput=True

env.workspace="G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile"
env.workspace="G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile"
fc= "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_Pop.shp"
#AddField_management (in_table, field_name, field_type,
{field_precision}, {field_scale}, {field_length}, {field_alias},
{field_is_nullable}, {field_is_required}, {field_domain})
arcpy.AddField_management(fc, "AREA",
"DOUBLE","","","","","NON_NULLABLE","NON_REQUIRED")
print "novo campo criado"

#realizar o intersect das shapes pedidas nos criterios


in_features = ["G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_Varpositiva_Pop_E.shp", "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\AreaSelect500_3000.shp",
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Pop_sup_MEAN.shp","G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Racio_Farmacias.shp",
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Racio_Centros_de_Saude.shp", "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Racio_Hospitais.shp",
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Racio_Centro_Hospitalares.shp", "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\PIB_select.shp"]
arcpy.Intersect_analysis (in_features, "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Intersect_Intermedio.shp", "ALL", "", "INPUT")

arcpy.CalculateField_management(fc, "AREA", "!


shape.area@squarekilometers!","PYTHON","#")
print "Area calculada em km2"

Para realizar este trabalho definiu-se os seguintes objetivos:

Colocar em prtica os conhecimentos adquiridos nas aulas da unidade curricular de Introduo Programao em SIG;

Criar uma biblioteca Python capaz de executar um conjunto de operaes especficas para o tratamento de dados (geogrficos; tabulares; rasters; MDT);

Determinar a localizao ideal para um centro de logstica de distribuio de medicamentos na NUT III do Minho-Lima, Cvado, Ave, Tmega e Entre Douro e Vouga, seguindo determinados critrios
de anlise gerais e trs secundrios escolha j pr-estabelecidos, que se faz referncia a seguir na Metodologia.

O objetivo final passa pela integrao da biblioteca desenvolvida no software ArcGIS, atravs da criao de uma toolbox parametrizvel pelo utilizador.

print "intersect intermedio concluido"


# remover da shape do intersect as areas de exclusao que e o resultado dos declives em shape de poligonos
# a area metropolitana do porto nao entra porque a nut ja a exclui
#realizar o intersect das shapes pedidas nos criterios

arcpy.AddField_management(fc, "DENS_POP",
"DOUBLE","","","","","NON_NULLABLE","NON_REQUIRED")
print "novo campo criado para a densidade populacional"

in_features = ["G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Intersect_Intermedio.shp", "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\areas_exclusao.shp"]


arcpy.Intersect_analysis (in_features, "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Intersect_Final.shp", "ALL", "", "INPUT")

arcpy.CalculateField_management(fc, "DENS_POP", "[PR_2011] /


[AREA]", "VB", "")
print "densidade populacional calculada"

print "Intersect final concluido"

#selecao por atributos dos municipios com densidade superior a 150


hab/km2
select = "select"
arcpy.MakeFeatureLayer_management(fc, select)
arcpy.SelectLayerByAttribute_management(select, "NEW_SELECTION",
'"DENS_POP" > 150')
arcpy.CopyFeatures_management(select,
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_DENS_POP_Muni
ci.shp")
print "selecao dos municipios com densidade superior a 150 hab/km2
concluida"
arcpy.Erase_analysis
("G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_DENS_POP_Mun
ici.shp","G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\AreaSelec
t500_3000.shp","G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Era
se_buffer_denspop.shp")
print "recorte efetuado"

Figura 1. NUT III Minho-Lima (Ponte de Lima)

fc= "G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_Pop.shp"
arcpy.AddField_management(fc, "VAR_25_64", "DOUBLE")
print "novo campo criado"
#calcular o valor da variavel
arcpy.CalculateField_management(fc, "VAR_25_64", "[PR25_64__1] [PR25_64_20]", "VB", "")
print "variavel calculada"
#selecao por atributos para a variacao positiva da populacao
select = "select"
arcpy.MakeFeatureLayer_management(fc, select)
arcpy.SelectLayerByAttribute_management(select, "NEW_SELECTION",
'"VAR_25_64" > 0')
arcpy.CopyFeatures_management(select,
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_Varpositiva_25_64.
shp")
print "selecao da variacao positiva concluida"
#intersecao da variacao da populacao dos 25 aos 64 positiva com o buffer da rede 500 e 3000m
arcpy.Intersect_analysis
(["G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\Caop_Varpositiva_25_6
4.shp",
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\AreaSelect500_3000.shp"
],
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\variacao_buffer_inters_
25_64.shp", "ALL", "", "INPUT")
print "Intersect concluido"

Figura 2. NUT III do Cvado (Rio Cvado, Esposende)

TOOLBOX
import arcpy, os
from arcpy import env
arcpy.env.overwriteOutput=True

import arcpy
from arcpy import env, da, UpdateCursor
env.overwriteOutput=True

Figura 3. NUT III do Ave (Gres)

Figura 4. NUT III do Tmega (Rio Douro, Cinfes)

Metodologia - Workflow

Figura 5. NUT III Entre Douro e Vouga (Castelo de Santa Maria da Feira)

env.workspace="G:\\IPSIG\\TrabalhoINPSIG\\Fich
eirosShapefile"
target_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Caop_Pop.shp"
join_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Farmacias_Portugal_SNS_ETRS.shp"
out_feature_class =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Farmacias_NUT.shp"
arcpy.SpatialJoin_analysis(target_features,
join_features, out_feature_class)
print "processo terminado"
fc="G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapef
ile\\Farmacias_NUT.shp"
select = "select"
arcpy.MakeFeatureLayer_management(fc, select)
arcpy.SelectLayerByAttribute_management
(select, "NEW_SELECTION", '"Join_Count" > 7')
arcpy.CopyFeatures_management(select,
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Racio_Farmacias.shp")
print "Racio de farmacias concluido"
#racio dos hospitais superior a 1
target_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Caop_Pop.shp"
join_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Hospitais_Nut.shp"
out_feature_class =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Hospitais_Nut_join.shp"
arcpy.SpatialJoin_analysis(target_features,
join_features, out_feature_class)
print "processo terminado"
fc="G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapef
ile\\Hospitais_Nut_join.shp"

Dulcineia Candida Bernardo Pinto. Departamento de Geografia da Faculdade de Letras da Universidade do Porto. E-mail: up199904583@letras.up.pt

select = "select"
arcpy.MakeFeatureLayer_management(fc, select)
arcpy.SelectLayerByAttribute_management
(select, "NEW_SELECTION", '"Join_Count" = 1')
arcpy.CopyFeatures_management(select,
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Racio_Hospitais.shp")

target_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\C
aop_Pop.shp"
join_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\C
entro_de_Saude_Nut.shp"
out_feature_class =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\C
entros_de_saude_join.shp"
arcpy.SpatialJoin_analysis(target_features,
join_features, out_feature_class)
print "processo terminado"
fc="G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile
\\Centros_de_saude_join.shp"
select = "select"
arcpy.MakeFeatureLayer_management(fc, select)
arcpy.SelectLayerByAttribute_management(select,
"NEW_SELECTION", '"Join_Count" > 1')
arcpy.CopyFeatures_management(select,
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\R
acio_Centros_de_Saude.shp")
print "Racio de centros de saude concluido"
#racio dos centros hospitalares superior ou
igual a 1
target_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\
Caop_Pop.shp"
join_features =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\
Centro_Hospitalares_Nut.shp"
out_feature_class =
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\
Centro_Hospitalares_Nut_join.shp"
arcpy.SpatialJoin_analysis(target_features,
join_features, out_feature_class)
print "processo terminado"
fc="G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefil
e\\Centro_Hospitalares_Nut_join.shp"
select = "select"
arcpy.MakeFeatureLayer_management(fc, select)
arcpy.SelectLayerByAttribute_management(select,
"NEW_SELECTION", '"Join_Count" = 1')
arcpy.CopyFeatures_management(select,
"G:\\IPSIG\\TrabalhoINPSIG\\FicheirosShapefile\\
Racio_Centro_Hospitalares.shp")
print "Racio de centros hospitalares concluido"

Marta Alexandra Martins de Arajo. Departamento de Geografia da Faculdade de Letras da Universidade do Porto. E-mail: up201203122@letras.up.pt
Sandra Helena Bonifcio Moutinho. Departamento de Geografia da Faculdade de Letras da Universidade do Porto. E-mail: up201206167@letras.up.pt

arcpy.env.workspace="I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosFinais"
if not (os.path.exists("I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosFinais\\resultados")):
os.mkdir("I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosFinais\\resultados")

print "Racio de hospitais concluido"

else:
arcpy.env.workspace="I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosFinais\\resultados"
fcs= arcpy.ListFeatureClasses("*")
for fc in fcs:
arcpy.Delete_management(fc)
print "Apagou:"+ fc
arcpy.env.workspace="I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosFinais"
#Nome nova shape#
fcName= arcpy.GetParameterAsText(0)
#Nome da pasta
fcFolder= arcpy.GetParameterAsText(1) #fcFolder="
#"I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosShapefile"
arcpy.env.workspace= fcFolder
fcList= arcpy.ListFeatureClasses()
arcpy.Merge_management(fcLit,
"I:\\TrabalhoINPSIG\\TrabalhoINPSIG\\FicheirosFinais\\resultados\\" + str(fcName))
print "Criou o ficheiro shapefile:"+ fcName
print "Concluiu a tarefa"

Concluso
Com a realizao deste trabalho foi possvel aplicar os conhecimentos adquiridos ao longo das aulas sobre a linguagem de programao Python, no qual se apresentou algumas das potencialidades deste tipo de
linguagem em interao com o ArcGis. Isto vai ser benfico para a automatizao do processo, pois vai aumentar a rapidez de todo o processo e permitir economizar em tempo, executando tarefas demoradas e
repetitivas no software.
Para realizar este trabalho decidiu-se fazer os scripts por partes uma vez que se se fizesse o script todo seguido iria dar bastantes problemas. Mesmo assim, ao longo do processo surgiu alguns problemas, como
que alguns dos scripts davam erro. Contudo, conseguiu-se solucionar esses erros a medida que iam surgindo.
Ao adicionar um script para a toolbox no ArcGis, este tornou-se uma ferramenta que se pode usar como qualquer outra ferramenta no ArcToolbox.
Com a realizao deste trabalho conseguiu-se atingir o objetivo pretendido, identificar a melhor localizao para a instalao de um centro de logstica de distribuio de medicamentos, nas reas das NUT III
Minho-Lima, Cvado, Ave, Tmega e Entre Douro e Vouga, ou seja, uma pequena rea do concelho de Santo Tirso, seguindo os cririos pr-estabelecidos.
A programao em Python pode ser complexa e um pouco complicada devido a complexidade dos cdigos. No entanto, a experincia e o conhecimento, que se adquiriu ao desenvolver este projeto, podero ser
uma mais valia em termos futuros e profissionais.

Agradecimentos
O principal agradecimento dirigido ao professor Alberto Gomes por todo o apoio, orientao e dedicao que prestou ao longo do semestre.
Agradecemos tambm aos professores da cadeira de Introduo Programao de SIG que ajudaram na aprendizagem e na elaborao deste trabalho: o auxilio, a interajuda, a cooperao e a fora oferecida.

Bibliografia e Webgrafia

ArcGis Pro - http://pro.arcgis.com/en/pro-app/arcpy/main/arcgis-pro-arcpy-reference.htm

Briggs, Anthony Hello! Phyton, february 2012 - 424 pages isbn: 9781935182085

Geographic Information Systems - http://gis.stackexchange.com/questions/

Lutz Mark Phyton pocket reference, oreilly media october 209 isbn: 978-0596158088

Nathan Jennings A phyton primer for arcgis, december 2011 462 pages isbn: 146627459x

Python - http://www.python.org

Вам также может понравиться