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