Estou escrevendo um aplicativo independente em Python / QGIS que simplesmente cria mapas.
Quero carregar camadas vetor / raster, definir simbologia, definir extensão
No momento, isso é tudo!
Atualmente, estou apenas usando a técnica de renderização simples descrita aqui: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
No entanto, falhei ao adaptar esse código para definir uma extensão específica. Eu forneço o código abaixo.
Os únicos exemplos que posso encontrar que mostram como alterar a extensão envolvem a criação de um MapCanvas. ... Mas não tenho certeza de que isso é algo que quero fazer, considerando que estou apenas fazendo mapas muito simples ... e parece introduzir um novo conjunto de complicações. Certamente existe uma maneira fácil de definir extensão através da técnica de 'renderização simples'?
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")
Respostas:
Talvez seja suficiente salvar a tela do mapa como uma imagem depois de aumentar o zoom de acordo com o interesse. Usar mapCanvas () não adiciona muitas linhas de código e exportaria um PNG simples.
No console python, esse código produziria uma captura de tela simples da área orientada em torno de um recurso selecionado, todas as camadas ativas e quaisquer rótulos ativados:
fonte
Se você conhece as coordenadas dos seus retângulos, pode usar o seguinte código:
aqui, para você, basta usar
E apenas por precisão:
ou igualmente para o plugin, não o console pyqgis
fonte
QGIS 3
fonte