ArcGIS Field Calculator의 Python Parser에서 기본 If / Then?


18

데스크톱 용 ArcGIS 10.2를 사용하고 있는데이 사이트를 살펴본 결과 아직 답을 찾지 못하는 것 같습니다. VBA 및 Python에 매우 익숙하지만 ArcGIS를 사용하면 수년이 걸립니다. Select By Attributes 로이 작업을 느리게 수행 할 수는 있지만 시간이 많이 걸립니다.

질병의 사례 (포인트 레이어)와 미국 인구 조사 구역 (다각형 레이어) 사이의 공간 결합을 시도하고 있습니다. 카운트 데이터가 필요합니다. 각 포인트 / 사례마다 사건이 발생한 연도에 따라 2001 년에서 2012 년까지의 기간이있는 YEAR 필드가 있습니다. 매년 카운트 열이 필요합니다. 예를 들어, COUNT01이라고 부르는 첫 번째입니다. YEAR의 케이스 날짜가 2001 인 경우 COUNT01에 1이 있습니다. 다른 연도 (2002-2012) 인 경우 0이 필요합니다. COUNT02, COUNT03 ... COUNT12 개의 열이 있습니다. "널"값을 가질 수 없습니다.

지금까지 시도한 내용은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

그리고 여기 아크에서 데이터가 어떻게 생겼는지가 있습니다.

여기에 이미지 설명을 입력하십시오


3
파이썬을 사용 하여이 작업을 수행 vba하고 vbscript태그를 태그 로 대체하도록 질문을 편집하는 것이 좋습니다 python. 아직 사라지지 않았지만 VBScript는 더 이상 사용되지 않습니다 . 실제 입력 및 예상 출력을 보여주는 샘플 행의 그림 / 테이블을 포함하는보다 자세한 설명을 제공하면 Python 파서로 쉽게 할 수있을 것으로 기대합니다. YEAR는 연도에 해당하는 값을 포함하는 날짜 필드 또는 정수 필드입니까?
PolyGeo

조언과 도움에 감사드립니다. 속성 테이블의 이미지를 추가했습니다. YEAR 입력 변수는 현재 Double (SAS Date에서 구문 분석 됨)로 저장되며 출력 변수 열 Counts01은 Short Integer로 저장됩니다.
BenW

1
사례 필드로 YEAR를 사용하여 요약 통계 사용을 고려 했습니까 ? 파이썬이나 필드 계산기를 사용할 필요없이 매년 COUNT를 제공해야합니다.
PolyGeo

조언 해 주셔서 감사합니다. 요약 통계를 고려했지만 최종 목표는 100k 당 연간 및 10 년 평균 발생률을 계산할 수있는 1,249 개의 개별 인구 조사당 연간 사례 수를 갖는 것입니다. 일부 인구 조사로는 사례가 없었으며 일부는 톤이 있었지만 모두 포함시켜야합니다. 연도별로 요로를 요약하는 것조차도 사례없이 278 개의 구역을 생략합니다.
BenW

답변:


38

나는 이것이 당신이 원하는 것이라고 생각합니다 .... 파이썬을 사용하면 다음을 수행 할 수 있습니다 (YEAR 및 COUNT0X 필드는 정수라고 가정합니다)

  • 아래 강조 표시된대로 Python으로 변경
  • 'Pre Logic'입력 상자에 코드 추가
  • 계산하는 각 필드에 대해 yearVal을 변경하십시오 (Count01은 2001을 사용하고 Count02는 2002를 사용하는 등).

참고 들여 쓰기를 사용하여 코드를 구문 분석하여 간격이 올바른지 확인하십시오.

def myCalc(year,yearVal):
  if (year == yearVal):
    return 1
  else:
    return 0

이


3
@BenW-문제가 해결되면이를 답변으로 표시하십시오 (답 투표 수 아래의 확인란).
채드 쿠퍼

강조된 문자가 포함 된 if 문에서 문자열 값을 확인하려면 어떻게해야합니까?
greyline

필드가 text, double 등과 같은 다른 유형 인 경우 어떻게해야합니까?
khaliff

@khaliff는 파이썬 코드에 형식 변환 함수를 삽입 할 수 if (int(year) == yearVal): 있습니다 ( 예 : infoit.com/articles/article.aspx?p=459269&seqNum=7 참조 ).
gisnside

감사합니다. myCalc, myFunc, Reclass 등을 언제 사용해야하는지 알 수있는 링크가 있습니까?
khaliff

8

이 답변은 본질적으로 위에 나열된 것과 동일하지만 Count01 필드의 경우 코드 블록을 사용할 필요가 없습니다. Count01 필드의 경우 파서를 Python으로 설정 한 다음 계산을

1 if !YEAR! == 2001 else 0

읽는 방법은 다음과 같습니다. YEAR 필드가 2001이면 필드를 1로 설정하고, 2001이 아닌 경우 0으로 설정하십시오.

if 조건이 여러 개인 경우 else 문 내에 두 번째 (및 후속) "if"조건을 중첩시킬 수 있습니다.

1 if !YEAR! == 2001 else (2 if !YEAR! == 2002 else 0)

읽는 방법은 다음과 같습니다 .YEAR 필드가 2001 인 경우 필드를 1로 설정하고, 2001이 아닌 경우 2002로 설정 한 경우 2로 설정하고 그렇지 않은 경우 0으로 설정하십시오.


둘 이상의 조건이있는 경우이 계산을 어떻게 수정해야합니까? 마치 "elif"를 사용하는 것처럼 의미합니까?
khaliff

조건이 둘 이상인 경우 else 문 내에 두 번째 (및 후속) "if"조건을 중첩 할 수 있습니다. 따라서 다음과 같은 결과가 나타날 수 있습니다.1 if !YEAR! == 2001 else (2 if !YEAR! == 2002 else (3 if !YEAR! == 2003 else 0))
Jason Miller

6

VBScript를 사용하려는 경우 필드 계산이 잘못 설정되었습니다. 먼저 필드의 이름 인 변수를 사용하지 않을 것입니다. 혼란스럽고 다른 이름을 사용하므로 설정 한 내용이 명확합니다. "endif"가 잘못되었습니다. "end if"이고 코드는 사전 논리 스크립트 섹션에 있어야합니다. 올바른 설정 방법은 다음과 같습니다. 그러나 다른 사람들이 말했듯이 ESRI가 파이썬을 위해 그것을 없애기 위해 지옥에 구부러지기 때문에 VBScript를 사용하지 마십시오.

정확한 필드 계산기 사용법


도와 주셔서 감사합니다. 나는 전반적인 합의 인 것처럼 파이썬으로 끝났습니다.
BenW
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.