ArcPy es un paquete de sitio que se basa en el exitoso módulo arcgisscripting y lo sucede. Su objetivo es crear la piedra angular para una manera útil y productiva de realizar análisis de datos geográficos, conversión de datos, administración de datos y automatización de mapas con Python.
ArcPy proporciona acceso a las herramientas de geoprocesamiento así como a las funciones adicionales, las clases y los módulos que le permiten crear flujos de trabajo simples o complejos de manera rápida y sencilla.
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.
ArcPy proporciona acceso a las herramientas de geoprocesamiento así como a las funciones, las clases y los módulos adicionales que le permiten crear flujos de trabajo simples o complejos. Hablando claramente, ArcPy se organiza en herramientas, funciones, clases y módulos.
Técnicamente hablando, las herramientas de geoprocesamiento son funciones disponibles en arcpy, lo que significa que se accede a ellas como a cualquier otra función de Python. No obstante, para evitar confusiones, siempre se hace una distinción entre las funciones de herramientas y las que no lo son (como las funciones de utilidad, por ejemplo ListFeatureClasses()).
- Las herramientas se documentan en forma diferente que las funciones. Cada herramienta posee su propia página de referencia de herramientas en el sistema de ayuda de ArcGIS Desktop. Las funciones se describen en la documentación de ArcPy.
- Las herramientas devuelven un objeto Result; las funciones, no.
- Las herramientas producen mensajes a los que se accede mediante diversas funciones, como GetMessages(). Las funciones no producen mensajes.
- Las herramientas tienen licencias según el nivel del producto (ArcGIS Desktop Basic, Desktop Standard o Desktop Advanced) y la extensión (ArcGIS Network Analyst, ArcGIS Spatial Analyst, etc.). Puede buscar qué niveles de licencia se requieren en la página de referencias de la herramienta. A las funciones no se les proporcionan licencias, se instalan con ArcPy.
Ejecutar una herramienta
El siguiente ejemplo muestra cómo ejecutar la herramienta Zona de influencia. Cuando la herramienta se ejecute, aparecerán mensajes por defecto al lado derecho de la ventana Python en la sección de ayuda.
>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
Aquí hay otro ejemplo de la ejecución de herramientas. Este ejemplo utiliza las herramientas en las cajas de herramientas de administración y conversión de datos. Se agrega un campo en la clase de entidad de calles de entrada, se calcula el campo y después se carga la clase de entidad en una geodatabase corporativa.
>>> import arcpy
>>> arcpy.AddField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "TEXT")
>>> arcpy.CalculateField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON_9.3")
>>> arcpy.FeatureClassToFeatureClass_conversion("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
Obtener resultados de una herramienta
Cuando se ejecuta una herramienta de geoprocesamiento, los resultados de la herramienta se devuelven en un objeto Result. En general, este objeto es la ruta al dataset de salida que se produce o actualiza mediante la herramienta. En otros casos, es posible que contenga otros tipos de valores, tal como un número o valor booleano. Si un valor de salida de una herramienta es un parámetro de múltiples valores, los valores se proporcionan como una lista dentro de otra lista.
Los siguientes ejemplos de códigos muestran cómo se capturan los valores de retorno y qué podrían ser estos valores:
Devolver la ruta de la clase de entidades de salida. El resultado se puede utilizar como entrada a otra función.
>>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS")
>>> print result
C:\Portland\Portland_OR.gdb\riverBuf
>>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")
Devolver la cantidad de entidades.
>>> result = arcpy.GetCount_management("streets_50m_of_rivers")
>>> print result.getOutput(0)
54
Devolver una lista de índices de cuadrícula espacial predeterminados para una clase de entidad.
>>> result = arcpy.CalculateDefaultGridIndex_management("streets_50m_of_rivers")
>>> for i in range(0, result.outputCount):
... print result.getOutput(i)
...
560
200
0
Usar la configuración del entorno
La configuración del entorno de geoprocesamiento se puede considerar como un parámetro adicional que afecta a los resultados de una herramienta. Estos difieren de los parámetros de herramientas normales en que se establecen en forma independiente de la herramienta y se interrogan y se utilizan por las herramientas durante la ejecución. La configuración del entorno, tal como un área de interés, el sistema de coordenadas del dataset de salida y el tamaño de celda de un nuevo dataset ráster se pueden especificar y convalidar mediante las herramientas.
La configuración del entorno está disponible en la clase env como propiedades. Estas propiedades se pueden utilizar para recuperar los valores del entorno y establecerlos. A continuación se encuentran ejemplos de cómo utilizar los valores del entorno:
Establecer el entorno de espacio de trabajo.
>>> arcpy.env.workspace = "c:/data/Portland.gdb"
>>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
Establecer el índice de cuadrícula espacial en el valor de retorno de una herramienta.
>>> arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets").getOutput(0)
Obtener la configuración del tamaño de celda del ráster y garantizar que sea de un tamaño específico para la salida estándar.
if arcpy.env.cellSize != 30:
arcpy.env.cellSize = 30
Usar las funciones
Una función es una funcionalidad definida que realiza una tarea específica y se puede incorporar a un programa más amplio. Además de las herramientas, ArcPy expone diversas funciones para brindar mayor soporte a los flujos de trabajo de geoprocesamiento. Las funciones se pueden utilizar para enumerar ciertos datasets, recuperar las propiedades de un dataset, verificar la existencia de datos, validar el nombre de una tabla antes de agregarlo a una geodatabase o realizar muchas otras tareas de encriptación útiles.
El siguiente código de ejemplo muestra cómo obtener las propiedades de datos y verificar una extensión:
import arcpy
# prints True
print arcpy.Exists("c:/data/Portland.gdb/streets")
# prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr = arcpy.Describe("c:/data/Portland.gdb/streets").spatialReference
print sr.name
# prints Available
print arcpy.CheckExtension("spatial")
arcpy.CheckOutExtension("spatial")
Usar las clases
Las clases de ArcPy, como las clases de SpatialReference y Extent, generalmente se utilizan como accesos rápidos de teclado para completar los parámetros de la herramienta de geoprocesamiento que de lo contrario tendrían un equivalente de cadena de caracteres más complicado. Una clase es similar a un plano arquitectónico. El plano ofrece el marco sobre cómo crear algo. Las clases se pueden utilizar para crear objetos, que comúnmente se denominan instancias.
import arcpy
spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
Trabajar con los módulos
ArcPy incluye módulos que cubren otras áreas de ArcGIS. 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 ArcGIS Spatial Analyst (arcpy.sa) y un módulo de ArcGIS Network Analyst (arcpy.na).
Por ejemplo, las herramientas del módulo arcpy.sa utilizan las herramientas de la caja de herramientas de ArcGIS Spatial Analyst, pero están configuradas para garantizar la compatibilidad con el álgebra de mapas. En consecuencia, ejecutar arcpy.sa.Slope es igual a ejecutar la herramienta Pendiente de la caja de herramientas de ArcGIS Spatial Analyst.