Le attività di ArcGIS Pro supportano gli strumenti di Python Toolbox che funzionano su Map Frames?
Il motivo per cui chiedo è che sono bloccato quando provo a fare quanto segue:
- Avviare ArcGIS Pro 1.1.1
- Crea un nuovo progetto - Ho chiamato il mio TestProject e inserito in C: \ Temp
- Utilizzare il riquadro Progetto per aggiungere la connessione cartella a dove ho uno shapefile dei paesi del mondo da Natural Earth ()
- Trascina e rilascia ne_10m_admin_0_countries.shp nella mappa per creare un layer chiamato ne_10m_admin_0_countries
- Inserisci un nuovo layout: ho usato A3 Orizzontale
- Inserisci un nuovo riquadro della mappa nel layout
- Nel riquadro Progetto crea una nuova casella degli strumenti Python nella cartella TestProject - ho chiamato il mio TestPYT
- Fare clic con il tasto destro su TestPYT nel riquadro Progetto per modificarlo
- Sostituisci il codice con quello sotto per dare a Python Toolbox due strumenti chiamati Cile e Svizzera
- Salvare lo script e aggiornare la casella degli strumenti di Python per vedere i due nuovi strumenti
- Esegui lo strumento Cile per visualizzare la cornice della mappa sullo zoom del layout in Cile
- Esegui lo strumento Svizzera per visualizzare la cornice della mappa sullo zoom del layout in Svizzera
- Inserisci un nuovo elemento di attività
- Nell'elemento attività 1 inserisci una nuova attività e chiamala Cile
- Nell'attività Cile inserisci un nuovo passaggio e chiamalo Zoom su Cile
- Per Step Behavior rendilo automatico e nascosto
- Nella scheda Azioni cerco di impostare Command / Geoprocessing come strumento di geoprocessing scegliendo lo strumento Cile
- Sembra rimanere quando ho scelto OK
- Sembra "perdere" lo strumento quando faccio clic su Fine
In particolare, ciò che sto cercando di creare è un flusso di lavoro con due attività che posso fare clic su Zoom su Cile o Zoom su Svizzera, ma sono bloccato al passaggio 19 sopra.
Quello che sto cercando di fare nel complesso è trovare un ArcPy (per ArcGIS Pro) equivalente a una barra degli strumenti Python AddIn in ArcPy (per l'architettura ArcGIS 10.x) con due pulsanti (Cile e Svizzera) per zoomare su quei paesi.
Ho eseguito questa procedura alcune volte, e in un'occasione sono stato in grado di far sì che gli strumenti di Cile e Svizzera si conficcassero come compiti, ma anche allora non sembravano interagire con il Frame della mappa (nessun errore, solo nessun cambiamento a ciò che è stato visualizzato nel Map Frame quando sono stati eseguiti), anche se gli strumenti eseguiti da Python Toolbox hanno continuato a funzionare senza problemi.
Questo è il codice da copiare / incollare in 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