As tarefas do ArcGIS Pro suportam as ferramentas Python Toolbox que operam nos quadros de mapas?
O motivo pelo qual pergunto é que estou preso ao tentar fazer o seguinte:
- Iniciar o ArcGIS Pro 1.1.1
- Crie um novo projeto - chamei o meu TestProject e coloquei em C: \ Temp
- Use o painel Projeto para adicionar conexão de pasta para onde tenho um arquivo de forma dos países do mundo da Terra natural ()
- Arraste e solte ne_10m_admin_0_countries.shp no mapa para criar a camada chamada ne_10m_admin_0_countries
- Inserir um novo layout - usei o A3 Landscape
- Inserir um novo quadro de mapa no layout
- No painel Projeto, crie uma Nova Caixa de Ferramentas Python na pasta TestProject - chamei de mine TestPYT
- Clique com o botão direito do mouse em TestPYT no painel Projeto para editá-lo
- Substitua o código pelo código abaixo para fornecer à Python Toolbox duas ferramentas chamadas Chile e Suíça
- Salve o script e atualize a Python Toolbox para ver as duas novas ferramentas
- Execute a ferramenta Chile para ver o quadro do mapa no zoom do layout para o Chile
- Execute a ferramenta Suíça para ver o quadro do mapa no zoom do layout para a Suíça
- Inserir um novo item de tarefa
- No item de tarefa 1, insira uma nova tarefa e chame-a de Chile
- Na tarefa Chile, insira uma Nova Etapa e chame-a de Zoom para o Chile
- Para Comportamento por Etapas, torne-o Automático e Oculto
- Na guia Ações, tento definir Comando / Geoprocessamento como uma Ferramenta de Geoprocessamento, escolhendo a ferramenta Chile
- Parece grudar quando escolho OK
- Parece "perder" a ferramenta quando clico em Concluído
Especificamente, o que estou tentando criar é um fluxo de trabalho com duas tarefas nas quais posso clicar em Zoom para o Chile ou Zoom para a Suíça, mas estou preso na etapa 19 acima.
O que estou tentando fazer no geral é encontrar um ArcPy (para ArcGIS Pro) equivalente a uma barra de ferramentas Python AddIn no ArcPy (para arquitetura ArcGIS 10.x) com dois botões (Chile e Suíça) para aplicar zoom nesses países.
Eu executei esse procedimento algumas vezes e, em uma ocasião, consegui fazer com que as ferramentas do Chile e da Suíça permanecessem como tarefas, mas mesmo assim elas não pareciam interagir com o Map Frame (sem erros, apenas sem alterações) para o que foi exibido no Map Frame quando eles foram executados), mesmo que as ferramentas executadas na Python Toolbox continuassem funcionando sem problemas.
Este é o código para copiar / colar na 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