Làm cách nào để sử dụng bảng điều khiển python của QGIS để lặp qua các truy vấn lớp đơn giản và đầu ra png?


8

Tôi thực sự mới đối với mã hóa QGIS và tôi đang gặp khó khăn trong việc tìm kiếm (đặc biệt) các lớp / hàm api để thực hiện các hành động của cửa sổ Trình tạo truy vấn.

Về cơ bản tôi đang cố gắng làm điều này:

  1. Lặp lại từ n = 1 đến 200 ...

  2. Truy vấn lớpA trong đó field_id = n

  3. Truy vấn layerB trong đó field_id = n

  4. Truy vấn layerC trong đó field_id = n

  5. Lưu dưới dạng img_n.png

Tôi nghĩ khá đơn giản, nhưng nó đã trở thành một nỗi đau thực sự khi thực hiện bằng tay trong GUI.

Câu trả lời:


4

Vâng, theo cách riêng của tôi, cuối cùng tôi đã tìm ra chức năng chính tôi cần: setSubsetString (). Bất cứ ai đặt tên cho thứ này? ... dường như không trực quan về chức năng của nó.

Đây là bộ xương tôi đang làm việc với:

qgis.utils.iface
canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for n in range(1, 201)
    for layer in allLayers:
        layer.setSubsetString('field_id = ' + str(n))
    canvas.refresh()
    canvas.saveAsImage('img_' + str(n) + '.png')

canvas.refresh()

bộ lọc setSubString, sử dụng cú pháp nhà cung cấp, lyaer. Sử dụng nó là tốt nhưng hãy lưu ý cú pháp có thể thay đổi nếu bạn thay đổi loại lớp bạn đang sử dụng.
Nathan W

Nếu mọi người muốn sử dụng mã này một cách khái quát hơn tôi, vâng, họ nên kiểm tra xem lớp đó có phải là loại vectơ không (QssMapLayer :: LayerType) và có thể sẽ kiểm tra nhiều hơn trên đường đi.
Kory Roberts

3

Tôi sẽ đề nghị bạn xem qua tài liệu API của họ .

Quay trở lại câu hỏi của bạn, bạn có thể lặp qua tất cả các lớp trong TOC bằng cách sử dụng:

canvas = qgis.utils.iface.mapCanvas()
allLayers = canvas.layers()
for i in allLayers:
   print i.name()
   #Do other stuff here.
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.