1 votos

¿Es posible imprimir un mapa en PyQgis3 de una tabla de base de datos sin renderizar la capa en la interfaz gráfica del proyecto?

¿Existe alguna manera de imprimir un mapa utilizando pyqgis3 sin renderizar la capa vectorial en la interfaz del proyecto? (proporcionando solo la conexión a la tabla, la extensión del mapa y el estilo)

1voto

dc.sashwat Puntos 41

Después de investigar un poco, lo logré usando un script independiente, aquí está la solución:

import os.path
import sys
# configurando las variables de entorno
os.environ['QGIS_PREFIX_PATH'] = r'C:/OSGeo4W64/apps/qgis'
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = r'C:/OSGEO4~1/apps/Qt5/plugins'
os.environ['PATH'] += r';C:/OSGeo4W64/apps/qgis/bin;C:/OSGeo4W64/apps/Qt5/bin;C:/OSGeo4W64/apps/Python37'
sys.path.extend([r'C:/OSGeo4W64/apps/qgis/python',r'C:/OSGeo4W64/apps/qgis/Python37/Lib/site-packages'])
from qgis.core import *
from PyQt5.QtCore import QRectF

qgs = QgsApplication([], False)
qgs.initQgis()
shp_file = 'ruta_al_archivoshape/archivo.shp'
vlayer = QgsVectorLayer(shp_file, 'vlayer')
QgsProject.instance().addMapLayer(vlayer,False)

l = QgsPrintLayout(QgsProject.instance())
l.initializeDefaults()
l.setUnits(QgsUnitTypes.LayoutMillimeters)
page = l.pageCollection().pages()[0]  
lm = 20         # margen izquierdo
tm = 32         # margen superior
w, h = 900, 600 #ancho y alto

page.setPageSize(QgsLayoutSize(1189, 841)) 
# estableciendo el estilo de la capa
blackSymbol = QgsFillSymbol.createSimple({'color': '255,0,0,100',
                                              'color_border': 'BLACK',
                                              'width_border': '0.1'})
vlayer.setRenderer(QgsSingleSymbolRenderer(blackSymbol))
# añadiendo el mapa al diseño
theMap = QgsLayoutItemMap(l)
theMap.updateBoundingRect()
theMap.setRect(QRectF(lm,tm, w, h)) 
theMap.setPos(lm,tm)
theMap.updateBoundingRect()
theMap.setLayers([vlayer])   
# estableciendo la extensión del mapa
theMap.setExtent(QgsRectangle(363600.0, 376800.0, 364500.0 ,377400.0))
theMap.attemptSetSceneRect(QRectF(lm,tm, w, h))
l.addItem(theMap)
l.updateBounds()
# exportando a pdf
exporter =  QgsLayoutExporter(l)
pdf_settings = exporter.PdfExportSettings() 
exporter.exportToPdf('C:/mapa.pdf', pdf_settings)
qgs.exitQgis()

ver : Cookbook de desarrollador PyQGIS3

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X