ArcGIS 10 introdujo ArcPy, un paquete de sitio de Python que incluye y mejora el módulo arcgisscripting que se incorporó 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 característica adicional del uso de ArcPy dentro de Python es 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 escrito 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:
- Caja de herramientas de análisis
- Caja de herramientas Cartografía
- Caja de herramientas Conversión
- Caja de herramientas Administración de datos
- Caja de herramientas Edición
- Caja de herramientas Geocodificación
- Caja de herramientas Referencia lineal
- Caja de herramientas de multidimensión
- Caja de herramientas Estadística espacial
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 acceso de datos (arcpy.da), un módulo de representación cartográfica (arcpy.mapping), un módulo de Extensión ArcGIS Spatial Analyst (arcpy.sa) y un módulo de Extensión ArcGIS Network Analyst (arcpy.na).
Para importar un módulo completo, utilice el módulo de importación:
# Import only arcpy.mapping
#
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 solo 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. Piense en ello de esta manera: en el siguiente ejemplo, se importa el módulo management y el módulo analysis 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, from-import-* puede simplificar el código, como en el caso del módulo sa de Extensión 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.
# 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 este tema, vea lo siguiente: http://docs.python.org/install/index.html#modifying-python-s-search-path.
La instalación de productos de ArcGIS 10.4.1 instalará Python 2.7 si aún no se ha instalado. La instalación también agrega el archivo Desktop10.3.pth (o Engine10.3.pth o Server10.3.pth) a python27\Lib\site-packages. El contenido de este archivo incluye dos líneas que contienen las rutas 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.7 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.