Чи можливо автоматично зробити "знімок екрана" моєї вибраної функції в QGIS за допомогою Python?


11

Я реалізую інструмент, який дозволяє користувачеві створити профіль функції (в моєму випадку міських посилок). Чи можливо автоматично зробити знімок екрана цієї функції (відображається у вікні QGIS) та відобразити його у профілі PDF?

На малюнку слід відображати лише масштаб функції та, можливо, рівень WMS, який лежить поза функцією. Чи є вже якісь інструменти, які ви могли б запропонувати?


Як я можу зберегти JPG замість PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Я знаю, що я можу використовувати "JPG" в якості останнього параметра, але я не знаю, як визначити QPixmap, який точно такий же, як і фактична карта вікно в qgis. Дякуємо за допомогу. Micha
gismic

Відповіді:


10

копі,

Є кілька підходів до рішення, але це може бути одним із найпростіших (залежно від ваших потреб):

Виберіть функцію за допомогою QgsVectorLayer

Якщо припустити посилання на ваш векторний шар (vlayer) та ідентифікатор функції (fid). Дивись також

vlayer.select(fid)

Масштабування вибраної функції за допомогою QgsInterface

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

Зніміть вибір функції за допомогою QgsVectorLayer

vlayer.deselect(fid)

Збережіть полотно як зображення за допомогою QgsMapCanvas

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

Цей підхід створює максимально велику фотографію, якщо ваше вікно розгорнуте до повного, оскільки збереження полотна відбувається в роздільній здатності екрана. Однак це не гарантує, що ваші фотографії будуть мати однакову масштаб масштабування на карті, лише відносно однаковий розмір пікселя. Є й інші варіанти, наприклад, QgisInterface::actionPanToSelected()якщо вам потрібно підтримувати масштаб масштабу.


Ого. Спасибі за вашу відповідь! Це працює дуже добре!
копія

1
подивіться також на плагін "easy print", можливо, не те, що вам потрібно, але це може бути корисно для натхнення.
Джованні Мангі

Чи можна встановити масштаб перед тим, як зробити знімок екрана? І як я можу використовувати "actionPanToSelected"? Я пробую це так: qgis.utils.iface.actionPanToSelected (функція, на яку функція має перейти до…), але це повертає повідомлення про помилку: "Attritbute Error: QgisInterface object has a attribute actionPanToSelected
kopi

1
Спробуйте qgis.utils.iface.mapCanvas().zoomScale(scale)встановити масштаб карти. actionPanToSelected () не приймає параметр, але повертає посилання на саму дію (наприклад, actionZoomToSelected () вище). Використовуйте його публічний слот, qgis.utils.iface.actionPanToSelected().trigger()щоб запустити дію, яка допоможе з’ясувати, що вибрано.
dakcarto

1
Хммм. qgis.utils.iface.actionPanToSelected (). тригер () працює для мене під QGIS версії 1.8.0. Використовуєте останню стабільну версію (1.8.0)? Функція була додана ще в січні , так що це не в версії 1.7.x .
dakcarto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.