Używasz MultiValue w parametrach narzędzia skryptowego Python?

10

Mój skrypt działa dobrze z wybraną jedną klasą funkcji clip_fc = arcpy.GetParameter(0).

Jednak po ustawieniu clip_fc na MultiValue we właściwościach skryptu, a następnie wybraniu kilku klas elementów, pojawia się błąd „Parametry są niepoprawne.”.

Czy ktoś może mi pokazać, gdzie popełniam błąd?

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, "")
Matt
źródło
1
Czy możesz umieścić skrypt z fc_list, aby zobaczyć, jak go używasz?
om_henners,
cześć @om_henners Przepraszam, że poprawiłem swoje pytanie, teraz powinien mieć więcej sensu.
Matt

Odpowiedzi:

21

Musisz zapętlić dane wejściowe. Wielowartościowy jest rozdzielany średnikiem. Podziel się na to i przejdź przez nie. (AddMessages, aby pokazać, jak prezentowane są fcs)

import arcpy

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

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

Chociaż nie jestem do końca pewien twojego przepływu pracy. Przekazujesz wiele funkcji do zaczepienia, ale także iterujesz przez wiele funkcji w GDB? Musisz wziąć logikę, którą umieściłem powyżej i dowiedzieć się, jakiej kombinacji danych chcesz (1 lub wiele FC w GDB + 1 lub wiele danych wejściowych do twojego narzędzia)

EDYCJA ... Na podstawie komentarza chcesz wyciąć wiele klas elementów według wielu klas elementów. Spróbuj tego pomieszania kodu opartego na twoim i moim:

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
źródło
2
Oto link do plików pomocy parametru narzędzia ESRI Script Tool . Oferują także przykładowy kod.
Roy,
Dzięki @KHibma Patrząc na twoją odpowiedź Myślę, że idę do tego w niewłaściwy sposób. Mam geobazę zawierającą wiele klas obiektów i chcę przyciąć każdą klasę obiektów kilka razy przy użyciu różnych plików kształtów.
Matt
@KHibma próbował tego i dostał „clip1 nie istnieje lub nie jest obsługiwany”
Matt
Ummm, to działa dla mnie dobrze? myślę tylko o reż. Może być konieczne dodanie „.shp” na końcu swojej nazwy jako folderu, a nie gdb.
KHibma
7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Jason Scheirer
źródło