Cú pháp của câu lệnh có điều kiện trong (các) Máy tính Trường QGIS


12

Tôi có một shapefile mà tôi cần phải sửa đổi. Có một cột "LỚP" với các thuộc tính: "A", "B" và "C". Tôi cần thay đổi "A" thành "1", "B" thành "2" và "C" thành "3". Tôi đã thử nó với case whenchức năng. Với một trường hợp, đó không phải là vấn đề nhưng làm thế nào để nó hoạt động với 3 hàng liên tiếp?

Có phải cũng có thể xây dựng một mô hình với FieldCalculatorchức năng?


Tôi đoán tôi đã tìm ra nó! Thê nay đung không?

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

Nhưng tôi không thể sử dụng FieldCalculatorchức năng này trong chức năng tạo mô hình ...

Câu trả lời:


14

Nếu bạn đang tính toán một trường kiểu String , đây là cú pháp đúng:

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

Thay vào đó, nếu đó là kiểu Integer :

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

BIÊN TẬP

Cú pháp của Advanced Python Field CalculatorHộp công cụ xử lý khác với cú pháp của máy tính Trường QGIS tiêu chuẩn. Vì vậy, bạn nên viết các biểu thức điều kiện bằng Python:

Biểu hiện toàn cầu:

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

Công thức:

value = getValue( <VSt_K> )

Lưu ý: có thể sử dụng Trình Advanced Python Field Calculatortạo mô hình, tuy nhiên bạn phải chỉ định (các) trường nguồn trực tiếp trong công thức của nó, vì các trường không thể được sử dụng làm tham số đầu vào khi sử dụng thuật toán này. Ngoài ra, bạn có thể xác định tham số Chuỗi đầu vào có chứa công thức mặc định. Khi bạn chạy mô hình, cuối cùng bạn có thể thay đổi (các) trường nguồn trong tham số đầu vào Công thức, do đó làm cho mô hình có thể tái sử dụng hoàn hảo với các dữ liệu khác.


Cảm ơn bạn, nó hoạt động! Nhưng bạn có biết làm thế nào tôi có thể sử dụng máy tính trường (với cú pháp được hiển thị) trong trình tạo mô hình không?
Pimpel

Tôi đã thêm chi tiết trong câu trả lời, giải thích cách thực hiện. Hi vọng điêu nay co ich.
Antonio Falciano

Cảm ơn bạn! Tôi đã thử nhưng có một vấn đề nhỏ. Bây giờ kết quả là tôi chỉ thay đổi "C" thành "3". Khi tôi thêm chuỗi 'elif x ==' D ': value =' 4 ', tôi chỉ nhận được "D" thay đổi thành "4".
Pimpel

Nếu bạn tính toán một trường mới từ đầu, nó sẽ hoạt động như mong đợi.
Antonio Falciano

Tôi không biết tại sao nhưng khi tôi chạy mô hình của mình bây giờ (không thay đổi gì) thì nó báo: ... return value, FORMULA = value = getValue () Lỗi không thực hiện thuật toán 0 biến cục bộ 'value' được tham chiếu trước khi gán Xem nhật ký để biết thêm chi tiết
Pimpel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.