Có thể tự động chụp ảnh màn hình trên màn hình của tính năng đã chọn của tôi trong QGIS bằng Python không?


11

Tôi đang triển khai một công cụ cho phép người dùng tạo hồ sơ của một tính năng (trong trường hợp của tôi là bưu kiện đô thị). Có thể tự động chụp ảnh màn hình của tính năng này (được hiển thị trong cửa sổ QGIS) và hiển thị nó trong cấu hình PDF không?

Hình ảnh chỉ nên hiển thị phạm vi của tính năng và có thể là lớp WMS nằm ngoài tính năng. Đã có một số công cụ mà bạn có thể đề xuất?


Làm cách nào tôi có thể lưu JPG thay vì PNG? QssMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Tôi biết rằng tôi có thể sử dụng "JPG" làm tham số cuối cùng, nhưng tôi không biết cách xác định QPixmap giống như bản đồ thực tế. cửa sổ trong qgis. Cảm ơn vì sự giúp đỡ. Micha
gismic

Câu trả lời:


10

kopi,

Có một số cách tiếp cận giải pháp, nhưng đây có thể là một trong những cách đơn giản nhất (tùy theo nhu cầu của bạn):

Chọn tính năng bằng cách sử dụng QssVectorLayer

Giả sử tham chiếu đến lớp vectơ của bạn (vlayer) và id của tính năng (fid). Xem thêm

vlayer.select(fid)

Thu phóng đến tính năng được chọn bằng QssInterface

qgis.utils.iface.actionZoomToSelected().trigger()

Bỏ chọn tính năng bằng cách sử dụng QssVectorLayer

vlayer.deselect(fid)

Lưu canvas dưới dạng hình ảnh bằng cách sử dụng QssMapCanvas

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

Cách tiếp cận này tạo ra một bức ảnh càng lớn càng tốt, nếu cửa sổ của bạn được mở rộng đến mức đầy đủ, vì việc lưu canvas ở độ phân giải màn hình. Tuy nhiên, điều đó không đảm bảo hình ảnh của bạn sẽ ở cùng tỷ lệ thu phóng bản đồ, chỉ tương đối có cùng kích thước pixel. Có các tùy chọn khác như QgisInterface::actionPanToSelected()nếu bạn cần giữ tỷ lệ thu phóng phù hợp.


Ồ Cảm ơn về câu trả lời của bạn! Điều này làm việc rất tốt!
kopi

1
cũng có một cái nhìn về plugin "in dễ dàng", có thể không phải là những gì bạn cần, nhưng nó có thể hữu ích cho cảm hứng.
Giovanni Manghi

Có thể đặt tỷ lệ trước khi chụp ảnh màn hình? Và làm cách nào tôi có thể sử dụng "actionPanToSelected"? Tôi đang thử nó theo cách này: qgis.utils.iface.actionPanToSelected (tính năng mà hàm phải xoay tới ...), nhưng điều này trả về một thông báo lỗi: "Lỗi Attritbute: Đối tượng QgisInterface không có thuộc tính actionPanToSelected
kopi

1
Cố gắng qgis.utils.iface.mapCanvas().zoomScale(scale)thiết lập tỷ lệ bản đồ. actionPanToSelected () không lấy tham số, nhưng trả về một tham chiếu cho chính hành động đó (như actionZoomToSelected () ở trên). Sử dụng khe công khai của nó qgis.utils.iface.actionPanToSelected().trigger()để kích hoạt hành động, sẽ xử lý để tìm ra những gì được chọn.
dakcarto

1
Hừm. qgis.utils.iface.actionPanToSelected (). trigger () hoạt động với tôi theo phiên bản QGIS 1.8.0. Bạn đang sử dụng phiên bản ổn định mới nhất (1.8.0)? Các tính năng được bổ sung trở lại vào tháng giêng , vì vậy nó không trong phiên bản 1.7.x .
dakcarto
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.