Si no está familiarizado con Python y ArcPy o las herramientas de secuencia de comandos, vaya a la sección Procedimientos iniciales con Python y ArcPy, y las herramientas de secuencia de comandos siguiente para obtener una lista de temas útiles.
Cómo se encuentran los datos de proyecto en la secuencia de comandos
Cada vez que comparten un resultado, ya sea como un paquete o como un servicio, y el resultado hace referencia a una herramienta de secuencia de comandos, la herramienta de secuencia de comandos se escanea para descubrir todos los datos de proyecto utilizados en la secuencia de comandos. Cuando los datos de proyecto se encuentran, se consolidada en una carpeta temporal que se empaqueta (si está compartiendo un paquete) o carga en el servidor (si está compartiendo un servicio).
Cuando la secuencia de comandos se escanea, todas las cadenas de caracteres citadas (con comillas simples o dobles) utilizadas en una variable de Python o como un argumento para una función se prueban para determinar si es una ruta de acceso a datos que existen. Datos, en este caso, significa
- Una capa en la tabla de contenido (ArcMap o ArcGlobe)
- Una carpeta
- Un archivo
- Un geodataset, como una clase de entidad, archivo de forma, geodatabase, documento de mapa (.mxd) y archivo de capa (.lyr)
Para los fines de debate, solo interesan los datos que se utilizan como entrada para las herramientas de geoprocesamiento o las rutas de acceso que hacen referencia a otros módulos de Python. Los datos de salida es también se consolidan, pero no se consideran datos de proyecto.
Siempre que una cadena de texto citado se encuentre en la secuencia de comandos, la prueba para la existencia de datos se lleva a cabo de la manera siguiente:
- ¿La cadena de caracteres hace referencia a una capa en la tabla de contenido?
- ¿La cadena de caracteres contiene una ruta absoluta a los datos (como " e: \Warehousing\ToolData\SanFrancisco. gdb\streets" )?
- ¿La cadena de caracteres tiene datos de referencia que se pueden encontrar en relación a la ubicación de la secuencia de comandos? La ubicación de la secuencia de comandos se define de la siguiente manera:
- La carpeta que contiene la secuencia de comandos.
- Si la secuencia de comandos está integrada en la caja de herramientas, la ubicación es la carpeta que contiene la caja de herramientas.
- Si la secuencia de comandos se encuentra en una caja de herramientas Python la ubicación es la carpeta que contiene la caja de herramientas Python.
Estas pruebas se desarrollan en orden secuencial. Si la prueba pasa y existen los datos, se consolidarán, con una excepción: si va a compartir un servicio, el data store del servidor se examina para determinar si los datos se encuentran en el data store. Si reside en el almacenamiento de datos, entonces no está consolidada.
Ejemplos
Los siguientes ejemplos se basan en esta estructura de carpetas:

