Công cụ Refactor Field theo lô là gì Cú pháp ánh xạ trường trong cú pháp trong QGIS?


10

Trong QGIS, có công cụ "Trường tái cấu trúc" tuyệt vời này trong Hộp công cụ xử lý:

Công cụ tái cấu trúc trường

Sử dụng nó trên một lớp duy nhất khá đơn giản.

Tuy nhiên, khi bạn có kế hoạch sử dụng nó trong chế độ hàng loạt, người ta có thể thấy hộp văn bản " Ánh xạ trường" . Tôi đang tìm một ví dụ về cú pháp được sử dụng ở đó . Tôi chưa tìm thấy tài liệu cụ thể nào.

Tái cấu trúc theo đợt


Sau khi chạy tái cấu trúc từ GUI, bạn có thể xem lệnh trong menu Xử lý -> Lịch sử (Ctrl + Alt + H)
kadarivan

Câu trả lời:


7

Nó không phải là rất thoải mái để làm, nhưng sau đây là cú pháp cần thiết cho hộp văn bản đó (tôi viết nó trong một vài dòng chỉ vì mục đích rõ ràng):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Ví dụ: (remeber để sử dụng dấu ngoặc nhọn):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Bạn cần viết nhiều dòng như trên như số trường nhập, được phân tách bằng dấu phẩy. Ví dụ: nếu lớp của bạn chứa ba trường:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

và nó nên hoạt động (nó làm việc cho tôi).

Xin lưu ý rằng bạn có thể tránh sử dụng cú pháp hướng từ điển này và trực tiếp sử dụng các giá trị bắt buộc. Ví dụ: với tham chiếu đến ví dụ đầu tiên, bạn có thể chỉ cần sử dụng:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Nếu bạn không sử dụng cú pháp này, lỗi sau sẽ được hiển thị:

Thiếu giá trị tham số: Ánh xạ trường (hàng 1)


2
Bạn có thể giải thích <mã của loại> nghĩa là gì không? Tôi đã thử sử dụng 3 giả sử nó là chuỗi (vì nó là thứ 3 trong các tùy chọn thả xuống) nhưng tôi gặp lỗi: đối tượng 'int' không có thuộc tính ' getItem ' Xem nhật ký để biết thêm chi tiết. Mã tôi đã sử dụng là: {u '"FLAG"', 0, 3, u'FLAG ', 0} cho một trong các lớp của tôi trong đó {' biểu thức ': u' "FLAG" ',' length ': 0,' loại ': 3,' tên ': u'FLAG', 'chính xác': 0}.
JAT86

@ JAT86 Đây là số xác định kiểu dữ liệu (ví dụ int, chuỗi, v.v.). Thật không may, tôi đã không tìm thấy một tài liệu tham khảo cho họ, nhưng tôi nên nhớ các giá trị cho các loại được sử dụng nhiều nhất: 2 cho int, 6 cho double và 10 cho chuỗi. Ngoài ra, có lẽ bạn không nên chỉ định 0chiều dài trường (ít nhất là 1!). Xin vui lòng, cho tôi biết nếu bạn giải quyết vấn đề.
mgri

Cảm ơn đã phản ứng kịp thời. Có lẽ việc xử lý hàng loạt phức tạp hơn tôi nghĩ. Tôi đã thử sử dụng ít nhất 1 cho độ dài và 10 cho loại mã: {u '"FLAG"', 1, 10, u'FLAG ', 0} Tuy nhiên, lỗi hiển thị: đối tượng' int 'không có thuộc tính' getItem 'Xem nhật ký để biết thêm chi tiết. Lớp của tôi có các thuộc tính sau: tên: cờ, Loại: chuỗi, Độ dài: 0, Chính xác: 0, Biểu thức: "cờ"
JAT86

@ JAT86 Việc chạy công cụ từ GUI có gây ra vấn đề gì không?
mgri

Nếu bằng GUI, bạn có nghĩa là một lớp duy nhất, không có nó không có vấn đề gì. Cột FLAG đã bị xóa thành công khi "nhấp vào Xóa trường đã chọn" và được lưu vào lớp mới "Tái cấu trúc".
JAT86

2

Có một thuật toán tương tự như thuật toán này có giao diện đơn giản hóa quy trình hàng loạt tốt hơn.

nhập mô tả hình ảnh ở đây


1
Tiếng Anh Tiếng Anh
BERA

Bản dịch tiếng Anh cho mục menu trong câu hỏi là "Thêm trường vào bảng thuộc tính"
J. Taylor
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.