Sử dụng MultiValue trong tham số công cụ kịch bản Python?


10

Kịch bản của tôi hoạt động tốt với một lớp tính năng duy nhất được chọn cho clip_fc = arcpy.GetParameter(0).

Tuy nhiên, khi tôi đặt clip_fc thành MultiValue trong thuộc tính tập lệnh và sau đó chọn một số lớp tính năng, tôi gặp lỗi "Tham số không hợp lệ.".

Bất cứ ai có thể chỉ cho tôi nơi tôi đang đi sai?

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
Bạn có thể đưa tập lệnh với fc_list vào đó để xem bạn đang sử dụng tập lệnh đó như thế nào không?
om_henners

hi @om_henners Xin lỗi tôi đã sửa câu hỏi của mình, nên có ý nghĩa hơn bây giờ.
Matt

Câu trả lời:


21

Bạn cần phải lặp qua đầu vào của bạn. Đa giá trị được phân cách bằng dấu chấm phẩy. Tách trên đó và lặp qua chúng. (AddMessages để hiển thị cách các fcs được trình bày)

import arcpy

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

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

Mặc dù tôi không hoàn toàn chắc chắn về quy trình làm việc của bạn. Bạn đang chuyển qua nhiều tính năng để quay clip, nhưng cũng lặp lại qua nhiều tính năng trong GDB? Bạn sẽ phải lấy logic tôi đã đặt ở trên và tìm ra tổ hợp đầu vào nào bạn muốn (1 hoặc nhiều FC bên trong GDB + 1 hoặc nhiều đầu vào cho công cụ của bạn)

EDIT ... Dựa trên nhận xét của bạn, bạn muốn nhiều lớp tính năng được cắt bởi nhiều lớp tính năng. Hãy thử kết hợp mã này dựa trên mã của bạn và của tôi:

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
Đây là một liên kết đến các tệp trợ giúp tham số ESRI Script Tool . Họ cung cấp một ví dụ mã quá.
Roy

Cảm ơn @KHibma Nhìn vào câu trả lời của bạn, tôi nghĩ rằng tôi đang đi sai hướng này. Tôi có một cơ sở dữ liệu địa lý chứa một số lớp tính năng và tôi muốn cắt từng lớp tính năng nhiều lần bằng các hình dạng khác nhau.
Matt

@KHibma đã thử điều đó và nhận được 'clip1 không tồn tại hoặc không được hỗ trợ'
Matt

Ummm nó hoạt động tốt cho tôi? điều duy nhất tôi có thể nghĩ là dir đầu ra. Bạn có thể cần thêm ".shp" vào cuối tên ngoài của mình dưới dạng thư mục chứ không phải gdb.
KHibma

7
for fc in arcpy.GetParameterAsText(0).split(";"):
    arcpy.AddMessage(fc)
arcpy.AddMessage("No more shapefiles")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.