QGIS 필드 계산기의 조건문 구문


12

수정해야 할 shapefile이 있습니다. "A", "B"및 "C"속성이있는 "CLASS"열이 하나 있습니다. "A"를 "1"로, "B"를 "2"로, "C"를 "3"으로 변경해야합니다. 나는 case when기능으로 그것을 시도했다 . 하나의 경우 문제가 아니지만 3 행에서 어떻게 작동합니까?

FieldCalculator함수 를 사용하여 모델을 빌드 할 수도 있습니까?


내가 알아 낸 것 같아! 이게 옳은 거니?

CASE
  WHEN "VSt_K" IS 'E' THEN '5'
  WHEN "VSt_K" IS 'A' THEN '1'
  WHEN "VSt_K" IS 'B' THEN '2'
  WHEN "VSt_K" IS 'C' THEN '3'
END

하지만 모델러 FieldCalculator함수 에서는 이것을 사용할 수 없습니다 ...

답변:


14

문자열 유형 의 필드를 계산하는 경우 올바른 구문입니다.

CASE 
  WHEN "VSt_K" = 'A' THEN '1'
  WHEN "VSt_K" = 'B' THEN '2'
  WHEN "VSt_K" = 'C' THEN '3'
END

대신 정수 유형 인 경우 :

CASE 
  WHEN "VSt_K" = 'A' THEN 1
  WHEN "VSt_K" = 'B' THEN 2
  WHEN "VSt_K" = 'C' THEN 3
END

편집하다

Advanced Python Field CalculatorProcessing Toolbox 의 구문은 표준 QGIS 필드 계산기 의 구문과 다릅니다. 따라서 Python을 사용하여 조건식을 작성해야합니다.

글로벌 표현 :

def getValue(x):
    if x == 'A':
        value = '1'
    elif x == 'B':
        value = '2'
    elif x == 'C':
        value = '3'
    # ...and so on
    return value

공식:

value = getValue( <VSt_K> )

참고 :Advanced Python Field Calculator Modeler 에서 in 을 사용할 수 있지만이 알고리즘을 사용할 때 필드를 입력 매개 변수로 사용할 수 없으므로 소스 필드를 공식에 직접 지정해야합니다. 또는 기본 공식을 포함하는 입력 문자열 매개 변수를 정의 할 수 있습니다. 모델을 실행할 때 결과적으로 수식 입력 매개 변수에서 소스 필드를 변경하여 모델을 다른 데이터와 완벽하게 재사용 할 수 있습니다.


감사합니다, 작동합니다! 그러나 모델러에서 필드 계산기 (표시된 구문)를 사용하는 방법도 알고 있습니까?
Pimpel

답변에 자세한 내용을 추가하여 수행 방법을 설명했습니다. 도움이 되었기를 바랍니다.
Antonio Falciano

감사합니다! 시도했지만 작은 문제가 하나 있습니다. 이제 "C"가 "3"으로 변경되었습니다. 'elif x =='D ': value ='4 '문자열을 추가하면 "D"만 "4"로 변경됩니다.
Pimpel

처음부터 새 필드를 계산하면 예상대로 작동합니다.
Antonio Falciano

왜 그런지 모르겠지만 Im 지금 모델을 실행하면 (아무것도 변경하지 않음) 다음과 같이 표시됩니다. ... return value, FORMULA = value = getValue () 실패 알고리즘을 실행하는 동안 오류가 발생했습니다.
Pimpel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.