Використання параметрів інструмента сценарію Python для MultiValue?


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 Вибачте, що я виправив своє питання, маю тепер більше сенсу.
Метт

Відповіді:


21

Вам потрібно провести циклічні введення. Багатозначне значення має крапку з комою. Розділіть це і проведіть через них. (AddMessages, щоб показати, як представлені файли)

import arcpy

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

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

Хоча я не зовсім впевнений у вашому робочому процесі. Ви передаєте декілька функцій для відключення, але також повторюєте кілька функцій у GDB? Вам доведеться скористатися логікою, яку я розмістив вище, і розібратися, яку комбінацію входів ви хочете (1 або багато FC в 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 Дивлячись на вашу відповідь, я думаю, що я йду про це неправильним шляхом. У мене є база даних геоданих, що містить декілька класів функцій, і я хочу обрізати кожен клас об’єктів кілька разів, використовуючи різні файли форм.
Метт

@KHibma спробував це і отримав 'clip1 не існує або не підтримується'
Метт

Ummm, це добре працює для мене? Єдине, що я можу подумати, це вихідний реж. Можливо, вам доведеться додати ".shp" до кінця свого імені як папку, а не gdb.
Khibma

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.