แยกตามคุณสมบัติโดยใช้ ModelBuilder กับ User Input?


11

ใช้ ModelBuilder ฉันต้องการสร้างเครื่องมือที่จะให้ผู้ใช้เลือกค่าหรือค่าที่จะใช้ในการแยกรูปร่างไฟล์

ฉันมีชั้นพัสดุที่มีเขตข้อมูล "Parcel_Type" ฉันต้องการให้ผู้ใช้สามารถเลือกประเภทของพัสดุที่ต้องการแยก ดังนั้นหากผู้ใช้ต้องการแยกพัสดุด้วยประเภท "EL" เขาจะต้องป้อน "EL" เป็นตัวแปรเท่านั้น หากเขาต้องการพิมพ์ "EL" และ "CDD" เขาต้องป้อนพวกเขาเป็นหลายตัวแปร นั่นจะเป็นการโต้ตอบแบบมนุษย์เพียงอย่างเดียวกับแบบจำลอง

ดังนั้นฉันจะใช้ตัวแปรเหล่านั้นในแบบจำลองของฉันได้อย่างไร

คำตอบ:


14

การทำงานประเภทนี้มักจะเกี่ยวข้องกับการเขียนWHERE Clauseดังนั้นฉันคิดว่าการใช้ Python อย่างน้อยก็เป็นไปตามลำดับ

นอกจากนี้ในขณะนี้เป็นไปได้จะทำอย่างไรกับ ModelBuilder, IMO สร้างหลามเครื่องมือสคริปต์ที่มีการตรวจสอบที่กำหนดเองและการควบคุมที่มากกว่าการตั้งค่าพารามิเตอร์สามารถให้ประสบการณ์การใช้งานที่ดีขึ้น - ตัวอย่างเช่นโดยการทำให้สนามและ หลายค่า *พารามิเตอร์เมนูแบบเลื่อนลงที่ คุณสามารถเลือกค่าจากแทนที่จะต้องพิมพ์ค่า

* อาจไม่แน่ใจเกี่ยวกับพารามิเตอร์ MultiValue

