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.0/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 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 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().
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. |
Obtener resultados de una herramienta de servidor
Como las otras herramientas de geoprocesamiento, las herramientas del servidor de geoprocesamiento tienen un conjunto fijo de parámetros que proporcionan a la herramienta la información que necesita para la ejecución. Cuando utiliza herramientas de servidor asíncronas en una secuencia de comandos, el método getOutput de resultado puede recuperar la salida.
la función IsSynchronous se puede utilizar para determinar si una herramienta se ejecuta de manera síncrona o asíncrona. Cuando una herramienta es síncrona, los resultados se devuelven automáticamente, pero no se puede realizar ninguna otra acción hasta que la herramienta haya finalizado.
En el siguiente ejemplo, la función GetParameterValue se utiliza para obtener un objeto FeatureSet desde una herramienta de servidor. Este objeto FeatureSet contiene el esquema del parámetro de entrada de la herramienta. A continuación, el objeto FeatureSet se carga con una clase de entidad y la herramienta de servidor se ejecuta en el servidor. La secuencia de comandos finaliza al utilizar el método getOutput del objeto de resultado para obtener la salida de la herramienta, que luego se guarda localmente con el método para guardar de FeatureSet.
import arcpy import time # Add a toolbox from a server # arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal", "mytools") # Use GetParameterValue to get a featureset object with the default # schema of the first parameter of the tool 'bufferpoints' # inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0) # Load a shapefile into the featureset # inFeatureSet.load("c:/base/roads.shp") # Run a server tool named BufferPoints with featureset created above # result = arcpy.BufferPoints_mytools(inFeatureSet, "5 feet") # Check the status of the result object every 0.2 seconds until it has a value # of 4 (succeeded) or greater # while result.status < 4: time.sleep(0.2) # Get the output FeatureSet back from the server and save to a local geodatabase # outFeatSet = result.getOutput(0) outFeatSet.save("c:/temp/base.gdb/towers_buffer")
Obtener un resultado de ráster de una herramienta de servidor
Los resultados de ráster se devuelven como Formato de archivo de imagen etiquetado (TIFF). Por defecto, cuando se utiliza getOutput, el TIFF se escribe en la carpeta TEMP del sistema. Para controlar la ubicación del TIFF, establezca el entorno scratchWorkspace en una carpeta.
import arcpy import time # Set the scratchworkspace to a folder. # arcpy.env.scratchWorkspace = "c:/temp/rasteroutput" # Add a toolbox from a server # arcpy.ImportToolbox("http://flame7/arcgis/services;SlopeByVal", "mytools") dem = "c:/dems/k_ne_g" # Run a server tool named RunSlope # result = arcpy.RunSlope_mytools(dem) # Check the status of the result object every 0.2 seconds until it has a value # of 4 (succeeded) or greater # while result.status < 4: print result.status time.sleep(0.2) # Raster output will be written to the scratchworkspace # outTIFF = result.getOutput(0)
Obtener una imagen de mapa
Los servicios de geoprocesamiento pueden tener un servicio de mapas de resultado para crear una imagen de mapa digital de resultados de tarea. Los mapas digitales contienen representaciones visuales de datasets geográficos que comunican la información. Los mapas digitales se transportan a través de la Web como imágenes (por ejemplo .jpeg). Una imagen de mapa, byte por byte, contiene mucha más información interpretable por el hombre que las entidades sin procesar en una clase de entidad. Las imágenes de mapa también son manejables: se comprimen fácilmente, se pueden teselar en partes manejables y hay métodos establecidos para trasportarlas y visualizarlas a través de la Web.
Un servicio de mapas de ArcGIS Server crea las imágenes de mapa y son el resultado de publicar un documento de ArcMap (.mxd). Debido a las características de una imagen de mapa, es posible que desee crear una para los resultados de la tarea de geoprocesamiento y transportar la imagen a través de la Web en lugar de transportar el dataset o datasets de resultados. Los servicios de geoprocesamiento pueden tener un servicio de mapas de resultado que ArcGIS Server utiliza para crear imágenes de mapa de los datos de salida.
import arcpy import time import urllib # Add a toolbox from a server # arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal", "mytools") # Use GetParameterValue to get a featureset object with the default schema of the # first parameter of the tool 'bufferpoints' # inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0) # Load a shapefile into the featureset # inFeatureSet.load("c:/base/roads.shp") # Run a server tool named BufferPoints with featureset created above # result = arcpy.BufferPoints_mytools(inFeatureSet, "5 feet") # Check the status of the result object every 0.2 seconds until it has a value # of 4 (succeeded) or greater # while result.status < 4: time.sleep(0.2) print result.status # Return a map service # mapimage = result.getMapImageURL(0) # Use Python's urllib module's urlretrieve method to copy the image locally # urllib.urlretrieve(mapimage, "c:/base/road_buffer.jpg")