ArcGIS ModelBuilder에서 값 수집 출력에서 ​​데이터를 내보내시겠습니까?


11

현재 ModelBuilder를 사용하고 있습니다. 현재 가지고있는 모델의 사진을 추가했습니다.

이 모델은 현재 6 개의 shapefile을 반복하므로 각 '출력 값'에는 6 개의 그림이 포함됩니다. 이 목록에서 값을 테이블 / 텍스트 파일 또는 이와 유사한 것으로 추출하는 방법을 찾을 수 없습니다.

이것을 할 수있는 방법이 있습니까?

모델

이것은 모델을 실행 한 후 '출력 값'을 열 때 표시되는 것입니다. 여기에 이미지 설명을 입력하십시오

나는 그 6 개의 숫자를 어떻게 든 잡기 원합니다 ...


이것은 기본적으로 당신이 여기에 올바른 것과 똑같은 것입니까? gis.stackexchange.com/questions/25922/… 값 수집은 바로 그렇게합니다. 도움말을 읽으면 다른 도구에 전달할 수있는 값을 수집한다는 메시지가 표시됩니다. 그래서 당신은 그 값으로 무엇을하려고합니까? 그냥 파일에 기록합니까, 아니면 추가 처리를 위해 필요합니까?
존스

그냥 파일에 기록하고 싶습니다. 출력 값을 추출하기 위해 모델 빌더에서 출력 값을 제공하는 도구를 찾을 수 없습니다.
JPD

답변:


17

값 계산 (데이터 관리) 도구 및 일부 Python 마법을 사용하여이를 수행 할 수 있습니다 . 이 관련 질문도 참조하십시오. Arcgis 모델 빌더에 임의 코드를 추가 하시겠습니까?

다중 변수 그래서 어떤 단지 값 세미콜론으로 구분 된 문자열 multivaluesToCsv함수 아래 일은 목록으로 다중 변수를 분할 한 다음에 기록 행에 그들을 전치 CSV (쉼표로 구분 된 값) 텍스트 파일.

모델 반복자 는 반복마다 모델의 모든 프로세스를 한 번 실행합니다. 이는 마지막에 한 번만 실행하려는 값 계산 도구에는 바람직하지 않습니다. 이 작업을 수행하는 방법은 다른 내부 모델을 만들어 원본 내부 모델을 래핑하는 것입니다. 이것은 모델 내 모델 통합 도움말 항목에서 설명합니다 .

이 작업을 수행하기 위해 수행해야 할 작업은 다음과 같습니다.

내부 모델 -기능 클래스를 반복하고 처리하며 값을 수집합니다.

  1. "내부"모델이 될 원래 모델에서 다른 값 수집 도구를 추가하여 Name변수의 값 을 수집 하여 거리 통계 값을 해당 피쳐 클래스 이름에 매핑 할 수 있습니다.
  2. 입력 및 출력 변수를 모델 매개 변수로 노출하십시오 (타원을 마우스 오른쪽 단추로 클릭하고 모델 매개 변수 확인). 값 수집 도구의 각 출력과 입력 작업 공간과 같은 필요한 입력 매개 변수에 대해이 작업을 수행하십시오.
  3. 내부 모델을 저장하고 닫습니다.

