¿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)
Respuesta
¿Demasiados anuncios?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()