Страница 1 из 1
					
				Plugin QGIS3 с картой
				Добавлено: 26 фев 2019, 20:36
				 Bek
				Здравствуйте!
Подскажите пожалуйста реальный пример плагина на QGIS3, чтобы по шаблону *.qpt вывести на pdf файл
на QGIS2 есть работает, проблема перевести на QGIS3 
+ нужен пример с кнопками управления картой
заранее спасибо!
			 
			
					
				Re: Plugin QGIS3 с картой
				Добавлено: 27 фев 2019, 10:07
				 wasposa
				Не совсем понятно, что подразумевается под "кнопки управления картой"
			 
			
					
				Re: Plugin QGIS3 с картой
				Добавлено: 27 фев 2019, 10:23
				 wasposa
				В общем случае это выглядит примерно так:
from qgis.core import *
....
   def exportPDF(self):
        project = QgsProject.instance()
        layout = QgsPrintLayout(project)
        layout.initializeDefaults()
        layout.setUnits(QgsUnitTypes.LayoutMillimeters) 
        #Устанавливаем размер для страницы
        page = layout.pageCollection().pages()[0] 
        page.setPageSize(QgsLayoutSize(210,297))                         
        #Устанавливаем границы прямоугольника, куда будем вписывать карту
        itemMap=QgsLayoutItemMap(layout)
        itemMap.updateBoundingRect()
        itemMap.setRect(QRectF(5, 10, 200, 220))
        
        layout_exporter = QgsLayoutExporter(layout)
        pdf_export_settings = QgsLayoutExporter.PdfExportSettings()
        pdf_export_settings.dpi = 300
        res = layout_exporter.exportToPdf("путь до файла",pdf_export_settings)
			 
			
					
				Re: Plugin QGIS3 с картой
				Добавлено: 27 фев 2019, 18:23
				 Bek
				Благодарю за ответ.
Но, у меня вот такой рабочий код на 2.18 версии:
Код: Выделить всё
    def make_pdf(self):
        #canvas = QgsMapCanvas()
        canvas=self.iface.mapCanvas()
  
        map_canvas = QgsMapCanvas(self.dlg.map)
        map_canvas.setMinimumSize(440, 340)
        map_canvas.setMaximumSize(440,340)
        
        layers = [layer for layer in self.iface.layerTreeView().selectedLayers()]
        map_canvas_layer_list = [l for l in layers]
        map_canvas.setLayers(map_canvas_layer_list)
        map_canvas.setExtent(self.iface.mapCanvas().extent())
        
        print(self.plugin_dir)
        
        template_path=self.plugin_dir+'\map.qpt'
        
        template_file = open(template_path,'r')
        template_content = template_file.read()
        template_file.close()
        
        document = QDomDocument() # name 'QDomDocument' is not defined
        document.setContent(template_content)
        
        composition = QgsComposition(map_canvas.mapSettings()) # name 'QgsComposition' is not defined
        
        map_item = composition.getComposerItemById('map')
        map_item.setMapCanvas(map_canvas)
        map_item.zoomToExtent(map_canvas.extent())
        
        txt1 = composition.getComposerItemById('tt1')
        txt1.setText(self.dlg.plainText.toPlainText())
        
        txt2 = composition.getComposerItemById('txt')
        txt2.setText(self.dlg.plainText.toPlainText())
 
так вот, на 3.4.5 версии QGIS не работает, с ошибками: 
# name 'QDomDocument' is not defined
# name 'QgsComposition' is not defined
а идея такая: взять созданный макет (*.qpt) и заменить в нем определенные элементы на мои данные и вывести в pdf
 
			
					
				Re: Plugin QGIS3 с картой
				Добавлено: 27 фев 2019, 21:09
				 Bek
				С pdf разобрался! получился так, если кому интересно
        layout = QgsLayout(QgsProject().instance())
        layout.loadFromTemplate(qpt, QgsReadWriteContext())
        mapItem = layout.referenceMap()
        layoutExporter = QgsLayoutExporter(layout)
        
        txt1 = layout.itemById('tt1')
        txt1.setText(self.dlg.plainText.toPlainText())
        
        txt2 = layout.itemById('txt')
        txt2.setText(self.dlg.plainText.toPlainText())
        
        layoutExporter.exportToPdf("C:\ipdf.pdf",QgsLayoutExporter.PdfExportSettings())
Осталась вторая задача: пример с кнопками управления картой
как в моей форме сделать стандартные кнопки "Выбор объекта", "Обновить", и пр.?
как в картине:
![Изображение]()