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?
Best Answer
You need to set your map to use the atlas feature's extent, using QgsComposerMap.setAtlasScalingMode, eg
Place this line after you've setup your atlas, but before the beginRender call.