Importar ArcPy
ArcGIS 10 presenta ArcPy, un paquete de sitio de Python que incluye y mejora aun más el módulo arcgisscripting que se introdujo en ArcGIS 9.2. ArcPy brinda un entorno completo y dinámico para el desarrollo de las secuencias de comandos de Python, al mismo tiempo que ofrece la finalización de código y una documentación integrada para cada función, módulo y clase.
Las aplicaciones y las secuencias de comandos de ArcGIS escritas utilizando ArcPy se benefician de ser capaces de acceder y trabajar con los numerosos módulos de Python desarrollados por los profesionales y los programadores de SIG a partir de diversas disciplinas. La potencia adicional del uso de ArcPy en Python la constituye el hecho de que Python es un lenguaje de programación de uso general que es fácil de aprender y utilizar. Es interpretado y se escribe dinámicamente, lo que le proporciona la capacidad de realizar prototipos rápidamente y probar las secuencias de comandos en un entorno interactivo al mismo tiempo que es suficientemente potente para admitir la escritura de aplicaciones grandes.
# Importing arcpy # import arcpy # Set the workspace environment and run Clip_analysis arcpy.env.workspace = "C:/Data/Tongass" arcpy.Clip_analysis("standb4", "clipcov", "standby_clip", "1.25")
Una vez que importa ArcPy, puede ejecutar todas las herramientas de geoprocesamiento que se encuentran en las cajas de herramientas estándar instaladas con ArcGIS:
Importar módulos
Un módulo es un archivo de python que generalmente incluye funciones y clases. ArcPy es compatible con una serie de módulos, incluido un módulo de representación cartográfica (arcpy.mapping), un módulo de Spatial Analyst (arcpy.sa) y un módulo de Geostatistical Analyst (arcpy.ga).
Para importar un módulo completo, utilice el módulo de importación:
# Import all of arcpy # import arcpy.mapping
Obviamente, Python tiene muchos otros módulos principales y de terceros. Si además desea trabajar con los módulos principales os y sys de Python, puede utilizar una importación similar:
# Import arcpy, os and sys # import arcpy import os import sys
En muchos casos, es posible que no desee ni necesite utilizar el módulo completo. Una forma de importar sólo una parte de un módulo es utilizar una declaración desde la importación. El siguiente ejemplo importa la clase env (la clase env contiene todos los entornos de geoprocesamiento). Ahora, en vez de tener que acceder a los entornos como arcpy.env, puede simplificarlo como env.
# Import env from arcpy and set the workspace environment # from arcpy import env env.workspace = "c:/data"
Siguiendo el mismo proceso de pensamiento, en ocasiones es posible que desee dirigir la atención a qué módulo o parte de un módulo se identifica para que la secuencia de comandos sea más legible, o quizás simplemente el nombre predeterminado es demasiado largo para sus preferencias. En cualquiera de estos casos, puede utilizar el modo desde importación como. Como el ejemplo anterior, el siguiente ejemplo también importa la clase env pero le asigna el nombre ENV:
# Import env from arcpy as ENV and set the workspace environment # from arcpy import env as ENV ENV.workspace = "c:/data"
Puede importar el módulo de representación cartográfica del mismo modo:
# Import the mapping module from arcpy as MAP and create a MapDocument # object # from arcpy import mapping as MAP mxd = MAP.MapDocument("C:/maps/basemap.mxd")
Otra versión de importación es el modo desde importación*. El contenido del módulo se importa directamente en el espacio del nombre, lo que significa que puede utilizar todos esos componentes sin tener que utilizar un prefijo. Por ejemplo:
# Import management from arcpy as * # from arcpy.management import *
Sin embargo, existen algunos riesgos asociados con este enfoque. Otros objetos, variables, módulos, etc., con el mismo nombre se sobrescribirán, sin mencionar que con los módulos grandes, el espacio del nombre se puede tornar particularmente repleto y ocupado. Piénselo de este modo: en el siguiente ejemplo, los módulos de administración y análisis se importan como *. Ambos módulos poseen la herramienta Recortar. Si ahora intenta utilizar Recortar, ¿cuál herramienta Recortar está utilizando realmente? La respuesta es la segunda, pero este enfoque puede generar incertidumbre y dificultades al leer la secuencia de comandos.
# Import the management and analysis modules from arcpy as * # from arcpy.management import * from arcpy.analysis import * # Which Clip is it? # Clip("standb4", "clipcov", "standby_clip", "1.25")
No obstante, en algunos casos, desde la importación* puede simplificar el código, como en el caso del módulo sa de la extensión de ArcGIS Spatial Analyst. Una de las ventajas del módulo sa es que puede anidar varias clases y funciones en una sola línea para producir un objeto ráster de salida.
Los siguientes ejemplos requieren la ejecución de la extensión de Spatial Analyst.
# Import arcpy and the sa module as * # import arcpy from arcpy.sa import * arcpy.CheckOutExtension("spatial") # Get input parameters # inRaster1 = arcpy.GetParameterAsText(0) inRaster2 = arcpy.GetParameterAsText(1) inRaster3 = arcpy.GetParameterAsText(2) outRaster = (Raster(inRaster1) + (Raster(inRaster2) - Raster(inRaster3)))
Ahora compare el siguiente bloque de código que utiliza la declaración convencional importación desde. Ahora imagine agregar más clases y funciones al código; la adición simple de sa. para cada clase y función se lleva a cabo rápidamente, lo cual afecta la legibilidad y agrega más volumen a la línea.
# Import arcpy and the sa module # import arcpy from arcpy import sa arcpy.CheckOutExtension("spatial") # Get input parameters # inRaster1 = arcpy.GetParameterAsText(0) inRaster2 = arcpy.GetParameterAsText(1) inRaster3 = arcpy.GetParameterAsText(2) outRaster = (sa.Raster(inRaster1) + (sa.Raster(inRaster2) - sa.Raster(inRaster3)))
Rutas e importación
Al utilizar una declaración de importación, Python busca un módulo que coincida con ese nombre en las siguientes ubicaciones (y en el siguiente orden):
- Rutas especificadas en la variable del entorno del sistema PYTHONPATH
- Un conjunto de carpetas de Python estándar (la carpeta actual, c:\python2x\lib, c:\python2x\Lib\site-packages, etc.)
- Rutas especificadas dentro de cualquier archivo .pth en 1 y 2
Para obtener más información sobre esto, consulte lo siguiente: http://docs.python.org/install/index.html#modifying-python-s-search-path.
La instalación de los productos de ArcGIS 10.0 instalan Python 2.6 si aun no está instalado. La instalación también agrega el archivo Desktop10.pth (o Engine10.pth o Server10.pth) en python26\Lib\site-packages. El contenido de este archivo son dos líneas que contienen la ruta a las carpetas de arcpy y bin de la instalación de ArcGIS del sistema. Estas dos rutas se requieren para importar ArcPy correctamente en la versión 2.6 de Python.
Cuando utiliza una declaración de importación, Python hace referencia a la variable de entorno PYTHONPATH del sistema para localizar los archivos del módulo. Esta variable se establece como una lista de directorios.
Si la importación de ArcPy produce uno de los siguientes errores, no se pudieron encontrar los módulos requeridos:
- ImportError: No hay ningún módulo con el nombre arcPy
- ImportError: No hay ningún módulo con el nombre arcgisscripting
Para analizar esto, busque con Windows Explorer la carpeta python26\Lib\site-packages y agregue o edite el archivo Desktop10.pth. El archivo debe contener las dos líneas que se muestran a continuación (se corrigen a la ruta del sistema si no coinciden):
c:\Program Files\ArcGIS\Desktop10.0\arcpy c:\Program Files\ArcGIS\Desktop10.0\bin