Unterstützen ArcGIS Pro-Aufgaben Python Toolbox-Tools, die mit Map Frames ausgeführt werden?

10

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:

  1. Starten Sie ArcGIS Pro 1.1.1
  2. Erstellen Sie ein neues Projekt - Ich habe mein TestProject aufgerufen und in C: \ Temp platziert
  3. Verwenden Sie den Projektbereich, um eine Ordnerverbindung hinzuzufügen, zu der ich ein Shapefile der Länder der Welt von Natural Earth () habe.
  4. 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
  5. Neues Layout einfügen - Ich habe A3 Landscape verwendet
  6. Fügen Sie einen neuen Kartenrahmen in das Layout ein
  7. Erstellen Sie im Projektbereich eine neue Python-Toolbox im Ordner TestProject - ich habe meine TestPYT aufgerufen
  8. Klicken Sie im Projektfenster mit der rechten Maustaste auf TestPYT, um es zu bearbeiten
  9. Ersetzen Sie den Code durch den folgenden, um der Python Toolbox zwei Tools mit den Namen Chile und Schweiz zu geben
  10. Speichern Sie das Skript und aktualisieren Sie die Python Toolbox, um die beiden neuen Tools anzuzeigen
  11. Führen Sie das Chile-Werkzeug aus, um den Kartenrahmen im Layout zu sehen und auf Chile zu zoomen
  12. Führen Sie das Schweiz-Tool aus, um den Kartenrahmen im Layout zu sehen. Zoomen Sie in die Schweiz
  13. Fügen Sie ein neues Aufgabenelement ein
  14. Fügen Sie im Aufgabenpunkt 1 eine neue Aufgabe ein und nennen Sie sie Chile
  15. Fügen Sie in der Chile-Aufgabe einen neuen Schritt ein und nennen Sie Zoom to Chile
  16. Für Schrittverhalten machen Sie es automatisch und versteckt
  17. Auf der Registerkarte Aktionen versuche ich, Befehl / Geoverarbeitung als Geoverarbeitungswerkzeug festzulegen, indem ich das Chile-Werkzeug auswähle

Geben Sie hier die Bildbeschreibung ein

  1. Es scheint zu bleiben, wenn ich OK wähle

Geben Sie hier die Bildbeschreibung ein

  1. 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.

Geben Sie hier die Bildbeschreibung ein

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
PolyGeo
quelle
Dies scheint mit keiner Python-Toolbox zu funktionieren, unabhängig davon, was sie tut. Es kann auch erwähnenswert sein, dass Toolbox-Parameter nicht angezeigt werden, wenn das Tool ausgewählt und die Einbettung aktiviert ist (mit anderen Worten, die Toolbox wird nicht ordnungsgemäß geladen).
Evil Genius

Antworten:

4

* .PYT-Toolboxen werden für Aufgaben in ArcGIS Pro 1.0 und 1.1 nicht unterstützt.

Sie werden jedoch seit ArcGIS Pro 1.2 unterstützt.

Um dieses Problem zu umgehen, versuchen Sie, Ihr Werkzeug in ein Geoverarbeitungsmodell einzufügen, und rufen Sie das Modell dann mithilfe eines Aufgabenschritts auf.

Kapitän
quelle