Menggunakan MultiValue dalam parameter alat skrip Python?

10

Skrip saya berfungsi dengan baik dengan satu kelas fitur yang dipilih untuk clip_fc = arcpy.GetParameter(0).

Namun ketika saya mengatur clip_fc ke MultiValue di properti skrip dan kemudian memilih beberapa kelas fitur, saya mendapatkan kesalahan "Parameter tidak valid.".

Adakah yang bisa menunjukkan kepada saya di mana saya salah?

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, "")
Mat
sumber
1
Bisakah Anda memasang skrip dengan fc_list di dalamnya untuk melihat bagaimana Anda menggunakannya?
om_henners
hai @om_henners Maaf saya memperbaiki pertanyaan saya, seharusnya lebih masuk akal sekarang.
Mat

Jawaban:

21

Anda perlu mengulang-ulang input Anda. Multivalue dibatasi titik koma. Membagi itu dan loop melalui mereka. (AddMessages untuk menunjukkan bagaimana fcs disajikan)

import arcpy

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

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

Meskipun saya tidak sepenuhnya yakin dengan alur kerja Anda. Anda mengirim banyak fitur untuk klip, tetapi juga mengulangi beberapa fitur dalam GDB? Anda harus mengambil logika yang saya tempatkan di atas dan mencari tahu kombinasi input apa yang Anda inginkan (1 atau banyak FC di dalam GDB + 1 atau banyak input ke alat Anda)

Sunting ... Berdasarkan komentar Anda, Anda ingin banyak kelas fitur yang dipotong oleh banyak kelas fitur. Coba tumbuk kode ini berdasarkan milik Anda dan milik saya:

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, "")
KHibma
sumber
2
Berikut ini tautan ke File Bantuan Parameter Skrip Alat ESRI . Mereka menawarkan contoh kode juga.
Roy
Terima kasih @ Khibma Melihat jawaban Anda, saya pikir saya salah tentang hal ini. Saya memiliki geodatabase yang berisi sejumlah kelas fitur, dan saya ingin klip setiap kelas fitur beberapa kali menggunakan shapefile yang berbeda.
Mat
@ Khibma mencobanya dan mendapat 'clip1 tidak ada atau tidak didukung'
Matt
Ummm itu bekerja dengan baik untukku? Satu-satunya hal yang bisa saya pikirkan adalah dir output. Anda mungkin perlu menambahkan ".shp" di akhir nama Anda sebagai folder, bukan gdb.
KHibma
7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Jason Scheirer
sumber