J'écris une application autonome en Python / QGIS qui crée simplement des cartes.
Je veux charger des couches vectorielles / raster, définir la symbologie, définir l'étendue
Pour le moment, c'est tout!
Actuellement, j'utilise simplement la technique de rendu simple décrite ici: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
J'ai cependant échoué à adapter ce code pour définir une étendue spécifique. Je fournis le code ci-dessous.
Les seuls exemples que je peux trouver qui montrent comment changer l'étendue impliquent la création d'un MapCanvas. ... Mais je ne suis pas certain que c'est quelque chose que je veux faire étant donné que je fais juste des cartes très simples ... et cela semble introduire un tout nouvel ensemble de complications. Il existe certainement un moyen facile de définir l'étendue via la technique du «rendu simple»?
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")