Unterstützen ArcGIS Pro-Aufgaben Python Toolbox-Tools, die mit Map Frames ausgeführt werden?
Der Grund, den ich frage, ist, dass ich feststecke, wenn ich Folgendes versuche:
- Starten Sie ArcGIS Pro 1.1.1
- Erstellen Sie ein neues Projekt - Ich habe mein TestProject aufgerufen und in C: \ Temp platziert
- Verwenden Sie den Projektbereich, um eine Ordnerverbindung hinzuzufügen, zu der ich ein Shapefile der Länder der Welt von Natural Earth () habe.
- Ziehen Sie ne_10m_admin_0_countries.shp per Drag & Drop in die Map, um einen Layer mit dem Namen ne_10m_admin_0_countries zu erstellen
- Neues Layout einfügen - Ich habe A3 Landscape verwendet
- Fügen Sie einen neuen Kartenrahmen in das Layout ein
- Erstellen Sie im Projektbereich eine neue Python-Toolbox im Ordner TestProject - ich habe meine TestPYT aufgerufen
- Klicken Sie im Projektfenster mit der rechten Maustaste auf TestPYT, um es zu bearbeiten
- Ersetzen Sie den Code durch den folgenden, um der Python Toolbox zwei Tools mit den Namen Chile und Schweiz zu geben
- Speichern Sie das Skript und aktualisieren Sie die Python Toolbox, um die beiden neuen Tools anzuzeigen
- Führen Sie das Chile-Werkzeug aus, um den Kartenrahmen im Layout zu sehen und auf Chile zu zoomen
- Führen Sie das Schweiz-Tool aus, um den Kartenrahmen im Layout zu sehen. Zoomen Sie in die Schweiz
- Fügen Sie ein neues Aufgabenelement ein
- Fügen Sie im Aufgabenpunkt 1 eine neue Aufgabe ein und nennen Sie sie Chile
- Fügen Sie in der Chile-Aufgabe einen neuen Schritt ein und nennen Sie Zoom to Chile
- Für Schrittverhalten machen Sie es automatisch und versteckt
- Auf der Registerkarte Aktionen versuche ich, Befehl / Geoverarbeitung als Geoverarbeitungswerkzeug festzulegen, indem ich das Chile-Werkzeug auswähle
- Es scheint zu bleiben, wenn ich OK wähle
- Es scheint das Werkzeug zu "verlieren", wenn ich auf Fertig klicke
Insbesondere versuche ich, einen Workflow mit zwei Aufgaben zu erstellen, auf die ich klicken kann, um nach Chile oder in die Schweiz zu zoomen, aber ich stecke bei Schritt 19 oben fest.
Insgesamt versuche ich, ein ArcPy (für ArcGIS Pro) zu finden, das einer Python AddIn-Symbolleiste in ArcPy (für ArcGIS 10.x-Architektur) mit zwei Schaltflächen (Chile und Schweiz) entspricht, um in diese Länder zu zoomen.
Ich habe diese Prozedur einige Male durchlaufen und einmal konnte ich die Tools für Chile und die Schweiz als Aufgaben verwenden, aber selbst dann schienen sie nicht mit dem Kartenrahmen zu interagieren (kein Fehler, nur keine Änderung) zu dem, was im Map Frame angezeigt wurde, als sie ausgeführt wurden), obwohl die Tools beim Ausführen über die Python Toolbox weiterhin problemlos funktionierten.
Dies ist der Code zum Kopieren / Einfügen in die 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