El lenguaje Python y su funcionalidad con los Sistemas de Información Geográfica mediante ArcGIS 9

Este artículo relata la importancia y versatilidad de los scripts a la hora de automatizar tareas computacionales, enfocándolo a tareas de geoprocesamiento en los sistemas de información geográfica (SIG), gracias a su integración con el software ArcGIS. Para esta labor emplearemos el lenguaje de programación Python el cual es muy fácil de aprender y de utilizar, además de que viene integrado a ArcGIS desde la versión 9.0

I. Introducción

Las herramientas informáticas en la actualidad realizan un sinnúmero de funciones que requieren de mucho tiempo para aprenderlas a utilizar, a pesar de esto no hacen todas cosas que necesitamos ni cómo las necesitamos. Por estas razones este tipo de herramientas permiten su personalización para poder ser adaptadas por los usuarios a su forma de trabajo y a sus necesidades. Existe una manera rápida de personalización que es a través de Scripts, éstos son un conjunto generalmente corto de instrucciones o secuencias de código sin compilar que son ejecutadas por un software que las interpreta y que permiten realizar acciones para automatizar tareas.

Los Sistemas de Información Geográfica (SIG) son herramientas robustas pero en algunos casos requieren de ciertas labores de personalización para agilizar diversas tareas, como lo son entre otras, las labores de geoprocesamiento, entendidas estas como el procesamiento de información geográfica en la cual se crea nueva información a partir de la ya existente aplicando una serie de operaciones. En estos casos existen herramientas al interior de los software SIG que permiten realizar estas labores, pero en algunos casos estas se vuelven engorrosas o demoradas de ejecutar porque no se adaptan del todo a las necesidades del usurario, debido a lo anterior, es necesario contar con un lenguaje de programación “incrustado” que permita realizar scripts para realizar estas tareas más fácilmente.

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 son muy complejos y requieren amplio conocimiento para desarrollar cosas sencillas.
Desde la versión 9, Arcgis permitió la elaboración de scripts de una forma rápida y sencilla, de tal manera que sus usuarios no requirieran ser programadores o tener destreza en programación para realizar líneas de código que les permitieran resolver problemas que ellos encontraran en su día a día con los SIG.

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, es un lenguaje “abierto”, orientado a objetos, además de ser muy útil para las labores de geoprocesamiento. Por estas razones encaminamos nuestro proyecto de la materia a este poderoso de lenguaje.

Python no solamente es un lenguaje para escribir scripts, también posee soporte y estructura para realizar programas largos con muchas líneas de código, es un lenguaje de muy alto nivel y ofrece muchos tipos de datos y el chequeo de errores es mucho más sencillo que con otros lenguajes de programación. Python permite dividir programas en módulos que pueden ser reusados en otros programas escritos en Python y en otros lenguajes, pues viene con una amplia colección de módulos predefinidos que pueden ser usados como base para otros programas escritos en el mismo lenguaje.

Python es un lenguaje interpretado, lo cual ahorra tiempo pues no es necesario compilar. Este lenguaje no requiere ni obliga a la definición del tipo de dato de las variables, tampoco requiere escribir punto y coma(;) después de cada línea pero si es bastante delicado con la indentación pues los bloques de código requieren sangría de acuerdo a cómo estos sean escritos.

El siguiente ejemplo ilustra la facilidad de uso de Python

a0020

En el gráfico anterior se observa que no es necesario definir el tipo de variable incluso tampoco es necesario definir las variables, pues con solo escribir su valor y el operador se pueden obtener resultados de forma inmediata sin necesidad de compilar el código, esto permite utilizar a Python como una calculadora rápidamente.

II. Metodología

En nuestro proyecto pretendemos explicar cómo a través de Python se pueden escribir sentencias de código que permiten realizar tareas de geoprocesamiento, para esto explicaremos en este artículo un script que permite cortar (clip) con un shapefile uno o más shapefiles ubicados dentro de un workspace y ubicar el resultado en una carpeta o workspace de salida, teniendo en cuenta un “cluster tolerance” o tolerancia de coincidencia.

Para la elaboración de este script en python es necesario:

A. Preparación de la información y de la herramienta Python
En esta etapa emplearemos información correspondiente al tutorial de ArcGIS 9.2, ubicaremos los shapefiles de corte y a ser cortados dentro de una carpeta o workspace llamada San 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 website de Python (Python.org), esta herramienta le agrega ambiente gráfico a Python, lo cual facilita las labores de escritura, compilación y depuración de errores a la hora de escribir código Python.

