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 죄송합니다 내 질문을 수정했습니다, 지금 더 이해해야합니다.
Matt

답변:


21

입력을 반복해야합니다. 다중 값은 세미콜론으로 구분됩니다. 그걸로 나누고 반복하십시오. (FC가 표시되는 방법을 보여주는 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에서 여러 기능을 반복하고 있습니까? 위에 배치 한 논리를 취하고 원하는 입력 조합 (GDB 내부에 하나 이상의 FC + 도구에 대한 하나 이상의 입력)을 파악해야합니다.

편집 ... 댓글을 기반으로 많은 피쳐 클래스에 의해 많은 피쳐 클래스가 잘립니다. 귀하와 광산을 기반으로 한이 코드 매시를 시도하십시오.

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 스크립트 도구 매개 변수 도움말 파일에 대한 링크 입니다. 코드 예제도 제공합니다.
Roy

감사합니다 @KHibma 귀하의 답변을 보면 잘못된 방향으로 가고 있다고 생각합니다. 여러 피쳐 클래스를 포함하는 지오 데이터베이스가 있고 다른 쉐이프 파일을 사용하여 각 피쳐 클래스를 여러 번 클립하고 싶습니다.
Matt

@KHibma는 그것을 시도하고 'clip1이 존재하지 않거나 지원되지 않습니다'
Matt

음, 잘 작동합니까? 내가 생각할 수있는 것은 출력 디렉토리입니다. ".shp"를 outname 끝에 gdb가 아닌 폴더로 추가해야 할 수도 있습니다.
KHibma

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.