¿Las tareas de ArcGIS Pro son compatibles con las herramientas de Python Toolbox que operan en Map Frames?
La razón por la que pregunto es que estoy atascado cuando intento hacer lo siguiente:
- Inicie ArcGIS Pro 1.1.1
- Cree un nuevo proyecto: llamé al mío TestProject y lo coloqué en C: \ Temp
- Use el panel Proyecto para Agregar conexión de carpeta a donde tenga un archivo de forma de los países del mundo de Natural Earth ()
- Arrastre y suelte ne_10m_admin_0_countries.shp en el mapa para crear una capa llamada ne_10m_admin_0_countries
- Insertar un nuevo diseño: utilicé A3 Horizontal
- Insertar un nuevo marco de mapa en el diseño
- En el panel Proyecto, cree una Nueva caja de herramientas de Python en la carpeta TestProject. Llamé a la mía TestPYT
- Haga clic derecho en TestPYT en el panel Proyecto para editarlo
- Reemplace el código con el siguiente para darle a Python Toolbox dos herramientas llamadas Chile y Suiza
- Guarde el script y actualice la caja de herramientas de Python para ver las dos nuevas herramientas
- Ejecute la herramienta Chile para ver el marco del mapa en el diseño zoom a Chile
- Ejecute la herramienta Suiza para ver el marco del mapa en el diseño zoom a Suiza
- Insertar un nuevo elemento de tarea
- En el elemento de tarea 1 inserte una nueva tarea y llámela Chile
- En la tarea de Chile, inserte un Nuevo paso y llámelo Zoom a Chile
- Para Step Behavior, hazlo automático y oculto
- En la pestaña Acciones, trato de configurar Comando / Geoprocesamiento como una herramienta de geoprocesamiento eligiendo la herramienta Chile
- Parece que se queda cuando elijo OK
- Parece "perder" la herramienta cuando hago clic en Listo
Específicamente, lo que estoy tratando de crear es un flujo de trabajo con dos tareas en las que puedo hacer clic para Zoom to Chile o Zoom to Switzerland, pero estoy atascado en el paso 19 anterior.
Lo que intento hacer en general es encontrar un ArcPy (para ArcGIS Pro) equivalente a una barra de herramientas de Python AddIn en ArcPy (para la arquitectura ArcGIS 10.x) con dos botones (Chile y Suiza) para acercar a esos países.
He realizado este procedimiento varias veces, y en una ocasión pude hacer que las herramientas de Chile y Suiza se mantuvieran como tareas, pero aun así no parecían interactuar con el Marco del mapa (sin error, simplemente sin cambio a lo que se mostraba en el marco del mapa cuando se ejecutaban), a pesar de que las herramientas cuando se ejecutaban desde Python Toolbox continuaban funcionando sin problemas.
Este es el código para copiar / pegar en Python Toolbox (TestPYT).
import arcpy
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Toolbox"
self.alias = ""
# List of tool classes associated with this toolbox
self.tools = [Slide1,Slide2]
class Slide1(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Chile"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
params = None
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
aprx = arcpy.mp.ArcGISProject("CURRENT")
mapx = aprx.listMaps()[0]
lyt = aprx.listLayouts()[0]
lyr = mapx.listLayers("ne_10m_admin_0_countries")[0]
lyr.definitionQuery = '"ADMIN" = ' + "'Chile'"
mFrame = lyt.listElements("MAPFRAME_ELEMENT")[0]
mFrame.camera.setExtent(mFrame.getLayerExtent(lyr, False, True))
lyr.definitionQuery = ""
return
class Slide2(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Switzerland"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
params = None
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
aprx = arcpy.mp.ArcGISProject("CURRENT")
mapx = aprx.listMaps()[0]
lyt = aprx.listLayouts()[0]
lyr = mapx.listLayers("ne_10m_admin_0_countries")[0]
lyr.definitionQuery = '"ADMIN" = ' + "'Switzerland'"
mFrame = lyt.listElements("MAPFRAME_ELEMENT")[0]
mFrame.camera.setExtent(mFrame.getLayerExtent(lyr, False, True))
lyr.definitionQuery = ""
return