Hi to all, I'm trying to pass to the map composition a layer, setting the scale at 1:20.
with this method I'm creating a bbox around my geometry, then I convert the measures (in meters) into 1:20 scale to obtain the dimension of my page. For example: for a bbox of 1x2 meters I want print a page 5 cm x 10 cm. def converter_1_20(self, n): n *= 100 res = n / 20 return res def test_bbox(self): self.layerUS.select( [] ) # recuperi tutte le geometrie senza attributi featPoly = QgsFeature() # crei una feature vuota per il poligono dizionario_id_contains = {} lista_quote = [] self.layerUS.nextFeature( featPoly ) # cicli sulle feature recuperate, featPoly conterra la feature poligonale attuale bbox = featPoly.geometry().boundingBox() # recupera i punti nel bbox del poligono self.height = self.converter_1_20(float(bbox.height())) self.width = self.converter_1_20(float(bbox.width())) Then I try to pass this measures to map composition but I obtain a different scale. I try to use the metod mapRenderer.setScale(1.20) but this do nothing. How can I pass to the printer system to obtain a 1:20 scale map? Thanks a lot and best regards. Luca def print_map(self): mapRenderer = self.iface.mapCanvas().mapRenderer() mapRenderer.setScale(1.20) mapRenderer.updateScale() c = QgsComposition(mapRenderer) c.setPlotStyle(QgsComposition.Print) #map - this item tells the libraries where to put the map itself. Here we create a map and stretch it over the whole paper size: x, y = 0,-4 w, h = c.paperWidth(), c.paperHeight() composerMap = QgsComposerMap(c, x, y, w, h) c.addItem(composerMap) #scale bar item = QgsComposerScaleBar(c) item.setStyle('Numeric') # optionally modify the style item.setComposerMap(composerMap) item.applyDefaultSize() c.addItem(item) width = self.height*10 height = self.width*10 dpi = 300 .... _______________________________________________ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer