Truy cập canvas bản đồ QGIS như một biến cho các biểu thức


8

Có thể truy cập Canvas Bản đồ QGIS dưới dạng giá trị biến hoặc biểu thức được sử dụng trong máy tính trường hoặc công cụ ghi nhãn không?

(tức là để bạn có thể tạo một biểu thức chọn / tra hỏi các tính năng có thể nhìn thấy / hiện diện trong một chế độ xem cụ thể của khung vẽ theo cách tương tự như trình soạn thảo in 'lọc chú thích theo nội dung bản đồ')

(QGIS 2.18.1 [osgeo4w], win7)

EDIT:
Trường hợp sử dụng tiềm năng (hư cấu) 1 - Có 50 đa giác trong một lớp, hiện có 20 đa giác hiển thị trong chế độ xem hiện tại của khung vẽ bản đồ, tôi muốn tạo kiểu màu xanh của đa giác nếu có <= 25 đa giác tạo kiểu cho chúng màu xanh lá cây nếu có> = 25 hình đa giác.

Trường hợp sử dụng tiềm năng (hư cấu) 2 - Có 50 đa giác trong một lớp, hiện có 10 đa giác có thể nhìn thấy, 5 có giá trị thuộc tính của 'Nhà' trong trường / cột "Loại xây dựng" và 5 có giá trị 'Nhà để xe' trong trường / cột "Loại công trình", hiển thị trong chế độ xem hiện tại của khung bản đồ. Trả về: giá trị bằng với số lượng đa giác là các gara ... answer = 5.


3
Bạn có một số biến (map_extent_center / height / width, map_id, map_scale, map_rotation) Nếu không, trong master, có một is_selected chức năng để biết nếu một tính năng được chọn. Có thể có giá trị để có thêm chi tiết về những gì bạn muốn làm.
Denis Rouzaud

Cảm ơn @Denis Rouzaud. Tôi đã sử dụng một số trong các biến đó trong các bối cảnh khác nhau. Câu hỏi này được hỏi như một nỗ lực đơn giản hóa để giải quyết vấn đề (hoặc một phần trong đó) trong một câu hỏi khác tôi đã hỏi ở đây: gis.stackexchange.com/questions/218508/ọ
guestagain

@DenisRouzaud Bạn có muốn đăng nó như một câu trả lời không? Nếu không tôi đang bị cám dỗ để đóng này là bản sao của gis.stackexchange.com/questions/218508/...
Underdark

Hãy đóng nó lại. Câu hỏi hơi mơ hồ.
Denis Rouzaud

1
Tôi không nghĩ câu hỏi mơ hồ cũng không đơn giản là một bản sao của câu hỏi được liên kết nhưng chi tiết hơn. Thật vậy, nó đặc biệt tìm kiếm một giải pháp không thể giải quyết được bằng các biến biểu thức được liệt kê trong nhận xét đầu tiên và độ phân giải cho truy vấn không giới hạn trong trường hợp sử dụng trong câu hỏi được liên kết. ... Và dường như có một vài người khác quan tâm đến câu trả lời cho câu hỏi ai phải có ứng dụng riêng cho chức năng đó hoặc một công việc hiện tại có thể.
mời

Câu trả lời:


1

Một công cụ vượt ra ngoài các biến hiện có sẽ là biểu thức tùy chỉnh python.

Theo hiểu biết của tôi, đây là công cụ hiện có duy nhất để truy cập vào khung vẽ bản đồ theo cách bạn mô tả và sử dụng thông tin đó trong các biểu thức.

Để giải quyết trường hợp sử dụng giả tưởng 1 của bạn, bạn có thể làm một cái gì đó như thế này:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def visibleFeaturesCount(layerName, feature, parent):
    lyr = QgsMapLayerRegistry.instance().mapLayersByName(layerName)[0]
    extentRect = iface.mapCanvas().extent()
    request = QgsFeatureRequest().setFilterRect(extentRect)
    feats = lyr.getFeatures(request)
    count = 0
    for feat in feats:
        count += 1
    return count

Sau đó, bạn có thể thiết lập các kiểu dựa trên quy tắc bằng các bộ lọc như:

visibleFeaturesCount('mylayer') > 20

API vải đầy đủ có thể được tìm thấy ở đây .


Cảm ơn rất nhiều @Jlie McMillan. Có vẻ như một câu trả lời rất hữu ích mà tôi sẽ kiểm tra chi tiết hơn ngay khi tôi nhận được phanh từ một dự án khác. Thử nghiệm nhanh với việc dán phần trên vào hộp thoại "Chọn theo biểu thức" theo hướng dẫn được liên kết không hoạt động vì hộp thoại không có tùy chọn / nút để lưu và chạy tập lệnh theo cách hướng dẫn được mô tả và như được hiển thị trong phần hướng dẫn ảnh chụp màn hình. Mới sử dụng tập lệnh python (hoặc bất cứ điều gì chúng được gọi đúng cách) nhưng không thể chờ đợi để bắt đầu hiểu ý tôi. Nơi nào bạn mong đợi rằng tôi sẽ xác định / thiết lập biến bằng cách sử dụng mã ở trên?
mời

Hơi khó hiểu một chút, nhưng những gì bạn làm là chọn nút 'tải' trên tab biểu thức tùy chỉnh. Khi được tải, lệnh bổ sung sẽ hiển thị trong các biểu thức qgis có sẵn của bạn.
Jesse McMillan
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.