Blog Esri España

ArcObjects for Python Geoprocessing


05/01/2012 - 09:44 - Deja un comentario
[ssba]

En más de una ocasión recibimos consultas sobre qué herramientas, acciones, procesos… son los mejores para extender la funcionalidad de ArcGIS: ArcObjects (.NET, Java) o Python. Esta pregunta resulta algo confusa ya que son conceptos radicalmente diferentes. En cualquier caso, hoy quiero aportar un poco de luz, mostrando cómo es posible mezclar ambas tecnologías para resolver problemas.

Mucha gente se está animando a crear scripts en Python utilizando el paquete ArcPy, que resuelven tareas tediosas y repetitivas que les ocupan demasiado tiempo de trabajo y que podemos automatizar fácilmente en Windows, de tal modo que se ejecuten, por ejemplo, los fines de semana para que al llegar el lunes a la oficina ya tengamos el resultado. En este link de la ayuda de ArcGIS lo tenéis muy bien explicado.

El problema que mucha gente me comenta, viene cuando quieres que tus scripts, que ya están resolviendo algunos problemas (y que podrían resolver muchos más) sean ejecutados por el usuario desde algún tipo de interfaz gráfica en ArcMap más avanzada que ArcToolbox.

Se tiende a pensar que se necesita generar de nuevo todo ese código, que suele haber costado bastante implementar y que se continúa manteniendo en Python, pero ahora con ArcObjects mediante Add-Ins.

Extender ArcMap con ArcObjects no implica que todo el código ejecutado sea creado de cero en .NET o Java. Vamos a demostrar cómo ejecutar scripts que ya tenemos creados en Python aprovechando la capacidad de los Add-Ins para generar interfaces de usuario en ArcMap.

Tenemos un pequeño script de Python que nos carga todos los shapefiles de un directorio determinado en una filegeodatabase:

import arcpy

from arcpy import env

import os

# Set the workspace for the ListFeatureClass function

#

env.workspace = «D:/tmp»

# Use the ListFeatureClasses function to return a list of

#  all shapefiles.

#

fcList = arcpy.ListFeatureClasses()

# Copy shapefiles to a file geodatabase

#

for fc in fcList:

arcpy.CopyFeatures_management(fc, «D:\\tmp\\finalGDB.gdb» + os.sep + fc.rstrip(«.shp»))

Este script lo hemos añadido previamente como una secuencia de comandos a una caja de herramientas que tenemos en el directorio “D:\\tmp\\MiToolbox.tbx” y que hemos llamado “ExecutePython”. Aquí podemos leer más sobre cómo hacemos esto.

Ahora, vamos a generar un botón para ArcMap con Visual Studio 2010 que lance nuestro script.

Creamos un Add-In para ArcMap:

Introducimos los metadatos del Add-In:

Como hemos dicho, ahora sí, creamos el botón:

Nuestro proyecto está ahora creado. Aprovecharemos que gran parte de lo que necesitamos ya está hecho y nos centraremos en lanzar nuestro script en el evento clic del botón.

Simplemente creamos un nuevo objeto Geoprocessor y lanzamos nuestra herramienta:

Cada vez que nuestros usuarios hagan click en esta botón que hemos creado, se lanzará nuestro script.

De este modo, nuestros scripts utilizan ArcObjects como interfaz en ArcMap sin la necesidad de reescribir todo nuestro código.

Podríamos generar formularios complejos para ArcMap con el fin de obtener los parámetros que necesiten nuestros scripts pero eso ya os lo dejo para vosotros…

05/01/2012 - 09:44
[ssba]

Deja una respuesta

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