9 votos

¿Utilizar la API de QGIS 3.0 para el diseño?

Estoy intentando generar un atlas con python en qgis 3.0. Tengo..:

projectInstance= QgsProject.instance()
projectLayoutManager = projectInstance.layoutManager()
for comp in projectLayoutManager.printLayouts():
    if comp.atlas().enabled():
        comp.atlas().beginRender() 
        nbobj = comp.atlas().updateFeatures()
        comp.atlas().first()
        for i in range(0, comp.atlas().count ()):
            comp.atlas().refreshCurrentFeature ()
            exporter =  QgsLayoutExporter(comp.atlas().layout () )
            pdf_settings = exporter.ImageExportSettings () #dpi?
            exporter.exportToImage (<filename>, pdf_settings)
        comp.atlas().endRender() 

Pero me gustaría que el nombre del archivo tuviera algunos atributos de la característica del atlas.

¿Cómo puedo obtener el valor del atributo?

10voto

John Feminella Puntos 123

Este script se puede simplificar considerablemente en QGIS 3.0:

projectInstance= QgsProject.instance()
projectLayoutManager = projectInstance.layoutManager()

image_settings = exporter.ImageExportSettings()
image_settings.dpi = 300 # or whatever you want

for comp in projectLayoutManager.printLayouts():
    if comp.atlas().enabled():
        result, error = QgsLayoutExporter.exportToImage(comp.atlas(), 
                            baseFilePath='c:/temp/my_atlas', extension='.png', settings=image_settings)
        if not result == QgsLayoutExporter.Success:
            print(error)

Para controlar los nombres de archivo generados, es necesario establecer una expresión para los nombres de archivo del atlas, por ejemplo

comp.atlas().setFilenameExpression('"some_attribute" || '_export' )

4voto

simomo Puntos 61

¡Genial, se ha ido! Gracias ndawson.

Mi nuevo código escribir atlas resultado en subdirectorios, si puede ayudar a alguien

import os
folder = "D:\CARTE_THEMATIQUE\OUTPUT"
projectInstance= QgsProject.instance()
projectLayoutManager = projectInstance.layoutManager()

for comp in projectLayoutManager.printLayouts():
    comp.atlas().setFilenameExpression( "CODE_CENTRE  ||'/'||  CODE_CONTRAT"  )
    image_settings = QgsLayoutExporter(comp.atlas().layout () ).ImageExportSettings()
    image_settings.dpi = 100 # or whatever you want
    if comp.atlas().enabled():
        (filepath, filename) = os.path.split(folder +'\\' + comp.atlas().currentFilename () +'png')
        if not os.path.exists(filepath): 
            os.makedirs(filepath)
        result, error = QgsLayoutExporter.exportToImage(comp.atlas(), baseFilePath=filepath, extension='.png', settings=image_settings)
        if not result == QgsLayoutExporter.Success:
            print(error)

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