Mai mult

QgsMapRenderer pentru a exporta extinderea curentă utilizând PyQGIS

QgsMapRenderer pentru a exporta extinderea curentă utilizând PyQGIS


Încerc să realizez redarea simplă a hărții PyQGIS prin consola QGIS 2.0 Python, dar ajung doar cu o imagine goală. Am urmat instrucțiunile acestui link. Obiectivul meu este să export o imagine simplă a extinderii actuale a straturilor de interes către un png. Unde pot greși?

#identify crs crs = QgsCoordinateReferenceSystem (3297, QgsCoordinateReferenceSystem.EpsgCrsId) # create image img = QImage (QSize (800,600), QImage.Format_ARGB32_Premultiplied) # set image’s background color color = QColor (255,255) (255,255) # create pictor p = QPainter () p.begin (img) p.setRenderHint (QPainter.Antialiasing) render = QgsMapRenderer () #set crs render.setDestinationCrs (crs) # set layer set layer = qgis.utils.iface.legendInterface. layer-uri () lst = [] pentru layer-ul în layer-uri: lst.append (layer. ()) render.setLayerSet (lst) # setat la întinderea CURENTĂ ** harta extinderii complete a stratului este redată cu succes atunci când QgsRectangle (render.fullExtent () este utilizat) rect = QgsRectangle (render.extent ()) rect.scale (1.1) render.setExtent (rect) # set size output output.setOutputSize (img.size (), img.logicalDpiX ()) # face randarea randare .render (p) p.end () # save image img.save ("render.png">

Nu știu dacă aceasta este doar o greșeală de tipar în postarea dvs., dar dacă nu, acest lucru ar putea cauza o imagine necompletată ...

# set layer set layer = qgis.utils.iface.legendInterface.layers ()

Acesta ar trebui să fie de fapt qgis.utils.iface.legendInterface (). Layer () (rețineți că legendInterface trebuie să fie apelul metodei, realizat prin adăugarea de paranteze ())

lst = [] pentru strat în straturi: lst.append (layer. ())

Ceea ce doriți să faceți este să adăugați fiecare ID de straturi adăugând layer.id ()
Sper că asta ajută!

Editați | ×:
Ați încercat să salvați un strat cu vizibilitatea bazată pe scară activată? Pentru că randatorul redă imaginea la extindere completă înainte de salvare - poate că datele dvs. de nivel sunt invizibile la acel nivel de zoom ?!

Btw. acesta este codul care a funcționat pentru mine (sau cel puțin cu straturile vectoriale, de formă și raster cu care l-am testat;))

PS. Când se utilizează rect = QgsRectangle (renderer.extent ()) în loc de renderer.fullExtent (), imaginea pe care o obțin este necompletată.

imageType = "png" pathToFile = "/ Utilizatori /% u / Desktop /" # create image img = QImage (QSize (800,600), QImage.Format_ARGB32_Premultiplied) # set image's background color color = QColor (255,255,255) img.fill (color. rgb ()) # create pictor p = QPainter () p.begin (img) p.setRenderHint (QPainter.Antialiasing) renderer = QgsMapRenderer () # set layer set lst = [] layer = iface.legendInterface (). layer () pentru strat în straturi: lst.append (layer.id ()) renderer.setLayerSet (lst) print "Set rendered" # set extend rect = QgsRectangle (renderer.fullExtent ()) rect.scale (1.1) renderer.setExtent (rect ) # set size output renderer.setOutputSize (img.size (), img.logicalDpiX ()) print "Pregătit pentru a reda" # face randarea renderer.render (p) print "rendered" p.end () print "pictor încheiat "# save image img.save (pathToFile + self.activeLayer.name () +". "+ imageType, imageType)

Priveste filmarea: PyQGIS print field names