B. Escritura del script
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, Pytonwin.

a0021

Ahora vamos a crear un nuevo script, para esto vamos al menú File, New, Python Script y OK.

A continuación vamos a escribir el siguiente código:

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.

win32com.client: Apoya la comunicación entre Pythom y COM IDispatch.

COM IDispatch: habilita a los lenguajes interpretados basados en texto utilizar objetos COM.
COM posibilita reutilizar módulos y habilita la comunicación entre ellos.

El modulo Sys permite ingresar información por parte del usuario.
El modulo OS provee facil acceso a la mayoría de las herramientas fundamentales del sistema operativo.

Ahora vamos a crear el objeto geoprocesador, escribiendo la siguiente línea:

GP = win32com.client.Dispatch(“esriGeoprocessing.GpDispatch.1”)

En este objeto es donde están disponibles las herramientas de geoprocesamiento de ArcGi, las cuales usaremos para realizar el script.

Este script requiere de cuatro parámetros para funcionar por medio del siguiente código:

GP.workspace = sys.argv[1]

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]

El parámetro de la línea anterior es el shapefiele con el cual se hará el clip.

outWorkspace = sys.argv[3]

El parámetro de la línea anterior es el workspace de salida donde quedarán ubicados los shapes cortados.

clusterTolerance = sys.argv[4]

El parámetro de la línea anterior es la tolerancia de corte y es opcional.

La sentencia siguiente, TRY define el comienzo de bloque de código que será manipulado por un manejador de excepciones, Python usa los bloques try/except para manipular errores inesperados durante la ejecución.

try:

La siguiente línea obtiene una lista de shapesfiles ubicados dentro del workspace previamente definido:

fcs = GP.ListFeatureClasses()

La siguientes sentencias recorren la lista de shapefiles

fcs.Reset()
fc = fcs.Next()
while fc:

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:

a0022

outFeatureClass = outWorkspace + “/” +

GP.ValidateTableName(fc,outWorkspace)

Las siguientes líneas de código hacen el clip de los shapefiles de las lista de shapefiles generada con anterioridad y verifican que si el shape con el cual se va hacer el corte está dentro del mismo workspace que los demás no sea tenido en cuenta para ser cortado con él mismo:

if str(fc) != str(os.path.split(clipFeatures)[1]):

GP.Clip(fc, clipFeatures, outFeatureClass,
clusterTolerance)

fc = fcs.Next()

except:

GP.AddMessage(GP.GetMessages(2))
print GP.GetMessages(2)

El script debe quedar como el siguiente, se puede comentar el código anteponiendo el símbolo #(numeral):

C. Ejecución del script
Para su ejecución es necesario guardar el script, vamos al menú file, save as y le asignamos un nombre.

Para saber si el código tiene errores ya sea de escritura, de sintaxis o de indentación vamos a la barra de herramientas y damos clic en el ícono “check”, como se muestra a continuación:

a0023
Una vez revisados los errores, ejecutamos el script como mediante el ícono “Run” de la barra de herramientas como se muestra a continuación:

a0024

Luego aparece un cuadro de diálogo donde debemos ingresar los parámetros solicitados por el script y explicados previamente, para esto debemos escribir en “arguments” separado por un espacio la ruta del Workspace, la ruta con el shapefiel de corte, el workspace de salida y una toleracia, un ejemplo de esto sería:

C:\San_Diego C:\San_Diego\study_quads.shp
C:\San_Diego\salida\ 1

La siguiente figura ilustra mejor lo anterior:

a0025

Dejamos lo demás por defecto y hacemos clic en OK.

A continuación se ejecuta el script y corta los shapefiles.

III. Aplicaciones Prácticas
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 combinación con Python tiene la facilidad para escribir operaciones de algebra de mapas y generar los resultados en los formatos soportados.

Python es apropiado para el desarrollo web, pues este tipo de desarrollo es mucho más rápido que con tecnologías como Java o .NET. Existen muchas herramientas disponibles para desarrollo Web usando Python como Zope, MapServer, Twisted, entre otros.

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 incrustados en estos.

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

Fuente:

Bernardo Arango G., David Arenas H., Rafael Botero M.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Solve : *
26 − 23 =