Utilizar herramientas en Python
Cada 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:
Nombre |
Cada parámetro de herramienta tiene un nombre único. |
Tipo |
El tipo de datos que se espera, tal como clase de entidad, entero, cadena de caracteres y ráster. |
Dirección |
El parámetro define los valores de entrada o de salida. |
Requerido |
Se debe proporcionar un valor para un parámetro o es opcional. |
Cuando se utiliza una herramienta en una secuencia de comandos, los valores de parámetro deben establecerse correctamente de modo que se pueda ejecutar cuando se ejecute la secuencia de comandos. La documentación de cada herramienta define claramente sus parámetros y propiedades. 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.
La mayoría de los parámetros de herramienta se pueden especificar como una cadena de caracteres simple. Para algunos parámetros, tales como una referencia espacial, puede utilizar un objeto en lugar de una cadena de caracteres. 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 adjunta con el alias de la caja de herramientas. En el ejemplo, se utilizan dos variables de cadenas de caracteres para definir los parámetros de entrada y de salida para realizar la llamada a la herramienta que sea más fácil de leer.
import arcpy roads = "c:/St_Johns/data.gdb/roads" output = "c:/St_Johns/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")
En el siguiente ejemplo de código, la herramienta CreateFeatureClass se ejecuta con un objeto de referencia espacial para el parámetro del Sistema de coordenadas opcional. El objeto de referencia espacial se crea con la clase SpatialReference y su información se carga desde un archivo de proyección.
import arcpy inputWorkspace = "c:/temp" outputName = "rivers.shp" # Create a spatial reference object # spatialRef = arcpy.SpatialReference() # Use a projection file to define the spatial reference's properties # spatialRef.createFromFile("c:/program files/arcgis/Desktop10.1/Coordinate Systems/" + \ "Projected Coordinate Systems/Continental/North America/North America Equidistant Conic.prj") # Run CreateFeatureclass using the spatial reference object # arcpy.CreateFeatureclass_management(inputWorkspace, outputName, "POLYLINE", "", "", "", spatialRef)
Organización de herramientas
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 GetCount utilizando los dos enfoques.
import arcpy inFeatures = "c:/temp/rivers.shp" # Tools can be accessed as functions on the arcpy module, and # from modules matching the toolbox name. # arcpy.GetCount_management(inFeatures) arcpy.management.GetCount(inFeatures)
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" streetsCopy = "c:/output/Output.gdb/streetsBackup" DM.CopyFeatures(streets, streetsBackup) EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT") EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
Las herramientas de extensión de Extensión ArcGIS Spatial Analyst se manejan de diferentes maneras para incorporar el álgebra de mapas y solamente están disponibles en el módulo arcpy.sa y no como funciones en ArcPy.
Obtener resultados de una herramienta
ArcPy devuelve los valores de salida de una herramienta cuando se ejecuta como un objeto de Resultado. 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 = "D:/St_Johns/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 # To get the output value, the result object has a getOutput method # resultValue = result.getOutput(0)
El método getOutput del objeto de resultado devuelve una cadena de caracteres Unicode desde los objetos de resultados que tienen valores de salida. Esta es una consideración importante cuando ejecuta una herramienta con un parámetro de salida derivado, tal como GetCount,que proporciona un conteo de los registros en una tabla, o CalculateDefaultClusterTolerance, que proporciona un valor de tolerancia cluster. Para convertir el valor en el tipo esperado, deberá convertirse desde una cadena de caracteres unicode con funciones de Python integradas, como int() o float().
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 from arcpy import env import types env.workspace = "c:/St_Johns/data.gdb" # Many geoprocessing tools return a result object of the derived # output dataset. A print statement will display the string # representation of the output. # result = arcpy.GetCount_management("roads") resultValue = result.getOutput(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(resultValue) print count print types.TypeType(count)
Propiedades y métodos |
Explicación |
---|---|
inputCount | Devuelve la cantidad de entradas. |
outputCount |
Devuelve la cantidad de salidas. |
messageCount |
Devuelve la cantidad de mensajes. |
maxSeverity |
Devuelve la severidad máxima. La severidad que se devuelve puede ser 0 (no se encontraron errores/advertencias), 1 (se encontraron advertencias) o 2 (se encontraron errores). |
resultID |
Devuelve el Id. único resultante. Si la herramienta no es un servicio de geoprocesamiento, el resultID será "". |
status |
Devuelve el estado del trabajo en el servidor.
|
cancel() |
Cancela el trabajo en el servidor. |
getInput(índice) |
Devuelve una entrada dada. Si es un conjunto de registros o un objeto de datos ráster, se devuelve un objeto RecordSet o RasterData. |
getMapImageURL(ParameterList, Height, Width, Resolution) |
Obtener una imagen de servicio de mapas para una salida determinada. |
getMessage(index) |
Devuelve un mensaje específico. |
getMessages(severity) |
El tipo de mensajes que se devuelve: 0=mensaje, 1=advertencia, 2=error. Al no especificar un valor se devuelven todos los tipos de mensaje. |
getOutput(índice) |
Devuelve una salida dada. Si es un conjunto de registros o un objeto de datos ráster, se devuelve un objeto RecordSet o RasterData. |
getSeverity(índice) |
Devuelve la severidad de un mensaje específico. |