Utilizzando MultiValue nei parametri dello strumento di script Python?


10

Il mio script funziona perfettamente con una singola classe di funzionalità selezionata per clip_fc = arcpy.GetParameter(0).

Tuttavia, quando imposto clip_fc su MultiValue nelle proprietà dello script e quindi seleziono diverse classi di funzioni, viene visualizzato un messaggio di errore "I parametri non sono validi".

Qualcuno può mostrarmi dove sto sbagliando?

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
Potresti mettere lo script con fc_list in esso per vedere come lo stai usando?
om_henners,

ciao @om_henners Mi spiace di aver corretto la mia domanda, ora dovrebbe avere più senso.
Matt

Risposte:


21

Devi passare in rassegna i tuoi input. Il multivalore è delimitato da punto e virgola. Dividi su quello e attraversali. (Aggiungi messaggi per mostrare come sono presentati i fcs)

import arcpy

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

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

Anche se non sono del tutto sicuro del tuo flusso di lavoro. Stai passando a più funzionalità per agganciarti, ma stai anche ripetendo più funzionalità in un GDB? Dovrai prendere la logica che ho posizionato sopra e capire quale combinazione di input vuoi (1 o molti FC all'interno di un GDB + 1 o molti input al tuo strumento)

MODIFICA ... In base al tuo commento, vuoi che molte classi di funzioni vengano troncate da molte classi di funzioni. Prova questo mash up di codice basato sul tuo e il mio:

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
Ecco un collegamento ai file della Guida dei parametri dello strumento di script ESRI . Offrono anche un esempio di codice.
Roy,

Grazie @KHibma Guardando la tua risposta, penso che sto andando in questo modo nel modo sbagliato. Ho un geodatabase contenente un numero di classi di caratteristiche e desidero ritagliare ogni classe di caratteristiche più volte utilizzando file di forma diversi.
Matt

@KHibma ci ha provato e ha ottenuto "clip1 non esiste o non è supportato"
Matt,

Ummm funziona bene per me? l'unica cosa che posso pensare è la directory di output. Potrebbe essere necessario aggiungere ".shp" alla fine del nome esterno come una cartella, non un gdb.
KHibma,

7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.