9 votos

Ajuste de la medida de un mapa de QGIS usando python

Estoy escribiendo una aplicación independiente en Python/QGIS que simplemente crea mapas.

Quiero cargar vector/raster capas, establecer la simbología, el conjunto de medida

Por el momento, eso es todo!

Actualmente estoy usando la simple representación técnica que se describe aquí: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering

Me han fallado, sin embargo, en la adaptación de este código para definir un determinado punto. I proporcionar el código de abajo.

Los únicos ejemplos que puedo encontrar que muestran cómo cambiar la medida en que implican la creación de una MapCanvas. ...Pero no estoy seguro de que esto es algo que yo quiero hacer, teniendo en cuenta que soy sólo hacer mapas sencillos...y parece introducir un nuevo conjunto de complicaciones. No hay duda de que es una manera fácil de definir medida a través de la simple representación de' la técnica?

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

4voto

user25976 Puntos 570

Tal vez bastaría para que usted simplemente guardar el mapa de lona como una imagen después de hacer zoom a la medida de su interés. Haciendo uso de mapCanvas() no añadir demasiadas líneas de código y que la exportación de un simple PNG.

Desde la consola de python, este código se iba a producir una simple captura de pantalla del área se orientan en torno a una característica seleccionada, todas las capas activas, y cualquier activado etiquetas:

qgis.utils.iface.actionZoomToSelected().trigger()
qgis.utils.iface.mapCanvas().zoomScale(1000)

qgis.utils.iface.mapCanvas().saveAsImage('test.png', None, 'PNG') 

2voto

GilliM Puntos 69

Si conoces las coordenadas de los rectángulos, se puede utiliza el siguiente código:

zoomRectangle = QgsRectangle(pos[0]-offset, pos[1]-offset,pos[0]+offset,pos[1]+offset)
self.canvas.setExtent(zoomRectangle)
self.canvas.refresh()

aquí, para usted, sólo tiene que utilizar

self.canvas.setExtent(rect)

Y sólo por la precisión:

self.canvas = qgis.utils.iface.mapCanvas()

o de igual manera para el plugin, no pyqgis consola

self.canvas = self.iface.mapCanvas()

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X