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 rico y dinámico para el desarrollo de scripts 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 scripts de ArcGIS escritos utilizando ArcPy se benefician de poder acceder y trabajar con los numerosos módulos de Python desarrollados por los profesionales SIG y los programadores a partir de diversas disciplinas. El poder adicional del uso de ArcPy en Python es el hecho de que Python es un lenguaje de programación de uso general que es fácil de aprender y utilizar. Se interpreta y escribe dinámicamente, lo que le proporciona la capacidad de realizar prototipos rápidamente y probar los scripts 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 ArcGIS Spatial Analyst extension (arcpy.sa), y módulo ArcGIS Network Analyst extension (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 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 la forma en que se identifica en módulo o parte de un módulo para que su script sea más legible, o quizás el nombre predeterminado sea simplemente 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, ¿qué Recortar está utilizando realmente? La respuesta es la segunda, pero este enfoque puede generar incertidumbre y dificultades al leer el script.
# 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 la ArcGIS Spatial Analyst extension. 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. Ahora 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 deteriora 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 instrucció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 estándar de Python (la carpeta actual, c:\python27\lib, c:\python27\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 ArcGIS 10.8.2 instalará Python 2.7 si todavía no está instalado. La instalación también agregará el archivo Desktop10.8.pth (o Engine10.8.pth o Server10.8.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 instrucció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.