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")
Réponses:
Il vous suffira peut-être simplement d'enregistrer le canevas de carte en tant qu'image après avoir zoomé dans la mesure souhaitée. L'utilisation de mapCanvas () n'ajoute pas trop de lignes de code et exporterait un simple PNG.
À partir de la console python, ce code produirait une capture d'écran simple de la zone orientée autour d'une entité sélectionnée, de toutes les couches actives et de toutes les étiquettes activées:
la source
Si vous connaissez les coordonnées de vos rectangles, vous pouvez utiliser le code suivant:
ici, pour vous, utilisez simplement
Et juste pour la précision:
ou également pour le plugin, pas la console pyqgis
la source
QGIS 3
la source