ArcGIS Proタスクは、マップフレームで動作するPython Toolboxツールをサポートしていますか?


10

ArcGIS Proタスクは、マップフレームで動作するPython Toolboxツールをサポートしていますか?

私が尋ねる理由は、私が次のことをしようとするときに立ち往生していることです:

  1. ArcGIS Pro 1.1.1を起動します
  2. 新しいプロジェクトを作成します-私は自分のTestProjectを呼び出し、C:\ Tempに配置しました
  3. プロジェクトペインを使用して、Natural Earthから世界の国々のシェープファイルがある場所にフォルダー接続を追加します()
  4. ne_10m_admin_0_countries.shpをマップにドラッグアンドドロップして、ne_10m_admin_0_countriesというレイヤーを作成します
  5. 新しいレイアウトを挿入する-A3ランドスケープを使用しました
  6. レイアウトに新しいマップフレームを挿入する
  7. プロジェクトペインで、TestProjectフォルダーに新しいPythonツールボックスを作成します-私はTestPYTと呼んでいます
  8. プロジェクトペインでTestPYTを右クリックして編集します
  9. 以下のコードでコードを置き換えて、Python Toolboxにチリとスイスと呼ばれる2つのツールを提供します。
  10. スクリプトを保存してPythonツールボックスを更新し、2つの新しいツールを確認します
  11. チリツールを実行して、レイアウトにマップフレームを表示してチリにズーム
  12. スイスツールを実行して、レイアウト上のマップフレームを表示しますスイスにズームします
  13. 新しいタスクアイテムを挿入する
  14. タスクアイテム1に新しいタスクを挿入し、チリと呼びます
  15. チリタスクで新しいステップを挿入し、それをZoom to Chileと呼びます
  16. ステップ動作の場合、それを自動で非表示にします
  17. [アクション]タブで、コマンド/ジオプロセシングをジオプロセシングツールとして設定して、チリツールを選択しようとします

ここに画像の説明を入力してください

  1. OKを選ぶとくっついてしまうようです

ここに画像の説明を入力してください

  1. 完了をクリックするとツールが「失われる」ようです

具体的には、作成しようとしているのは、チリにズームまたはスイスにズームするためにクリックできる2つのタスクを含むワークフローですが、上記のステップ19で立ち往生しています。

私が全体的にやろうとしているのは、ArcPy(ArcGIS 10.xアーキテクチャ用)のPythonアドインツールバーに相当するArcPy(ArcGIS Pro用)を見つけて、それらの国にズームするための2つのボタン(チリとスイス)を備えていることです。

私はこの手順を数回実行しましたが、ある場合にはチリとスイスのツールをタスクとして固定することができましたが、それでもそれらはマップフレームと相互作用していなかったようです(エラーなし、変更なし) Pythonツールボックスから実行したときにツールが問題なく機能し続けたとしても、実行時にマップフレームに表示されていたものと同じです)。

ここに画像の説明を入力してください

これは、Pythonツールボックス(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

これは、何をしているかに関係なく、どのPythonツールボックスでも機能しないようです。また、ツールを選択して埋め込みを有効にすると、ツールボックスのパラメーターが表示されないことにも注意してください(つまり、実際にはツールボックスを適切にロードしていません)。
Evil Genius

回答:


4

* .PYTツールボックスは、ArcGIS Pro 1.0および1.1のタスクではサポートされていません。

ただし、ArcGIS Pro 1.2以降でサポートされています。

回避策として、ツールをジオプロセシングモデルに挿入してから、タスクステップを使用してモデルを呼び出します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.