การใช้ MultiValue Parameter กับหลายคอลัมน์ด้วย Python และ ArcGIS Desktop หรือไม่?


10

ฉันกำลังทำงานกับสคริปต์ Python ของ ArcGIS (9.3) หนึ่งในอินพุตคือรายการคุณสมบัติ สำหรับแต่ละคุณสมบัติฉันต้องเลือกฟิลด์ที่เกี่ยวข้อง การตั้งค่าพารามิเตอร์เป็น MultiValue จะให้ตารางที่ดีใน UI สำหรับคุณลักษณะทั้งหมดที่กำลังประมวลผล ฉันจะเพิ่มคอลัมน์อื่นลงในตาราง MultiValue เพื่อเลือกฟิลด์สำหรับแต่ละคุณสมบัติได้อย่างไร

ข้ามโพสต์: http://forums.arcgis.com/threads/30907-MultiValue-Parameter-with-Multiple-Columns

คำตอบของ Esri จากฟอรัม ArcGIS:

น่าเสียดายที่โซลูชันสำหรับสิ่งนี้ได้รับการติดตั้งเมื่อเร็ว ๆ นี้สำหรับ 10.1 ที่มีอินพุต ValueTable สำหรับเครื่องมือสคริปต์ คุณจะต้องมีพารามิเตอร์หลายค่าสองค่าด้วยการตรวจสอบความถูกต้องที่กำหนดเองเพื่อให้สามารถใช้งานได้กับ 9.3.1


หากเป็นรายการตัวเลือกหลายค่าที่คุณสนใจ - ฉันเคยเห็นโพสต์บล็อก Esriนี้เมื่อเร็ว ๆ นี้อาจเป็นประโยชน์
Alex Tereshenkov

คำตอบ:


1

ฉันได้ทำวิธีการที่จะทำเช่นนี้แม้ว่าในลักษณะที่ค่อนข้างง่าย ฉันต้องการสร้างพารามิเตอร์หลายค่าซึ่งฉันเพิ่ม FeatureLayers จำนวนมากจากนั้นเลือกฟิลด์ ID สำหรับแต่ละเลเยอร์ ฉันทำให้มันทำงานได้ แต่ฉันไม่สามารถทำงานวิธีทำให้ฟิลด์เป็นรายการดรอปดาวน์ดังนั้นผู้ใช้ต้องป้อนชื่อฟิลด์ด้วยตนเอง นี่คือส่วนต่อประสาน:

อินเทอร์เฟซตัวอย่าง

หากใครสามารถแก้ไขปัญหานี้หรือปราชญ์จาก ESRI อวยพรเราด้วยความรู้ของพวกเขาฉันชอบที่จะหาวิธีเปลี่ยนคอลัมน์ที่สองของฉัน (รหัสไซต์) ลงในรายการแบบหล่นลง หากคุณต้องการดูตัวอย่างนี้ดูที่เครื่องมือสร้าง TIN

อย่างไรก็ตามเพื่อสร้างส่วนต่อประสานนี้ฉันสร้างเครื่องมือสคริปต์และเพิ่มพารามิเตอร์ของเลเยอร์คุณลักษณะประเภทและตั้งค่าเป็นหลายค่าตามที่แสดงด้านล่าง

การตั้งค่าอินเตอร์เฟซเริ่มต้น

ฉันคลิกที่แท็บการตรวจสอบที่ด้านบนแล้วคลิกปุ่มแก้ไข เนื่องจากพารามิเตอร์นี้เป็นพารามิเตอร์ที่ 6 ในเครื่องมือสคริปต์ของฉันฉันได้อัปเดตรหัสต่อไปนี้:

def initializeParameters(self):
    """Refine the properties of a tool's parameters.  This method is
    called when the tool is opened."""

    # Get the 6th parameter
    param = self.params[6]
    param.datatype = "Value Table"
    param.columns = [["Feature Layer","Activity Layer"],["Field","Site ID"]]    
    return

รีเซ็ตอินเตอร์เฟสเป็นตารางหลายคอลัมน์ที่ฉันต้องการ เมื่อคุณใช้ GetParameterAsText มันจะคืนค่าต่อไปนี้โดยใช้ตัวอย่างของฉัน:

pipeline pid;Dredging did


ฉันได้ทำการวิจัยเพิ่มเติมและได้สร้างเครื่องมือโดยใช้กล่องเครื่องมือหลาม มันใช้งานได้ดีมาก แต่มีข้อ จำกัด ถ้าคุณกลับไปเลือก ID อื่น ผมได้โพสต์โค้ดบน Geonet ที่นี่


0

หากคุณกำลังมองหารายการดรอปดาวน์สำหรับพารามิเตอร์รหัสไซต์คุณสามารถใช้รหัสดังต่อไปนี้:

 param.filters[1].list = ['pid', 'id']

ดังนั้นคุณสามารถสร้างเคอร์เซอร์หรือใช้วิธีอื่นเพื่ออ่านฟิลด์ทั้งหมดของ FC และส่งผ่านไปยังประโยคก่อนหน้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.