ArcGIS 10 presentó ArcPy, un paquete de sitio de Python que abarca y mejora el módulo arcgisscripting presentado con 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")
Después de importar ArcPy, puede ejecutar todas las herramientas de geoprocesamiento que se encuentran en las cajas de herramientas estándar instaladas con ArcGIS:
- Caja de herramientas 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 Referenciación lineal
- Caja de herramientas Multidimensión
- Caja de herramientas Estadísticas espaciales
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, incluidos el módulo de acceso de datos (arcpy.da), módulo de representación cartográfica (arcpy.mapping), módulo Extensión ArcGIS Spatial Analyst (arcpy.sa), y módulo 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 también desea trabajar con los módulos os y sys del núcleo de Python, puede usar 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 usar una instrucción from-import. El siguiente ejemplo importa la clase env (la clase env contiene todos los entornos de geoprocesamiento). Ahora, en lugar de tener que acceder a 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. Puede utilizar la forma from-import-as en cualquiera de estos casos. 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")
Se puede importar otra versión con la forma from-import-*. 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, tanto el módulo de administración como el de 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")
Sin embargo, en algunos casos, from-import-* puede simplificar su código, como en el caso del módulo sa de Extensión ArcGIS Spatial Analyst. Una ventaja del módulo sa es que puede anidar varias clases y funciones en una sola línea para generar 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)))
Compare ahora el siguiente bloque de código, que usa la instrucción convencional import-from. Imagine que agrega algunas clases y funciones más al código: la sencilla adición de sa. en cada función y clase se acumula rápidamente, lo que interrumpe 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, consulte lo siguiente: https://docs.python.org/install/index.html#modifying-python-s-search-path.
La instalación de productos de ArcGIS 10.7.1 instalará Python 2.7 si todavía no está instalado. La instalación también agregará 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 con las rutas a las carpetas arcpy y bin de la instalación de ArcGIS de su 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.