ไวยากรณ์ของข้อความสั่งแบบมีเงื่อนไขใน QGIS Field Calculator (s)


12

ฉันมีรูปร่างไฟล์ที่ฉันต้องแก้ไข มีหนึ่งคอลัมน์ "CLASS" พร้อมแอตทริบิวต์: "A", "B" และ "C" ฉันต้องเปลี่ยน "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 Calculatorเครื่องมือประมวลผลในนั้นแตกต่างจากเครื่องคิดเลข QGIS Field มาตรฐาน ดังนั้นคุณควรเขียนนิพจน์เงื่อนไขของคุณโดยใช้ 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 Calculatorin Modeler แต่คุณต้องระบุฟิลด์แหล่งที่มาโดยตรงในสูตรของมันเนื่องจากไม่สามารถใช้ฟิลด์เป็นพารามิเตอร์อินพุตเมื่อใช้อัลกอริทึมนี้ หรือคุณสามารถกำหนดพารามิเตอร์อินพุตสตริงที่มีสูตรเริ่มต้น เมื่อคุณเรียกใช้แบบจำลองในที่สุดคุณสามารถเปลี่ยนฟิลด์แหล่งที่มาในพารามิเตอร์อินพุตสูตรดังนั้นทำให้โมเดลสามารถนำมาใช้ซ้ำกับข้อมูลอื่นได้อย่างสมบูรณ์แบบ


ขอบคุณมันใช้งานได้! แต่คุณรู้หรือไม่ว่าฉันสามารถใช้เครื่องคำนวณภาคสนาม (ด้วยไวยากรณ์ที่แสดง) ในตัวสร้างโมเดลได้อย่างไร
Pimpel

ฉันได้เพิ่มรายละเอียดเพิ่มเติมในคำตอบอธิบายวิธีการทำ หวังว่านี่จะช่วยได้
Antonio Falciano

ขอบคุณ! ฉันพยายาม แต่มีปัญหาเล็กน้อยหนึ่งอย่าง ตอนนี้ผลคือฉันเพิ่งได้ "C" เปลี่ยนเป็น "3" เมื่อฉันเพิ่มสตริง 'elif x ==' D ': value =' 4 'ฉันจะได้รับ "D" เปลี่ยนเป็น "4" เท่านั้น
Pimpel

หากคุณคำนวณเขตข้อมูลใหม่ตั้งแต่เริ่มต้นศูนย์ควรทำงานได้ตามที่คาดไว้
Antonio Falciano

ฉันไม่รู้ว่าทำไม แต่เมื่อฉันใช้งานโมเดลตอนนี้ (ไม่ได้เปลี่ยนอะไรเลย) มันบอกว่า: ... ค่าส่งคืน, FORMULA = value = getValue () ล้มเหลวข้อผิดพลาดในการดำเนินการอัลกอริทึม 0 ค่าตัวแปรท้องถิ่น 'อ้างอิง'
Pimpel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.