Lưu phương trình được sử dụng trong Máy tính trường QGIS?


9

Tôi đang cố gắng tính các giá trị nhất định của một điểm mới được tính toán. Vì vậy, tôi sử dụng máy tính trường để viết một phương trình để xác định các giá trị.

Có cách nào để lưu phương trình đó, để nếu và khi tôi bắt đầu một công việc mới, tôi không phải gõ lại nó?

Một cái gì đó tương tự như cách bạn lưu các kiểu và ký hiệu cho một loạt các điểm.


Đó là một yêu cầu tính năng tốt và sẽ khá dễ dàng để thêm.
Nathan W

Câu trả lời:


5

QGIS lưu phương trình cuối cùng được sử dụng trong máy tính trường trong tab "Recent" nơi bạn có thể sử dụng lại nó bằng cách nhấp đúp vào nó

img của lĩnh vực calc


Điều đó đúng trong trường hợp OP không sử dụng các phương trình khác sau này. Nhưng nó sẽ biến mất theo thời gian khi OP sử dụng các phương trình mới. Các Recentcontainer chỉ là tạm thời.
ahmadhanb

5

Bạn có thể viết phương trình của mình trong một hàm mới, và sau đó bạn sẽ chỉ phải gọi hàm để áp dụng lại tính toán.

Mở máy tính trường, bấm vào Function Editortab, new filesau đó chỉnh sửa chức năng. Chọn load. Lưu ý rằng oksẽ không có sẵn tại thời điểm này.

Quay trở lại Expressiontab, chọn customnhóm chức năng và nhấp đúp chuột vào chức năng của bạn. Chọn trường cần cập nhật và nhấn ok.


Nếu bạn muốn chỉ sử dụng các giá trị trường và hằng số, bạn có thể chỉnh sửa chữ ký hàm mặc định, bắt đầu bằng value1. Trong ví dụ của tôi, tôi đã loại bỏ nó, nhưng bạn có thể sử dụng (các) trường này để truyền các đối số mới.

Sau đó, bạn có thể truy cập các giá trị trường tính năng bằng cách sử dụng feature["fieldName"].... hãy cẩn thận để gọi hàm này chỉ trên các lớp có chứa các trường đã nói!

@qgsfunction(args='auto', group='Custom')
def funcTestCalc( feature, parent):
    return feature["fieldA"]+feature["fieldB"];

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


3

Ngoài ra với giải pháp của @LaughU, bạn có thể kết hợp bất kỳ thao tác máy tính trường nào vào mô hình đồ họa, sau đó lưu và chạy mô hình. Điều này nhưng yêu cầu tên cột của bạn luôn giống nhau.


2

Nếu bạn đang thêm một điểm mới vào một lớp hiện có và bạn muốn chạy cùng một phép tính cho điểm đó như với tất cả các điểm khác, thì đây là hai tính năng hữu ích:

Trường ảo

Một trường ảo tự động tính toán một biểu thức cho mọi thuộc tính mới. Nó cũng được cập nhật thường xuyên. Vì vậy, ví dụ, đối với một trường ảo gọi là "vĩ độ", bạn có thể sử dụng biểu thức $y.

Ưu và nhược điểm của trường ảo:

  • Bất cứ khi nào bạn thêm một điểm mới, nó sẽ tự động có đầu ra của biểu thức được thêm vào trường này.
  • Tự động cập nhật bất cứ khi nào biểu thức đưa ra thay đổi. Vì vậy, nếu bạn di chuyển điểm trong ví dụ, giá trị "vĩ độ" sẽ tự động thay đổi.
  • Bạn không thể chỉnh sửa giá trị trường ảo.
  • Các trường ảo được lưu dưới dạng một phần của tệp dự án QGIS, không phải là một phần của shapefile (hoặc bất kỳ định dạng nào mà lớp của bạn đang ở). Vì vậy, nếu bạn mở lớp trong một dự án khác, nó sẽ không có các trường ảo.

Trường thông thường với giá trị trường mặc định

Bạn có thể thiết lập một trường để có giá trị mặc định dựa trên biểu thức. Khi bạn tạo một điểm mới, thuộc tính của nó sẽ được tự động điền với giá trị mặc định. Bạn có thể thay đổi giá trị thuộc tính. Nó không được cập nhật tự động. *

Ưu và nhược điểm của các giá trị trường mặc định:

  • Bất cứ khi nào bạn thêm một điểm mới, nó sẽ tự động có đầu ra của biểu thức được thêm vào trường này.
  • Không tự động cập nhật. Trong ví dụ này có nghĩa là nếu bạn di chuyển một điểm hiện có, giá trị "vĩ độ" của nó sẽ không được cập nhật.
  • Bạn có thể thay đổi giá trị của lĩnh vực này.
  • Được lưu như một phần của shapefile. Vì vậy, nếu bạn mở lớp trong một dự án khác, nó sẽ có trường này trong bảng thuộc tính của nó.

* Trong QGIS 3.2, các giá trị trường mặc định có thể (tùy chọn) được đặt thành "áp dụng giá trị mặc định khi cập nhật." Với tùy chọn này, nếu bạn di chuyển một điểm trong đó giá trị mặc định là $ygiá trị hiện tại sẽ được thay thế bằng tọa độ y mới.


Tôi nghĩ rằng giá trị trường mặc định có thể được đặt thành tự động cập nhật trong QGIS 3.2.
she_weed

@she_weed Cảm ơn bạn đã chỉ ra điều đó. Tôi sẽ cập nhật câu trả lời của tôi để bao gồm thông tin đó.
csk
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.