Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os, time
- from PyQt4.QtCore import *
- from PyQt4.QtXml import *
- from PyQt4.QtGui import *
- from qgis import *
- image_path = PATH_TO_IMAGE
- export_path = EXPORT_PATH
- template = PATH_TO_TEMPLATE
- def exportMap(tempFile, canvas, bbox, outName):
- template_file = file(tempFile)
- template_content = template_file.read()
- template_file.close()
- document = QDomDocument()
- document.setContent(template_content)
- composer = QgsComposition(canvas.mapSettings())
- composer.loadFromTemplate(document)
- map_item = composer.getComposerItemById('main_map')
- map_item.setMapCanvas(canvas)
- bbox.scale(1.2)
- map_item.zoomToExtent(bbox)
- canvas.refresh()
- map_item.updateCachedImage()
- legend_item = composer.getComposerItemById('legend')
- legend_item.updateLegend()
- composer.refreshItems()
- composer.update()
- composer.exportAsPDF(outName)
- # get map canvas
- canvas = iface.mapCanvas()
- li = iface.legendInterface()
- # list all layers
- layers = li.layers()
- # get specific layer by displayed name
- lakes = [l for l in layers if l.name() == 'lakes'][0]
- iface.legendInterface().setLayerVisible(lakes, True)
- # load raster
- image = image_path
- raster = QgsRasterLayer(image, QFileInfo(image).baseName())
- iface.addRasterLayer(image)
- canvas.refresh()
- # make sure vector layer is on top
- root = QgsProject.instance().layerTreeRoot()
- for ch in root.children():
- if ch.layerName() == lakes.name():
- clone = ch.clone()
- root.insertChildNode(0, clone)
- root.removeChildNode(ch)
- for feat in lakes.getFeatures():
- outname = abbrev[feat.attribute('name')] + '_' + QFileInfo(image).baseName() + '.pdf'
- outfile = os.path.join(export_path, outname)
- # select single feature based on attribute "name"
- expr = QgsExpression(""" "name" = '{0}' """.format(feat.attribute('name')))
- selection = [l.id() for l in lakes.getFeatures(QgsFeatureRequest(expr))]
- lakes.setSelectedFeatures(selection)
- # zoom to selected feature
- canvas.zoomToSelected(lakes)
- # bounding box of selected feature
- bbox = lakes.boundingBoxOfSelected()
- # deselect
- lakes.setSelectedFeatures([])
- # apply local stretch to active raster layer
- iface.setActiveLayer(raster)
- iface.mainWindow().findChild(QAction, 'mActionLocalCumulativeCutStretch').trigger()
- exportMap(template, canvas, bbox, outfile)
- # remove raster
- for ch in root.children():
- if ch.layerName() == raster.name():
- root.removeChildNode(ch)
Add Comment
Please, Sign In to add comment