Thank you for your help.
Hi,
2015-05-18 17:51 GMT+02:00 Benoît Laurent <blaur...@heurisis.eu
<mailto:blaur...@heurisis.eu>>:
Hello,
I would like to generate a series of maps representing tracks with
stops along them.
For each track, I have got a group of two layers, one for the
linear, one for the points that have associated information
(basically name and time of the stops). First, is there a better
way to achieve this ? For the moment, I have to handle two types
of layer. It is the beginning of my problems.
As the tracks overlap, I would like to generate a map for each
track where only the current selected track appears. The others
would be hidden.
I had a try with Atlas generation. It perfectly works except that
I can't hide the other tracks.
You can style your coverage layer so that only atlas current feature
will appear. In categorized style, use an expression like
$id=$atlasfeatureid. You'll get 0 (false) and 1 (true) when classing.
Set the 0 features style so that they become invisible or transparent.
It is a little better : with your help, I can highlight the current
linear layer. Actually, I aggregated all my linear layers to constitute
the coverage layer. However, I can't hide the points layers.
I also had a try with a Python script. I managed to iterate over
the groups of layers but I can't refresh the map canvas during the
Python script. So, it doesn't work.
A snippet of your code may help but I remember I had to face such a
problem and it was because after *myatlas.beginRender()*, I forgot to
set active the export of the atlas, sthg like
*mycomposition.setAtlasMode(QgsComposition.ExportAtlas)*
Actually, I did not use the Atlas generator (maybe a mistake ?). I
wanted to reproduce/modify its behavior. Here is a piece of code
(remember that for each track, there is linear layer and a points layer) :
| # Iterate over groups of pair of layers
for gin range(0,nbGroups-1):
# Display layers of the current group
layer= layers[2*g]
rectTrajet= layer.extent()
legend.setLayerVisible(layer, True)
layer= layers[2*g+1]
rectPtsArr= layer.extent()
legend.setLayerVisible(layer, True)
# extent area
rectGlb= QgsRectangle
xMin= min(rectTrajet.xMinimum(), rectPtsArr.xMinimum())
xMax= max(rectTrajet.xMaximum(), rectPtsArr.xMaximum())
yMin= min(rectTrajet.yMinimum(), rectPtsArr.yMinimum())
yMax= max(rectTrajet.yMaximum(), rectPtsArr.yMaximum())
rectGlb= QgsRectangle(xMin, yMin, xMax, yMax)
self.iface.mapCanvas().setExtent(rectGlb)
self.iface.mapCanvas().zoomToSelected()
self.iface.mapCanvas().updateScale()
self.iface.mapCanvas().zoomByFactor(1.5)
# Nothing works here !!
self.iface.mapCanvas().updateOverview()
self.iface.mapCanvas().refresh()
layers[2*g].triggerRepaint()
layers[2*g+1].triggerRepaint()
# Map composer
composerMap= QgsComposerMap(c,x,y,w,h)
composerMap.setPreviewMode(QgsComposerMap.Render)
composerMap.updateBoundingRect()
composerMap.renderModeUpdateCachedImage()
composerMap.setFrameEnabled(True)
c.addItem(composerMap)
# Launch printing
printer= QtGui.QPrinter()
printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
printer.setOutputFileName(nomFichier)
printer.setPaperSize(QSizeF(c.paperWidth(), c.paperHeight()),
QtGui.QPrinter.Millimeter)
printer.setFullPage(True)
printer.setColorMode(QtGui.QPrinter.Color)
printer.setResolution(c.printResolution())
pdfPainter= QPainter(printer)
paperRectMM= printer.pageRect(QtGui.QPrinter.Millimeter)
paperRectPixel= printer.pageRect(QtGui.QPrinter.DevicePixel)
c.render(pdfPainter, paperRectPixel, paperRectMM)
pdfPainter.end()
# Remove map composer
c.removeItem(composerMap)
# Hide layers of the current group
legend.setLayerVisible(layers[2*g], False)
legend.setLayerVisible(layers[2*g+1], False)
|
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel
antivirus Avast.
http://www.avast.com
_______________________________________________
Qgis-user mailing list
Qgis-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-user