Geographic Information Systems Asked by Krzychu on June 10, 2021
I need to generate an atlas for each feature from a layer for reporting. There will be created a few maps. The centre of each map must be focused on each feature. In this task I use a predefined QPT template. In QGIS Composer Manager everything works perfectly. Then I save the QPT file as a template and I try to automate the process with a plugin using this function. It’s based on this thread: Programmatically load composer from template and generate atlas using pyQgis
alayer=iface.activeLayer()
# Add all layers in map canvas to render
myMapRenderer = self.iface.mapCanvas().mapRenderer()
# Load template from file
myComposition = QgsComposition(myMapRenderer)
template = 'atlas16.qpt'
myFile = 'C://Users//maria//.qgis2//composer_templates//atlas16.qpt'
myTemplateFile = file(myFile, 'rt')
myTemplateContent = myTemplateFile.read()
myTemplateFile.close()
myDocument = QDomDocument()
myDocument.setContent(myTemplateContent)
myComposition.loadFromTemplate(myDocument)
# Get map composition and define scale
myAtlasMap = myComposition.getComposerMapById(0)
# Setup Atlas
myAtlas = QgsAtlasComposition(myComposition)
myAtlas.setCoverageLayer(alayer)
myAtlas.setComposerMap(myAtlasMap)
myAtlas.setEnabled(True)
myAtlas.setHideCoverage(False)
# Generate atlas
myAtlas.beginRender()
for i in range(0, myAtlas.numFeatures()):
myAtlas.prepareForFeature( i )
jobs = "D://Krzysztof//Skrypty//Archiwum//"
output_jpeg = jobs + str(i)+ "_BMS_plan.jpg"
myImage = myComposition.printPageAsRaster(0)
myImage.save(output_jpeg)
myAtlas.endRender()
if os.path.isfile(output_jpeg) is False:
QMessageBox.warning(self.iface.mainWindow(), "Uh Oh!", "Something went wrong, no image exported!")
self.dlg.close()
In the result I get some reports, but they look same – so the focusing on points isn’t performed.
I suspected that I might be caused by the extent which is present in the QPT file. Then I changed my function, so that the extent will be adjusted for each feature. However, at the end I got only empty reports.
The template content is as follows:
Does anyone know what might be wrong? Could you give any hints how a QPT template should be adjusted?
You need to set your map to use the atlas feature's extent, using QgsComposerMap.setAtlasScalingMode, eg
myAtlasMap.setAtlasScalingMode( QgsComposerMap.Auto )
Place this line after you've setup your atlas, but before the beginRender call.
Correct answer by ndawson on June 10, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP