Ich schreibe eine eigenständige Anwendung in Python / QGIS, die einfach Karten erstellt.
Ich möchte Vektor- / Rasterebenen laden, Symbologie und Ausdehnung festlegen
Im Moment ist das alles!
Derzeit verwende ich nur die hier beschriebene einfache Rendering-Technik: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
Ich habe es jedoch versäumt, diesen Code anzupassen, um einen bestimmten Umfang zu definieren. Ich gebe den folgenden Code an.
Die einzigen Beispiele, die zeigen, wie das Ausmaß geändert werden kann, sind das Erstellen eines MapCanvas. ... Aber ich bin mir nicht sicher, ob ich das tun möchte, wenn ich nur sehr einfache Karten mache ... und es scheint eine ganze Reihe neuer Komplikationen mit sich zu bringen. Sicherlich gibt es eine einfache Möglichkeit, das Ausmaß mithilfe der "einfachen Rendering" -Technik zu definieren.
Becky
from qgis.core import *
from qgis.utils import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtCore import QFileInfo, QSettings
QgsApplication.setPrefixPath('/Applications/QGIS-1.9.app/Contents/MacOS', True)
QgsApplication.initQgis()
province = QgsVectorLayer('/filepath/Province_studyUTM36S.shp' , 'layer', 'ogr')
town = QgsVectorLayer('/filepath/TownPolygons_UTM36S.shp' , 'layer', 'ogr')
road = QgsVectorLayer('/filepath/Roads_UTM36S.shp' , 'layer', 'ogr')
QgsMapLayerRegistry.instance().addMapLayer(province)
QgsMapLayerRegistry.instance().addMapLayer(road)
QgsMapLayerRegistry.instance().addMapLayer(town)
rasterFile = '/filepath/Landsat.tif'
fileInfo = QFileInfo(rasterFile)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(rasterFile, baseName)
QgsMapLayerRegistry.instance().addMapLayer(rlayer)
img = QImage(QSize(800,600), QImage.Format_ARGB32_Premultiplied)
color = QColor(255,255,255)
img.fill(color.rgb())
p = QPainter()
p.begin(img)
p.setRenderHint(QPainter.Antialiasing)
render = QgsMapRenderer()
ID = [ rlayer.getLayerID(), town.getLayerID(), road.getLayerID(), province.getLayerID()]
render.setLayerSet(ID)
rect = QgsRectangle(render.fullExtent())
rect.scale(1.1)
render.setExtent(rect)
render.setOutputSize(img.size(), img.logicalDpiX())
render.render(p)
p.end()
img.save("/filepath/first_render.png","png")
Antworten:
Vielleicht reicht es für Sie aus, die Kartenleinwand nach dem Zoomen im gewünschten Umfang einfach als Bild zu speichern. Durch die Verwendung von mapCanvas () werden nicht zu viele Codezeilen hinzugefügt und ein einfaches PNG exportiert.
Über die Python-Konsole würde dieser Code eine einfache Bildschirmaufnahme des Bereichs erstellen, der sich an einem ausgewählten Feature, allen aktiven Ebenen und allen aktivierten Beschriftungen orientiert:
quelle
Wenn Sie die Koordinaten Ihrer Rechtecke kennen, können Sie folgenden Code verwenden:
hier, für dich, benutze einfach
Und nur zur Präzision:
oder gleichermaßen für Plugin, nicht für Pyqgis-Konsole
quelle
QGIS 3
quelle