งาน ArcGIS Pro สนับสนุนเครื่องมือ Python Toolbox ซึ่งทำงานกับ Map frames หรือไม่?
เหตุผลที่ฉันถามคือฉันติดเมื่อพยายามทำต่อไปนี้:
- เริ่ม ArcGIS Pro 1.1.1
- สร้างโครงการใหม่ - ฉันเรียกว่า TestProject ของฉันและวางใน C: \ Temp
- ใช้บานหน้าต่างโครงการเพื่อเพิ่มการเชื่อมต่อโฟลเดอร์ไปยังตำแหน่งที่ฉันมีไฟล์รูปร่างของประเทศต่างๆในโลกจาก Natural Earth ()
- ลากและวาง ne_10m_admin_0_countries.shp ลงในแผนที่เพื่อสร้างเลเยอร์ที่เรียกว่า ne_10m_admin_0_countries
- แทรกเค้าโครงใหม่ - ฉันใช้แนวนอน A3
- แทรกกรอบแผนที่ใหม่ลงในเค้าโครง
- ในบานหน้าต่างโครงการสร้างกล่องเครื่องมือ Python ใหม่ในโฟลเดอร์ TestProject - ฉันเรียกว่า TestPYT ของฉัน
- คลิกขวาที่ TestPYT ในบานหน้าต่างโครงการเพื่อแก้ไข
- แทนที่รหัสด้วยด้านล่างเพื่อให้เครื่องมือ Python สองเครื่องมือที่เรียกว่าชิลีและสวิตเซอร์แลนด์
- บันทึกสคริปต์และรีเฟรชกล่องเครื่องมือ Python เพื่อดูเครื่องมือใหม่สองรายการ
- เรียกใช้เครื่องมือชิลีเพื่อดูกรอบแผนที่ในการซูมเลย์เอาต์ไปที่ชิลี
- เรียกใช้เครื่องมือสวิตเซอร์แลนด์เพื่อดูกรอบแผนที่ในการซูมเค้าโครงไปยังสวิตเซอร์แลนด์
- แทรกรายการงานใหม่
- ในรายการงาน 1 แทรกงานใหม่และเรียกว่าชิลี
- ในงานชิลีแทรกขั้นตอนใหม่และเรียกว่าซูมไปที่ชิลี
- สำหรับพฤติกรรมขั้นตอนทำให้เป็นอัตโนมัติและซ่อนอยู่
- บนแท็บการดำเนินการฉันพยายามตั้งค่า Command / Geoprocessing เป็นเครื่องมือ Geoprocessing ที่เลือกเครื่องมือ Chile
- ดูเหมือนว่าจะติดเมื่อฉันเลือกตกลง
- ดูเหมือนว่าจะ "เสีย" เครื่องมือเมื่อฉันคลิกเสร็จสิ้น
โดยเฉพาะสิ่งที่ฉันพยายามสร้างคือเวิร์กโฟลว์ที่มีสองงานที่ฉันสามารถคลิกเพื่อซูมไปที่ชิลีหรือซูมไปยังสวิตเซอร์แลนด์ แต่ฉันติดอยู่ที่ขั้นตอนที่ 19 ด้านบน
สิ่งที่ฉันพยายามทำโดยรวมคือการหา ArcPy (สำหรับ ArcGIS Pro) เทียบเท่ากับแถบเครื่องมือ Python AddIn ใน ArcPy (สำหรับ ArcGIS 10.x สถาปัตยกรรม) ด้วยปุ่มสองปุ่ม (ชิลีและสวิตเซอร์แลนด์) เพื่อซูมไปยังประเทศเหล่านั้น
ฉันเคยผ่านขั้นตอนนี้มาสองสามครั้งและมีโอกาสครั้งหนึ่งที่ฉันสามารถรับเครื่องมือชิลีและสวิตเซอร์แลนด์ให้ทำงานตามภารกิจได้ แต่ถึงกระนั้นพวกเขาก็ดูเหมือนจะไม่ได้มีปฏิสัมพันธ์กับกรอบแผนที่ (ไม่มีข้อผิดพลาด กับสิ่งที่แสดงใน Map Frame เมื่อวิ่ง) ถึงแม้ว่าเครื่องมือเมื่อเรียกใช้จากกล่องเครื่องมือ Python ยังคงทำงานได้โดยไม่มีปัญหา
นี่คือรหัสสำหรับคัดลอก / วางลงใน 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