งาน ArcGIS Pro สนับสนุนเครื่องมือ Python Toolbox ซึ่งทำงานกับ Map frames หรือไม่?


10

งาน ArcGIS Pro สนับสนุนเครื่องมือ Python Toolbox ซึ่งทำงานกับ Map frames หรือไม่?

เหตุผลที่ฉันถามคือฉันติดเมื่อพยายามทำต่อไปนี้:

  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. ในบานหน้าต่างโครงการสร้างกล่องเครื่องมือ Python ใหม่ในโฟลเดอร์ TestProject - ฉันเรียกว่า TestPYT ของฉัน
  8. คลิกขวาที่ TestPYT ในบานหน้าต่างโครงการเพื่อแก้ไข
  9. แทนที่รหัสด้วยด้านล่างเพื่อให้เครื่องมือ Python สองเครื่องมือที่เรียกว่าชิลีและสวิตเซอร์แลนด์
  10. บันทึกสคริปต์และรีเฟรชกล่องเครื่องมือ Python เพื่อดูเครื่องมือใหม่สองรายการ
  11. เรียกใช้เครื่องมือชิลีเพื่อดูกรอบแผนที่ในการซูมเลย์เอาต์ไปที่ชิลี
  12. เรียกใช้เครื่องมือสวิตเซอร์แลนด์เพื่อดูกรอบแผนที่ในการซูมเค้าโครงไปยังสวิตเซอร์แลนด์
  13. แทรกรายการงานใหม่
  14. ในรายการงาน 1 แทรกงานใหม่และเรียกว่าชิลี
  15. ในงานชิลีแทรกขั้นตอนใหม่และเรียกว่าซูมไปที่ชิลี
  16. สำหรับพฤติกรรมขั้นตอนทำให้เป็นอัตโนมัติและซ่อนอยู่
  17. บนแท็บการดำเนินการฉันพยายามตั้งค่า Command / Geoprocessing เป็นเครื่องมือ Geoprocessing ที่เลือกเครื่องมือ Chile

ป้อนคำอธิบายรูปภาพที่นี่

  1. ดูเหมือนว่าจะติดเมื่อฉันเลือกตกลง

ป้อนคำอธิบายรูปภาพที่นี่

  1. ดูเหมือนว่าจะ "เสีย" เครื่องมือเมื่อฉันคลิกเสร็จสิ้น

โดยเฉพาะสิ่งที่ฉันพยายามสร้างคือเวิร์กโฟลว์ที่มีสองงานที่ฉันสามารถคลิกเพื่อซูมไปที่ชิลีหรือซูมไปยังสวิตเซอร์แลนด์ แต่ฉันติดอยู่ที่ขั้นตอนที่ 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

สิ่งนี้ดูเหมือนจะไม่ทำงานกับกล่องเครื่องมือ 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.