Utilizar herramientas en Python

Una herramienta de geoprocesamiento tiene un conjunto fijo de parámetros que proporcionan a la herramienta la información que necesita 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:

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 la secuencia de comandos. Una vez que se proporcionó 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 simplemente texto que identifica 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, los parámetros de entrada y de salida se definen 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 se tienen que especificar. Hay un par de estrategias para tratar estos argumentos que no se utilizan. Una es 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 Unicode. Esta es una consideración importante cuando se ejecuta una herramienta con un parámetro de salida derivado, tal como Obtener contador, que proporciona un recuento de los registros en una tabla, o Calcular tolerancia cluster predeterminada, que proporciona un valor de tolerancia cluster. Para convertir la cadena de caracteres Unicode en el tipo esperado, se pueden usar funciones integradas de Python como int() o float().

NotaNota:

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(), long(), float()
count = int(result_value)
print count
print types.TypeType(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 diferentes. 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 contador 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 utiliza 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 la secuencia de comandos 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")
LicenciaLicencia:

Las herramientas de Extensión ArcGIS Spatial Analyst se usan de formas diferentes para incorporar el álgebra de mapas y solamente están disponibles en el módulo arcpy.sa y no como funciones de ArcPy.

Temas relacionados

5/9/2014