ArcGIS Proタスクは、マップフレームで動作するPython Toolboxツールをサポートしていますか?
私が尋ねる理由は、私が次のことをしようとするときに立ち往生していることです:
- ArcGIS Pro 1.1.1を起動します
- 新しいプロジェクトを作成します-私は自分のTestProjectを呼び出し、C:\ Tempに配置しました
- プロジェクトペインを使用して、Natural Earthから世界の国々のシェープファイルがある場所にフォルダー接続を追加します()
- ne_10m_admin_0_countries.shpをマップにドラッグアンドドロップして、ne_10m_admin_0_countriesというレイヤーを作成します
- 新しいレイアウトを挿入する-A3ランドスケープを使用しました
- レイアウトに新しいマップフレームを挿入する
- プロジェクトペインで、TestProjectフォルダーに新しいPythonツールボックスを作成します-私はTestPYTと呼んでいます
- プロジェクトペインでTestPYTを右クリックして編集します
- 以下のコードでコードを置き換えて、Python Toolboxにチリとスイスと呼ばれる2つのツールを提供します。
- スクリプトを保存してPythonツールボックスを更新し、2つの新しいツールを確認します
- チリツールを実行して、レイアウトにマップフレームを表示してチリにズーム
- スイスツールを実行して、レイアウト上のマップフレームを表示しますスイスにズームします
- 新しいタスクアイテムを挿入する
- タスクアイテム1に新しいタスクを挿入し、チリと呼びます
- チリタスクで新しいステップを挿入し、それをZoom to Chileと呼びます
- ステップ動作の場合、それを自動で非表示にします
- [アクション]タブで、コマンド/ジオプロセシングをジオプロセシングツールとして設定して、チリツールを選択しようとします
- OKを選ぶとくっついてしまうようです
- 完了をクリックするとツールが「失われる」ようです
具体的には、作成しようとしているのは、チリにズームまたはスイスにズームするためにクリックできる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 
                    
                  
                
              

