Utilizar herramientas en Python

Una herramienta de geoprocesamiento tiene un conjunto fijo de parámetros que proporcionan a la herramienta la información requerida para la ejecución. Por lo general, las herramientas tienen parámetros de entrada que definen el dataset o los datasets que generalmente se utilizan para generar nuevos datos de salida. Los parámetros tienen varias propiedades importantes:

  • Cada parámetro espera uno o varios tipos de datos concretos, clase de entidad, entero, cadena de caracteres o ráster.
  • Un parámetro espera un valor de entrada o de salida.
  • Los parámetros pueden ser opcionales o requerir un valor.
  • Cada parámetro de herramienta tiene un nombre único.

Cuando se utiliza una herramienta en Python, los valores de sus parámetros se deben establecer correctamente para que se pueda ejecutar cuando se ejecute el script. Una vez que se ha proporcionado un conjunto de valores de parámetro válido, la herramienta está lista para ejecutarse. Los parámetros se especifican como cadenas de caracteres o como objetos.

Las cadenas de caracteres son textos que identifican de forma única un valor de parámetro, tal como una ruta hacia un dataset o una palabra clave. En el siguiente ejemplo de código, se definen los parámetros de entrada y de salida para la herramienta Zona de influencia. Tenga en cuenta que el nombre de la herramienta siempre se combina con su alias de la caja de herramientas. En el ejemplo, se utilizan dos variables de cadena de caracteres para definir los parámetros de entrada y de salida con el fin de facilitar la lectura de la llamada a la herramienta.

import arcpy
roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"
# Run Buffer using the variables set above and pass the remaining 
# parameters in as strings
arcpy.Buffer_analysis(roads, output, "distance", "FULL", "ROUND", "NONE")

Para algunos parámetros, como una referencia espacial, se puede especificar también un objeto. En el siguiente ejemplo de código, la herramienta Crear clase de entidad se ejecuta con un objeto SpatialReference para el parámetro del Sistema de coordenadas opcional.

import arcpy
in_workspace = "c:/temp"
output_name = "rivers.shp"
# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')
# Run CreateFeatureclass using the spatial reference object
arcpy.CreateFeatureclass_management(
    in_workspace, output_name, spatial_reference=spatial_ref)

La mayoría de las herramientas de geoprocesamiento incluyen argumentos obligatorios y opcionales. A veces se dan casos en los que hay muchos argumentos opcionales que no es necesario especificar. Hay un par de estrategias para tratar estos argumentos que no se utilizan. Una consiste en mantener todos los argumentos opcionales en orden y marcar los que no se necesiten como cadenas de caracteres vacías "", signos de almohadilla "#" o con un tipo None. La segunda estrategia consiste en utilizar argumentos de palabra clave y usar el nombre del argumento para asignar un valor. Usar argumentos de palabra clave permite omitir los argumentos opcionales que no se utilizan o especificarlos en distintos órdenes.

Omitir los argumentos opcionales usando cadenas vacías.

import arcpy
arcpy.AddField_management("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

Una alternativa mejor: omitir los argumentos opcionales usando argumentos de palabra clave.

import arcpy arcpy.AddField_management("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

Salida de la herramienta

ArcPy devuelve los valores de salida de una herramienta cuando se ejecuta como objeto Result. La ventaja de un objeto de resultado es que puede mantener la información sobre la ejecución de las herramientas, incluidos los mensajes, los parámetros y la salida. Estos resultados se pueden mantener incluso después de que se hayan ejecutado varias otras herramientas.

Los siguientes ejemplos muestran cómo obtener la salida de un objeto de resultado después de la ejecución de una herramienta de geoprocesamiento.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.CopyFeatures_management("roads", "urban_roads")
# A print statement will display the string representation of the output.
print(result)
# A result object can be indexed to get the output value. Note: a result object 
# also has a getOutput() method that can be used for the same purpose.
result_value = result[0]

Cuando se indexa el objeto de resultado o se usa su método getOutput(), el valor devuelto es una cadena de caracteres. Esta es una consideración importante cuando se ejecuta una herramienta con un parámetro de salida derivado, por ejemplo, Obtener conteo, que proporciona un recuento de los registros en una tabla, o Calcular tolerancia clúster predeterminada, que proporciona un valor de tolerancia clúster. Para convertir en el tipo esperado, se pueden usar funciones integradas de Python como int() o float().

Nota:

Un parámetro derivado requiere que no haya interacción del usuario y no aparece en el cuadro de diálogo de la herramienta o como un argumento de la herramienta en Python. Los tipos derivados siempre son parámetros de salida.

import arcpy
import types
arcpy.env.workspace = "c:/base/data.gdb"
# Many geoprocessing tools return a result object of the derived output dataset.
result = arcpy.GetCount_management("roads")
result_value = result[0]
# The result object's getOutput method returns values as a unicode string. To 
# convert to a different Python type, use built-in Python functions: str(), 
# int(), float()
count = int(result_value)
print(count)
print(type(count))

Si se crea una salida que es solo una fase intermedia en un flujo de trabajo más extenso, el argumento de salida se puede omitir para permitir que la herramienta cree una ruta y un nombre únicos para la salida. Esto se puede lograr definiendo la salida como "#" o como None o, si la salida va a ser el último argumento utilizado, se puede omitir por completo. En cada caso, el valor devuelto es la ruta completa del nuevo origen de datos.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
result = arcpy.CopyFeatures_management("roads", "#")
result = arcpy.CopyFeatures_management("roads", "")
result = arcpy.CopyFeatures_management("roads")

Organización de herramientas en ArcPy

Las herramientas de geoprocesamiento se organizan de dos formas. Todas las herramientas están disponibles como funciones en ArcPy, pero también están disponibles en módulos que coinciden con el nombre de alias de la caja de herramientas. Aunque la mayoría de los ejemplos en la ayuda muestran las herramientas organizadas como funciones disponibles desde ArcPy, los dos enfoques son igualmente válidos. Qué enfoque utilizará será una cuestión de preferencia personal y hábitos de codificación. En el siguiente ejemplo, se muestra la herramienta Obtener recuento utilizando los dos enfoques.

import arcpy
in_features = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)
# Or from modules matching the toolbox name
arcpy.management.GetCount(in_features)

Cuando use utilizan las herramientas en módulos, es posible que algunas veces desee prestar atención a la forma en la que se identifica un módulo para que el script sea más legible. En este caso, puede utilizar la forma from - import - as.

# Clean up street centerlines that were digitized without
# having set proper snapping environments
import arcpy
from arcpy import edit as EDIT
from arcpy import management as DM
streets = "c:/data/streets.gdb/majorrds"
streets_copy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
Licencia:

Las herramientas de Spatial Analyst y Image Analyst se usan de formas diferentes para incorporar el Álgebra de mapas y solamente están disponibles en los módulos arcpy.sa y arcpy.ia y no como funciones de ArcPy.