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")