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.