Можно ли автоматически сделать «скриншот» выбранной мной функции в QGIS с использованием Python?

11

Я реализую инструмент, который позволяет пользователю создавать профиль объекта (в моем случае городские участки). Можно ли автоматически сделать снимок экрана этой функции (отображается в окне QGIS) и отобразить его в профиле PDF?

На рисунке должны отображаться только размеры функции и, возможно, уровень WMS, выходящий за пределы функции. Уже есть какие-то инструменты, которые вы могли бы предложить?

копи
источник
Как я могу сохранить JPG вместо PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = "PNG") Я знаю, что могу использовать «JPG» в качестве последнего параметра, но я не знаю, как определить QPixmap, который точно такой же, как и фактическая карта окно в QGIS. Спасибо за помощь. Миха
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()если вам нужно, чтобы масштаб был согласованным.

dakcarto
источник
Ух ты. Спасибо за ваш ответ! Это работает очень хорошо!
Копи
1
посмотрите также на плагин "easy print", возможно, не тот, который вам нужен, но он может быть полезен для вдохновения.
Джованни Манги
Можно ли установить масштаб, прежде чем делать снимок экрана? И как я могу использовать "actionPanToSelected"? Я пытаюсь сделать это следующим образом: qgis.utils.iface.actionPanToSelected (функция, для которой функция должна панорамировать ...), но это возвращает сообщение об ошибке: «Ошибка Attritbute: у объекта QgisInterface нет атрибута actionPanToSelected
kopi
1
Попробуйте qgis.utils.iface.mapCanvas().zoomScale(scale)установить масштаб карты. actionPanToSelected () не принимает параметр, но возвращает ссылку на само действие (как actionZoomToSelected () выше). Используйте его публичный слот, qgis.utils.iface.actionPanToSelected().trigger()чтобы запустить действие, которое будет обрабатывать выяснение того, что выбрано.
Даккарто
1
Хммм. У меня работает qgis.utils.iface.actionPanToSelected (). trigger () под QGIS версии 1.8.0. Вы используете последнюю стабильную версию (1.8.0)? Функция была добавлена еще в январе , так что это не в версии 1.7.x .
Даккарто