Este documento describe cómo usar Python para automatizar tareas de geoprocesamiento en ArcGIS mediante scripts. Explica que Python es un lenguaje de programación fácil de usar e integrado a ArcGIS que permite escribir código para realizar operaciones como cortar shapefiles. Además, presenta un ejemplo de script de Python que realiza un clip de shapefiles usando un shapefile de corte y almacena los resultados.
1. 1
El lenguaje Python y su funcionalidad con los
Sistemas de Información Geográfica mediante
ArcGIS 9.X
Bernardo Arango G., David Arenas H., Rafael Botero M.
Palabras clave: Geoprocesamiento, Python, script. son muy complejos y requieren amplio conocimiento para
desarrollar cosas sencillas.
Resumen—Este artículo relata la importancia y versatilidad Desde la versión 9, Arcgis permitió la elaboración de
de los scripts a la hora de automatizar tareas computacionales, scripts de una forma rápida y sencilla, de tal manera que sus
enfocándolo a tareas de geoprocesamiento en los sistemas de usuarios no requirieran ser programadores o tener destreza en
información geográfica (SIG), gracias a su integración con el
programación para realizar líneas de código que les
software ArcGIS. Para esta labor emplearemos el lenguaje de
permitieran resolver problemas que ellos encontraran en su día
programación Python el cual es muy fácil de aprender y de
a día con los SIG.
utilizar, además de que viene integrado a ArcGIS desde la
versión 9.0.
Desde esta versión se incorporó en la instalación de ArcGIS
el lenguaje Python, el cual es muy sencillo y fácil de aprender,
INTRODUCCION
I. es un lenguaje “abierto”, orientado a objetos, además de ser
muy útil para las labores de geoprocesamiento. Por estas
Las herramientas informáticas en la actualidad realizan un
razones encaminamos nuestro proyecto de la materia a este
sinnúmero de funciones que requieren de mucho tiempo para
aprenderlas a utilizar, a pesar de esto no hacen todas cosas que poderoso de lenguaje.
necesitamos ni cómo las necesitamos. Por estas razones este
tipo de herramientas permiten su personalización para poder Python no solamente es un lenguaje para escribir scripts,
ser adaptadas por los usuarios a su forma de trabajo y a sus también posee soporte y estructura para realizar programas
necesidades. Existe una manera rápida de personalización que largos con muchas líneas de código, es un lenguaje de muy
es a través de Scripts, éstos son un conjunto generalmente alto nivel y ofrece muchos tipos de datos y el chequeo de
corto de instrucciones o secuencias de código sin compilar errores es mucho más sencillo que con otros lenguajes de
que son ejecutadas por un software que las interpreta y que programación. Python permite dividir programas en módulos
permiten realizar acciones para automatizar tareas. que pueden ser reusados en otros programas escritos en
Python y en otros lenguajes, pues viene con una amplia
Los Sistemas de Información Geográfica (SIG) son
colección de módulos predefinidos que pueden ser usados
herramientas robustas pero en algunos casos requieren de
como base para otros programas escritos en el mismo
ciertas labores de personalización para agilizar diversas tareas,
lenguaje.
como lo son entre otras, las labores de geoprocesamiento,
entendidas estas como el procesamiento de información
Python es un lenguaje interpretado, lo cual ahorra tiempo
geográfica en la cual se crea nueva información a partir de la
pues no es necesario compilar. Este lenguaje no requiere ni
ya existente aplicando una serie de operaciones. En estos
obliga a la definición del tipo de dato de las variables,
casos existen herramientas al interior de los software SIG que
tampoco requiere escribir punto y coma(;) después de cada
permiten realizar estas labores, pero en algunos casos estas se
línea pero si es bastante delicado con la indentación pues los
vuelven engorrosas o demoradas de ejecutar porque no se
bloques de código requieren sangría de acuerdo a cómo estos
adaptan del todo a las necesidades del usurario, debido a lo
anterior, es necesario contar con un lenguaje de programación sean escritos.
“incrustado” que permita realizar scripts para realizar estas
tareas más fácilmente. El siguiente ejemplo ilustra la facilidad de uso de Python
ArcGIS integra varios lenguajes de programación que
permiten adaptarlo a las necesidades y requerimientos de sus
usuarios, estos permiten realizar scripts o líneas de código
sencillas que facilitan ciertas tareas pero algunos lenguajes
2. 2
En el gráfico anterior se observa que no es necesario definir el Ahora vamos a crear un nuevo script, para esto vamos al menú
tipo de variable incluso tampoco es necesario definir las File, New, Python Script y OK.
variables, pues con solo escribir su valor y el operador se
pueden obtener resultados de forma inmediata sin necesidad A continuación vamos a escribir el siguiente código:
de compilar el código, esto permite utilizar a Python como una
calculadora rápidamente. import win32com.client, sys, os
El código anterior importa los módulos de las librerías
estándar que van a ser utilizadas en el desarrollo del script.
II. METODOLOGÍA
win32com.client: Apoya la comunicación entre Pythom y
En nuestro proyecto pretendemos explicar cómo a través de
COM IDispatch.
Python se pueden escribir sentencias de código que permiten
realizar tareas de geoprocesamiento, para esto explicaremos
COM IDispatch: habilita a los lenguajes interpretados
en este artículo un script que permite cortar (clip) con un
basados en texto utilizar objetos COM.
shapefile uno o más shapefiles ubicados dentro de un
COM posibilita reutilizar módulos y habilita la comunicación
workspace y ubicar el resultado en una carpeta o workspace
entre ellos.
de salida, teniendo en cuenta un “cluster tolerance” o
tolerancia de coincidencia.
El modulo Sys permite ingresar información por parte del
usuario.
Para la elaboración de este script en python es necesario:
El modulo OS provee facil acceso a la mayoría de las
herramientas fundamentales del sistema operativo.
A. Preparación de la información y de la herramienta
Python Ahora vamos a crear el objeto geoprocesador, escribiendo la
siguiente línea:
En esta etapa emplearemos información correspondiente al
tutorial de ArcGIS 9.2, ubicaremos los shapefiles de corte y a
GP =
ser cortados dentro de una carpeta o workspace llamada San
win32com.client.Dispatch(quot;esriGeoprocessing.GpDispatch.1quot;
Diego. Debemos tener instalado ArcGIS 9.0 o superior y
)
verificar la versión de Python instalada y de acuerdo a esto
descargamos e instalamos la herramienta PythonWin del
En este objeto es donde están disponibles las herramientas de
website de Python (Python.org), esta herramienta le agrega
geoprocesamiento de ArcGi, las cuales usaremos para
ambiente gráfico a Python, lo cual facilita las labores de
realizar el script.
escritura, compilación y depuración de errores a la hora de
escribir código Python.
Este script requiere de cuatro parámetros para funcionar por
B. Escritura del script medio del siguiente código:
El script lo vamos a escribir dentro del ambiente gráfico
Pythonwin, para esto debemos ejecutarlo, lo encontramos
instalado en inicio, todos los programas, Python 2.x, GP.workspace = sys.argv[1]
Pytonwin. El anterior código requiere una carpeta o workspace donde
están ubicados los shapefiles a ser cortados y el shape que los
corta.
clipFeatures = sys.argv[2]
3. 3
El parámetro de la línea anterior es el shapefiele con el cual
se hará el clip. Las siguientes líneas de código hacen el clip de los shapefiles
outWorkspace = sys.argv[3] de las lista de shapefiles generada con anterioridad y verifican
El parámetro de la línea anterior es el workspace de salida que si el shape con el cual se va hacer el corte está dentro del
donde quedarán ubicados los shapes cortados. mismo workspace que los demás no sea tenido en cuenta para
clusterTolerance = sys.argv[4] ser cortado con él mismo:
El parámetro de la línea anterior es la tolerancia de corte y es
opcional. if str(fc) != str(os.path.split(clipFeatures)[1]):
GP.Clip(fc, clipFeatures, outFeatureClass,
clusterTolerance)
La sentencia siguiente, TRY define el comienzo de bloque de fc = fcs.Next()
código que será manipulado por un manejador de except:
excepciones, Python usa los bloques try/except para GP.AddMessage(GP.GetMessages(2))
manipular errores inesperados durante la ejecución. print GP.GetMessages(2)
try: El script debe quedar como el siguiente, se puede comentar el
La siguiente línea obtiene una lista de shapesfiles ubicados código anteponiendo el símbolo #(numeral):
dentro del workspace previamente definido:
C. Ejecución del script
fcs = GP.ListFeatureClasses()
Para su ejecución es necesario guardar el script, vamos al
menú file, save as y le asignamos un nombre.
La siguientes sentencias recorren la lista de shapefiles
Para saber si el código tiene errores ya sea de escritura, de
fcs.Reset()
sintaxis o de indentación vamos a la barra de herramientas y
fc = fcs.Next()
damos clic en el ícono “check”, como se muestra a
while fc:
continuación:
Las siguientes líneas validan el nuevo nombre de los
shapefiles cortados y que serán puestos en el workspace de
salida, el método ValidateTableName es usado para asegurar
la validez del nombre y ruta de salida para el workspace de
salid:
outFeatureClass = outWorkspace + quot;/quot; +
GP.ValidateTableName(fc,outWorkspace)
Una vez revisados los errores, ejecutamos el script como
mediante el ícono “Run” de la barra de herramientas como se
muestra a continuación:
4. 4
III. APLICACIONES PRACTICAS
PYTHON Y LOS SIG
Este lenguaje provee muchas opciones de integración dentro
de los SIG, puesto que posee capacidades de plataforma
cruzada y fácil integración con otros lenguajes como por
ejemplo C, C++, FORTRAN y Java. Python posee una gran
cantidad de librerías y herramientas desarrolladas para el
trabajo con datos geográficos e integración SIG, ya que
permite la manipulación de shapefiles y formatos raster, así
como labores más sofisticadas como la interoperabilidad con
ArcSDE, bases de datos y servicios Web.
Para el trabajo con vectores python posee una librería “open
source” llamada Shapelib la cual funciona con shapefiles; para
el trabajo con elementos raster integra la librería (open source)
GDAL que permite trabajar con diversos formatos como
ArcInfo grids, JPEG 2000, BSP, United States Geological
Survey digital elevation model, entre otros. GDAL en
Luego aparece un cuadro de diálogo donde debemos ingresar
combinación con Python tiene la facilidad para escribir
los parámetros solicitados por el script y explicados
operaciones de algebra de mapas y generar los resultados en
previamente, para esto debemos escribir en “arguments”
los formatos soportados.
separado por un espacio la ruta del Workspace, la ruta con el
shapefiel de corte, el workspace de salida y una toleracia, un
Python es apropiado para el desarrollo web, pues este tipo de
ejemplo de esto sería:
desarrollo es mucho más rápido que con tecnologías como
Java o .NET. Existen muchas herramientas disponibles para
C:San_Diego C:San_Diegostudy_quads.shp
desarrollo Web usando Python como Zope, MapServer,
C:San_Diegosalida 1
Twisted, entre otros.
La siguiente figura ilustra mejor lo anterior:
IV. CONCLUSIONES Y RECOMENDACIONES
- Phyton provee un completo conjunto de herramientas
para GIS combinado con ArcGIS las posibilidades
son casi ilimitadas.
- La tecnología web está siendo soportada por Python
facilitando las labores de programación de rico y
amplio contenido web.
- Los scripts permiten la automatización de tareas en
muchos programas y son cada vez más fáciles de
realizar por personal no programador.
- Para la personalización de software es altamente
recomendable leer la documentación contenida en los
software, puesto que esta permite conocer todas las
funcionalidades, librerías, clases, métodos, etc, así
como todas las capacidades de personalización
contenidas en los lenguajes de programación
Dejamos lo demás por defecto y hacemos clic en OK. incrustados en estos.
A continuación se ejecuta el script y corta los shapefiles. -
5. 5
REFERENCIAS BIBLIOGRÁFICAS
[1] C. Trucker, Writing Geoprocessing Scripts With ArcGIS, Redlands,CA:
ESRI 2005, pp. 17–27.
[2] M. Lie Hetland, Beginning Python: From Novice to Professional.
Berkeley, CA: Apress, 2005.
[3] H. Butler, AGuide to the Python Universe for ESRI Users, Iowa State
University.
[4] es.wikipedia.org.
[5] http://www.tierradenomadas.com/diccionario.phtml?S