Estoy escribiendo una aplicación independiente en Python / QGIS que simplemente crea mapas.
Quiero cargar capas vectoriales / ráster, establecer simbología, establecer extensión
Por el momento, eso es todo!
Actualmente solo estoy usando la técnica de representación simple que se describe aquí: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
Sin embargo, he fallado al adaptar este código para definir una extensión específica. Proporciono el código a continuación.
Los únicos ejemplos que puedo encontrar que muestran cómo cambiar la extensión implican crear un MapCanvas. ... Pero no estoy seguro de que esto sea algo que quiero hacer teniendo en cuenta que solo estoy haciendo mapas muy simples ... y parece presentar un conjunto completamente nuevo de complicaciones. ¿Seguramente hay una manera fácil de definir la extensión a través de la técnica de 'representación 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")
Respuestas:
Quizás sea suficiente para usted simplemente guardar el lienzo del mapa como una imagen después de hacer zoom hasta el punto de interés. Hacer uso de mapCanvas () no agrega demasiadas líneas de código y exportaría un simple PNG.
Desde la consola de Python, este código produciría una captura de pantalla simple del área orientada alrededor de una característica seleccionada, todas las capas activas y cualquier etiqueta activada:
fuente
Si conoce las coordenadas de sus rectángulos, puede usar el siguiente código:
aquí, para ti, solo usa
Y solo por precisión:
o igualmente para el complemento, no la consola pyqgis
fuente
QGIS 3
fuente