외부 모델 -내부 모델을 실행하고 내부 모델이 완료되면 값 계산 도구를 한 번만 실행합니다.

  1. 새 모델을 만드십시오 – 이것이 "외부"모델이 될 것입니다.
  2. 출력 CSV 파일을 작성할 위치Folder지정할 수 있는 유형의 변수를 추가 하십시오.
  3. 출력 CSV 파일 의 이름String 을 지정할 수 있도록 유형의 변수를 추가 하십시오.
  4. 내부 모델을 새 모델에 추가합니다 (ArcToolbox에서 끌어서 놓기 또는 마우스 오른쪽 버튼으로 클릭하고 데이터 또는 도구 추가, 내부 모델을 찾은 후 추가 클릭).
  5. 입력 작업 영역과 같이 외부 모델에서 설정하려는 내부 모델의 매개 변수에 대한 변수를 작성하십시오 (내부 모델을 마우스 오른쪽 단추로 클릭하고 매개 변수에서 변수 작성을 선택하십시오).
  6. 새 모델에 값 계산 도구 추가
  7. 값 계산 도구의 해당 상자에 다음을 붙여 넣습니다.

    표현 :

    multivaluesToCsv(r"%Output CSV File Location%", "%Output CSV File Name%", "%Feature Class Names%", "%Minimum Distance Values%", "%Average Distance Values%", "%Maximum Distance Values%")
    • 이 용도 에 줄 변수 치환 함수로 모델 변수를 전달한다. 모델 변수 이름과 일치하도록 조정하십시오.
    • r전에 "%Output CSV File Location%"중요 :이이이 있음을 나타냅니다 날 문자열 ; Windows 파일 시스템 경로에는 일반적으로 백 슬래시 ( Python 의 이스케이프 문자) 가 포함되므로 Python이 백 슬래시와 후속 문자를 특수 문자 시퀀스로 잘못 해석하지 못하도록하려면이를 사용해야합니다.
    • 인라인 변수를 따옴표로 묶어야합니다. 파이썬이 없으면 문자열 대신 식별자라고 생각하기 때문입니다.

    코드 블록 :

    import os, csv
    
    def multivaluesToCsv(csvfilepath, csvfilename, fcnames, minvalues, avgvalues, maxvalues):
        ext = 'csv' # Define output file extension (e.g. csv or txt)
        header = ['FC', 'MIN', 'AVG', 'MAX'] # Define header row (column names)
    
        # Join CSV file path and name, adding extension if necessary
        csvfile = os.path.join(csvfilepath, os.extsep.join((csvfilename, ext)) if not os.path.splitext(csvfilename)[1].lower().endswith(ext) else csvfilename)
    
        # Open text file for writing
        with open(csvfile, 'wb') as f:
            w = csv.writer(f)
            w.writerow(header) # Write header row
            rows = zip(*map(lambda x: x.split(';'), [fcnames, minvalues, avgvalues, maxvalues])) # Transpose the semicolon-delimited values into rows
            w.writerows(rows)
        return csvfile
    
  8. (선택 사항) 모델의 도구 대화 상자에서 변수를 실행하거나 다른 모델 / 스크립트와 함께 연결하려면 입력 및 출력 변수를 모델 매개 변수로 노출하십시오. 외부 모델의 유일한 출력은 CSV 파일입니다.

  9. (선택 사항) 입력 변수 및 내부 모델 출력을 전제 조건으로 값 계산 도구에 연결하십시오. 나는 이것이 실제로 아무런 영향을 미치지 않는다고 생각합니다. 진행 상황에 대해 시각적으로 더 명확하게 만듭니다.

ModelBuilder로 이것을 테스트하고 작동 시켰습니다 (스크린 샷 참조).

내부 모델 : 내부 모델

외부 모델 : 외부 모델

내부 모델은 피쳐 클래스 당 한 번씩 모든 프로세스를 실행 한 다음 값 계산 도구가 끝에 한 번 실행되어 CSV 파일을 한 번만 출력합니다.


답장을 보내 주셔서 감사 드리며 답장을 보내 주셔서 감사합니다. 설명 한대로 모델을 실행하려고하는데 CSV에 문제가 있습니다. Excel에서 빈 CSV 파일을 만들어 저장 한 다음 모델에로드했습니다. ERROR 000539 : 식 실행 오류 : multivaluesToCsv (r "% CSV File %", "% FC Name Values ​​%", "% Minimum Values ​​%", "% Average Values ​​%", "% Maximum Values ​​%") <type 'exceptions .IOError '> : [Errno 13] 권한 거부 : u'% CSV File % '실행에 실패했습니다 (값 계산). 이 오류가 계속 발생합니다. 내 CSV는 CSVFile.csv입니다.
JPD

1
방금 수정했습니다. 이것은 완벽한 솔루션입니다. 도와 주셔서 감사합니다!
JPD

파이썬 코드는 미리 CSV 파일을 만들지 않아도됩니다. 지금까지 본 것처럼 Excel에서 파일을 열면 파일이 잠기고 닫을 때까지 Python에서 파일을 쓸 수 없습니다.
blah238

2
참고로 중첩 된 모델을 사용하여 계산 값이 여러 번 실행되는 것을 피하고 텍스트 파일이 미리 존재해야했던 문제를 해결하기 위해 지침과 스크린 샷을 업데이트했습니다 (이제 출력 위치와 파일 이름을 두 개의 별도 매개 변수로 지정하십시오).
blah238

훌륭한 답변! Geostatistical Layer Cross Validation 통계를 csv 파일로 출력하는 비슷한 문제를 해결하는 데 도움이되었습니다. 감사합니다 @ blah238!
Cotton.Rockwood

1

모델이 설명하는 출력은 단순히 속성 테이블에서 업데이트 된 값입니까? 업데이트 된 shapefile과 관련된 .dbf 파일을 열 수 없습니까?

이를 실패하면 테이블 선택 (Analysis Tools> 추출)이 SQL 쿼리와 함께 작동해야합니다.


답장을 보내 주셔서 감사합니다. 각 shapefile의 .dbf 파일을 업데이트하지 않을까 걱정됩니다. '최소 / 평균 / 최대 거리'또는 '출력 값'을 도구의 입력으로 연결할 수 없으므로 모델 작성기에 '테이블 선택'을 추가해도 작동하지 않습니다.
JPD
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.