Rutas relativas y carpetas
La siguiente técnica de búsqueda de datos relativos a la ubicación de la secuencia de comandos es un patrón común, especialmente para los servicios que se crearon para ArcGIS 10.0. A modo de referencia, el siguiente código residen en la carpeta secuencia de comandos que se ilustró anteriormente. La carpeta ToolData contiene SanFrancisco. gdb. En SanFrancisco. gdb hay una clase de entidad llamada Calles. En la siguiente muestra de código, la ruta a la carpeta ToolData se construye en relación a la ubicación de la secuencia de comandos (la carpeta Secuencias de comandos ).
import arcpy import os import sys
# Get the directory the script lives in.
# Folders will be found relative to this location.
#
scriptPath = sys.path[0]
# Construct paths to ../ToolData/SanFrancisco.gdb/Streets and
# ../ToolData/Warehouse.lyr
#
toolDataPath = os.path.join(scriptPath, "..", "ToolData")
streetFeatures = os.path.join(toolDataPath, "SanFrancisco.gdb", "Streets")
streetLyr = os.path.join(toolDataPath, "Warehouse.lyr")
En el código anterior, la cadena de caracteres "ToolData" (un argumento para la función os.path.join) se prueba para determinar si son datos existentes. En este caso, hay una carpeta llamada ToolData en relación a la ubicación de la secuencia de comandos. Esta carpeta ToolData será consolidada, todo su contenido (con la excepción de las subcarpetas como se describió anteriormente) se empaquetará o cargará en el servidor (a menos que la carpeta ToolData sea parte del almacenamiento de datos del servidor).
Observe que se copian los contenidos de la carpeta, no los archivos individuales. Por ejemplo, en el código anterior, se construye la ruta al dataset e:/Warehousing/ToolData/SanFrancisco. gdb/Streets. El proceso de consolidación no se aísla y solo copia el dataset Calles dataset (copia toda la carpeta ToolData).
Ruta absoluta para un geodataset
Una ruta absoluta comienza con la letra de unidad, como e:/, como se puede ver en la muestra de código que aparece a continuación.
import arcpy import os
streetFeatures = 'e:/Warehousing/ToolData/SanFrancisco.gdb/Streets'
En el código anterior, el dataset Calles, y todo el resto de datos de los que depende (como las clases de relación y dominios), se consolidarán.
Ejemplo de híbridos
import arcpy import os
toolDataPath = r'e:\Warehousing\ToolData'
warehouseLyr = os.path.join(toolDataPath, "Warehouse.lyr")
En el código anterior, todo el contenido de la carpeta ToolData se consolida. Puesto que los contenidos de la carpeta (menos la subcarpetas) se consolidan, también se consolidará Warehouse.lyr junto con los datos referenciados por Almacén. lyr.
Barras diagonales frente a barras invertidas
La convención de Windows es utilizar una barra invertida (\) como separador de rutas. Los sistemas UNIX utilizan una barra diagonal (/).
Barra invertida en secuencias de comandos
Los lenguajes de programación que tienen sus raíces en UNIX y el lenguaje de programación C, como Python, consideran la barra invertida (\) como el carácter de escape. Por ejemplo, \t significa una pestaña. Dado que las rutas pueden contener barras invertidas, debe evitar que las barras invertidas se utilicen como carácter de escape. La forma más sencilla de convertir rutas a cadenas de caracteres sin formato de Python es utilizar la directiva r, como se muestra a continuación. Esto da la orden a Python de ignorar las barras invertidas.
thePath = r"E:\data\telluride\newdata.gdb\slopes"
Más información acerca de la especificación de las rutas de acceso
Importar otros módulos de Python
La secuencia de comandos puede importar otras secuencias de comandos que haya desarrollado. Por ejemplo, el código que aparece a continuación muestra cómo importar un módulo de Python denominado myutils.py, que se encuentra en el mismo directorio que la secuencia de comandos principal y contiene una rutina llamada getFIDName.
import arcpy import myutils inFeatures = arcpy.GetParameterAsText(0)
inFID = myutils.getFIDName(inFeatures)
Siempre que importar se encuentra una afirmación, se utiliza el siguiente orden para ubicar la secuencia de comandos:
- La misma carpeta que la secuencia de comandos. Si la secuencia de comandos está integrada en la caja de herramientas, la ubicación es la carpeta que contiene la caja de herramientas.
- La carpeta del sistema al que hace referencia la variable PYTHONPATH .
- Cualquier carpeta al que hace referencia a la la variable PATH del sistema.
Otra técnica para hacer referencia a los módulos que se van a importar es utilizar el método sys.path.append de resultado puede recuperar la salida. Esto le permite establecer una ruta a una carpeta que contiene las secuencias de comandos que necesita importar.
import arcpy import sys import os
# Append the path to the utility modules to the system path
# for the duration of this script.
#
myPythonModules = r'e:\Warehousing\Scripts'
sys.path.append(myPythonModules)
import myutils # a Python file within myPythonModules
En el código anterior, tenga en cuenta que el método sys. path. append requiere una carpeta como un argumento. Dado que ': \Warehousing\Script' es una carpeta, todo el contenido de la carpeta se consolidará. El contenido de la carpeta para copiar las normas también se aplica en este caso (todo lo que haya en la carpeta se copia, excepto las subcarpetas que no son geodatasets).
Código de validación de la herramienta
Si tiene experiencia escribiendo las herramientas de secuencia de comandos, puede proporcionar su propia lógica de validación de la herramienta . La lógica de validación se implementa con Python y su código de validación se escaneará en buscas de datos de proyecto y módulos, al igual que cualquier otra secuencia de comandos de Python. Por ejemplo, su lógica de validación puede abrir una carpeta (por ejemplo,d:\approved_projections) que contiene archivos de proyección (.prj) para generar una lista de elección de referencias espaciales que los usuarios pueden elegir cuando ejecutan la herramienta. Esta carpeta no es un parámetro de herramienta; son datos de proyecto que se utilizan en la validación de la herramienta de secuencia de comandos. Las mismas normas que se describieron anteriormente para secuencias de comandos de Python se aplican aquí, y la consecuencia es que la carpeta d: \approved_projections se consolidará y se copiará en el servidor (a no ser que se encuentre en el almacenamiento de datos del servidor).
Bibliotecas de terceros
Los módulos de terceros (cualquier módulo que no es parte del núcleo de instalación de Python) no se consolidan. Tiene que asegurarse de que el módulo está instalado en el equipo donde se abra el empaquetado. Debe proporcionar documentación para la herramienta y paquetes que especifiquen qué módulos de terceros son necesarios. Esto no se aplica a los módulos numpy o matplotlib que están instalados con ArcGIS for Desktop.
Introducción a Python, ArcPy y las herramientas de secuencia de comandos
Si no está familiarizado con Python, Arcpy y las herramientas de secuencia de comandos, la tabla a continuación enumera algunos temas que le ayudarán a empezar.
Tema de ayuda | Índice |
---|---|
Un paseo introductorio por la creación de herramientas personalizadas | Conceptos básicos de crear sus propias herramientas de geoprocesamiento. |
Temas de introducción a Python y ArcPy. Estos temas le guiarán a temas más detallados sobre Python y el paquete del sitio de ArcPy. | |
Tema introductoria sobre cómo crear herramientas de secuencia de comandos personalizadas mediante Python. | |
Configurar los parámetros de la herramienta de secuencia de comandos | Una vez que se haya familiarizado con el proceso de creación de una herramienta de secuencia de comandos, este tema se conoce porque a menudo explica en detalle cómo definir los parámetros de la herramienta de secuencia de comandos. |