ใช้ MultiValue ในพารามิเตอร์เครื่องมือสคริปต์ Python หรือไม่


10

clip_fc = arcpy.GetParameter(0)สคริปต์ของฉันทำงานได้ดีกับชั้นคุณลักษณะเดียวเลือกสำหรับ

อย่างไรก็ตามเมื่อฉันตั้ง clip_fc เป็น MultiValue ในคุณสมบัติของสคริปต์และจากนั้นเลือกคุณสมบัติหลายชั้นฉันได้รับข้อผิดพลาด "พารามิเตอร์ไม่ถูกต้อง"

ทุกคนสามารถแสดงให้ฉันเห็นว่าฉันกำลังจะไปไหนผิดหรือเปล่า?

import arcpy
import os.path
from arcpy import env

arcpy.env.workspace = r"C:\GIS Home\project_1\clipshps\Combined_mf.gdb"
arcpy.env.overwriteOutput = True
clip_fc = arcpy.GetParameter(0)
clip_name = str(clip_fc)
output_dir = r"C:\GIS Home\project_1\clipshps\outputs_clip"

for fds in arcpy.ListDatasets():
    for fc in arcpy.ListFeatureClasses('','',fds):
        out = os.path.join(output_dir, fc + "_" + clip_name[40:] + "_clip.shp")
        arcpy.Clip_analysis(fc, clip_fc, out, "")

1
คุณสามารถวางสคริปต์พร้อม fc_list ไว้ในสคริปต์เพื่อดูว่าคุณใช้งานอย่างไร
om_henners

สวัสดี @om_henners ขออภัยฉันแก้ไขคำถามของฉันแล้ว
แมตต์

ที่เกี่ยวข้อง: gis.stackexchange.com/questions/9406/…
Roy

คำตอบ:


21

คุณต้องวนซ้ำอินพุตของคุณ หลายค่ามีการคั่นด้วยเครื่องหมายอัฒภาค แยกที่และวนรอบพวกเขา (AddMessages เพื่อแสดงวิธีการนำเสนอ fcs)

import arcpy

ins = arcpy.GetParameterAsText(0)
arcpy.AddMessage(ins)

for fc in ins.split(';'):
    arcpy.AddMessage(fc)
    arcpy.Clip_analysis(fc, clipfeats, out)

แม้ว่าฉันจะไม่แน่ใจในกระบวนการทำงานของคุณ คุณกำลังส่งผ่านคุณลักษณะหลายอย่างที่จะตัดต่อ แต่ยังวนซ้ำคุณลักษณะหลายอย่างใน GDB หรือไม่ คุณจะต้องใช้ตรรกะที่ฉันวางไว้ด้านบนและหาว่าชุดข้อมูลเข้าแบบใดที่คุณต้องการ (FC 1 หรือหลาย ๆ ตัวใน GDB + 1 หรืออินพุตจำนวนมากไปยังเครื่องมือของคุณ)

แก้ไข ... ตามความคิดเห็นของคุณคุณต้องการให้คลาสของสถานที่หลายแห่งถูกตัดโดยชั้นเรียนที่มีหลายแห่ง ลองใช้โค้ดที่คลาดเคลื่อนตามคุณและของฉัน:

import arcpy, os

ins = arcpy.GetParameterAsText(0)
arcpy.AddMessage(ins)

arcpy.env.workspace = r"C:\GIS Home\project_1\clipshps\Combined_mf.gdb"
output_dir = r"C:\GIS Home\project_1\clipshps\outputs_clip"


for fds in arcpy.ListDatasets():

    # will loop for every featureclass
    for fc in arcpy.ListFeatureClasses('','',fds):            

        # will loop for each input fc from the tool
        for fc_clip in ins.split(';'):
            outName = os.path.join(output_dir, str(os.path.basename(fc)) + "_" + str(os.path.basename(fc_clip)))
            arcpy.Clip_analysis(fc, fc_clip, outName, "")

2
นี่คือการเชื่อมโยงไป ESRI เครื่องมือสคริปต์พารามิเตอร์ไฟล์ช่วยเหลือ พวกเขาเสนอตัวอย่างรหัสด้วย
รอย

ขอบคุณ @KHibma ดูคำตอบของคุณฉันคิดว่าฉันกำลังจะไปในทางที่ผิด ฉันมีฐานข้อมูลภูมิศาสตร์ที่มีคลาสของฟีเจอร์จำนวนหนึ่งและฉันต้องการคลิปคลาสแต่ละฟีเจอร์หลาย ๆ ครั้งโดยใช้รูปร่างที่แตกต่างกัน
Matt

@KHibma ลองและได้รับ 'clip1 ไม่มีอยู่จริงหรือไม่ได้รับการสนับสนุน'
Matt

อืมมันใช้ได้ดีสำหรับฉัน สิ่งเดียวที่ฉันคิดได้ก็คือเอาท์พุท dir คุณอาจต้องเพิ่ม ".shp" ที่ท้ายชื่อ outname เป็นโฟลเดอร์ไม่ใช่ gdb
KHibma

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