Utilisation de MultiValue dans les paramètres de l'outil de script Python?

10

Mon script fonctionne correctement avec une seule classe d'entités sélectionnée pour clip_fc = arcpy.GetParameter(0).

Cependant, lorsque j'ai défini clip_fc sur MultiValue dans les propriétés du script, puis que j'ai sélectionné plusieurs classes d'entités, j'obtiens une erreur «Les paramètres ne sont pas valides».

Quelqu'un peut-il me montrer où je me trompe?

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
la source
1
Pourriez-vous mettre en place le script avec fc_list pour voir comment vous l'utilisez?
om_henners
salut @om_henners Désolé d'avoir corrigé ma question, cela devrait avoir plus de sens maintenant.
Matt

Réponses:

21

Vous devez parcourir vos entrées. Les valeurs multiples sont délimitées par des points-virgules. Séparez-les et parcourez-les. (AddMessages pour montrer comment les fcs sont présentés)

import arcpy

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

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

Bien que je ne sois pas entièrement sûr de votre flux de travail. Vous passez plusieurs fonctionnalités à clipser, mais vous parcourez également plusieurs fonctionnalités dans un GDB? Vous devrez prendre la logique que j'ai placée ci-dessus et déterminer quelle combinaison d'entrées vous voulez (1 ou plusieurs FC à l'intérieur d'un GDB + 1 ou plusieurs entrées pour votre outil)

EDIT ... Sur la base de votre commentaire, vous souhaitez que de nombreuses classes d'entités soient coupées par de nombreuses classes d'entités. Essayez ce mélange de code basé sur le vôtre et le mien:

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
la source
2
Voici un lien vers les fichiers d'aide des paramètres de l'outil de script ESRI . Ils offrent également un exemple de code.
Roy
Merci @KHibma En regardant votre réponse, je pense que j'y vais mal. J'ai une géodatabase contenant un certain nombre de classes d'entités et je souhaite découper chaque classe d'entités plusieurs fois à l'aide de différents fichiers de formes.
Matt
@KHibma a essayé cela et a obtenu 'clip1 n'existe pas ou n'est pas pris en charge'
Matt
Ummm ça marche bien pour moi? la seule chose que je peux penser est le répertoire de sortie. Vous devrez peut-être ajouter ".shp" à la fin de votre nom extérieur en tant que dossier, et non gdb.
KHibma
7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Jason Scheirer
la source