อย่างไรก็ตามเนื่องจากเป็นแบบฝึกหัดขั้นสูงสำหรับหัวข้ออื่นฉันจะใช้แนวทาง ModelBuilder โดยใช้ Python เพื่อสร้างส่วนคำสั่ง WHERE:

  1. สร้างรูปแบบใหม่
  2. สร้างตัวแปร (คลิกขวาบนผืนผ้าใบที่ว่างเปล่าและคลิกเพิ่มตัวแปร ) สำหรับการป้อนข้อมูลชั้นสารคดี , สนามและหลายค่าพารามิเตอร์
  3. คลิกขวาที่แต่ละพารามิเตอร์แล้วเลือกพารามิเตอร์โมเดล
  4. เพิ่มเครื่องมือคำนวณมูลค่า (การจัดการข้อมูล)ไปยังพื้นที่วาดภาพ เชื่อมต่อตัวแปร 3 ตัวเข้ากับมันเป็นเงื่อนไขเบื้องต้น (สำหรับการแสดงในกรณีนี้ แต่สามารถสร้างความแตกต่างในลำดับการดำเนินการในสถานการณ์อื่น ๆ )
  5. คลิกสองครั้งที่เครื่องมือคำนวณมูลค่าเพื่อตั้งค่า:

    5a คัดลอก / วางต่อไปนี้ลงในกล่องนิพจน์ (ปรับให้เข้ากับชื่อตัวแปรของคุณ):

    buildWhereClauseMultiValue(r"%Feature Layer%","%Field%","%Values%")

    5b คัดลอก / วางต่อไปนี้ลงในกล่องCode Block :

    import arcpy
    
    def buildWhereClauseMultiValue(table, field, values):
        """Takes a semicolon-delimited list of values and constructs a SQL WHERE
        clause to select those values within a given field and table."""
    
        # Add DBMS-specific field delimiters
        fieldDelimited = arcpy.AddFieldDelimiters(arcpy.Describe(table).path, field)
    
        # Split multivalue at semicolons and strip quotes
        valueList = [value[1:-1] if (value.startswith("'") and value.endswith("'")) else value for value in values.split(';')]
    
        # Determine field type
        fieldType = arcpy.ListFields(table, field)[0].type
    
        # Add single-quotes for string field values
        if str(fieldType) == 'String':
            valueList = ["'%s'" % value for value in valueList]
    
        # Format WHERE clause in the form of an IN statement
        whereClause = "%s IN(%s)" % (fieldDelimited, ', '.join(valueList))
        return whereClause

    5c การตั้งค่าชนิดข้อมูลออกจะเป็นการแสดงออก SQL

    5d คลิกตกลงและคลิกขวาที่ตัวแปรเอาต์พุตจากเครื่องมือคำนวณค่าและเปลี่ยนชื่อเป็นคำอธิบายเพิ่มเติมเช่น "WHERE Clause"

  6. เพิ่มเครื่องมือSelect Layer By Attribute (การจัดการข้อมูล)ลงในพื้นที่วาด เชื่อมต่อ Feature Layer และตัวแปร WHERE Clause เข้ากับเครื่องมือ Select Layer By Attribute
  7. เพิ่มเครื่องมือคัดลอกคุณสมบัติ (การจัดการข้อมูล)ไปยังพื้นที่วาดภาพ เชื่อมต่อผลลัพธ์ของเครื่องมือ Select Layer By Attribute กับเครื่องมือ Copy Features คลิกขวาที่คุณสมบัติออกชั้นตัวแปรและตรวจสอบรุ่นพารามิเตอร์และ (ขยะ) เดอะเพิ่มจอแสดงผลตัวเลือก

    ณ จุดนี้มันควรมีลักษณะเช่นนี้: ผ้าใบจำลอง

  8. ภายใต้เมนูรุ่น -> คุณสมบัติของรุ่นให้ชื่อและป้ายกำกับที่ดีและบันทึกและปิด

  9. คลิกสองครั้งที่โมเดลใน ArcToolbox เพื่อแสดงไดอะล็อกโมเดล ป้อนพารามิเตอร์ของคุณแล้วคลิกตกลง ควรส่งออกคุณสมบัติที่เลือกไปยังคลาสสถานที่ใหม่และเพิ่มไปยังแผนที่

    ไดอะล็อกโมเดล

หมายเหตุ:

  • คุณสามารถ hardcode ค่าและไม่ตัวแปร "parameterize" ที่คุณไม่ต้องการให้ผู้ใช้เปลี่ยนเช่นเลเยอร์คุณลักษณะหรือพารามิเตอร์ฟิลด์ ฉันชอบมีเครื่องมือที่เป็นแบบทั่วไป / ใช้ซ้ำได้ดังนั้นฉันจึงสร้างพารามิเตอร์แบบจำลองเหล่านั้น ในความเป็นจริงสิ่งที่ฉันจะทำคือเพียงลากและวางโมเดลทั่วไปลงในโมเดลใหม่จากนั้นตั้งค่าพารามิเตอร์ที่กำหนดไว้ล่วงหน้าของคุณ - ด้วยวิธีนี้คุณสามารถสร้างโมเดล "wrapper" ที่กำหนดไว้ล่วงหน้าได้หลายแบบ หากคุณต้องการเปลี่ยนฟังก์ชั่นของมันคุณจะต้องเปลี่ยนมันในที่เดียว

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


3

นอกจากนี้คุณยังสามารถใช้เครื่องมือการประมวลผลทางภูมิศาสตร์อย่างง่ายอย่างหนึ่งที่เรียกว่า Select เพื่อให้เวิร์กโฟลว์นี้บรรลุผลได้หากข้อกำหนด GUI ของคุณไม่ได้มีไว้สำหรับไดอะล็อกที่ถูกต้องซึ่งแสดงโดย @ blah238

ใช้หน้าต่างค้นหาเพื่อค้นหาหรือไปที่ ArcToolbox> เครื่องมือวิเคราะห์> แยกข้อมูล> เลือก

เครื่องมือเลือก (การวิเคราะห์)ช่วยให้คุณสามารถแยกคุณสมบัติโดยใช้ฟิลด์ (แอตทริบิวต์) ใด ๆ จากคลาสคุณลักษณะ

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