Saya menulis aplikasi yang berdiri sendiri dalam Python / QGIS yang hanya membuat peta.
Saya ingin memuat layer vektor / raster, mengatur simbologi, mengatur batas
Saat ini, itu saja!
Saat ini saya hanya menggunakan teknik rendering sederhana yang diuraikan di sini: http://www.qgis.org/pyqgis-cookbook/composer.html#simple-rendering
Namun saya gagal mengadaptasi kode ini untuk menentukan batas tertentu. Saya berikan kode di bawah ini.
Satu-satunya contoh yang dapat saya temukan yang menunjukkan bagaimana mengubah tingkat melibatkan pembuatan MapCanvas. ... Tapi saya tidak yakin bahwa ini adalah sesuatu yang ingin saya lakukan mengingat saya hanya membuat peta yang sangat sederhana ... dan sepertinya memperkenalkan serangkaian komplikasi yang sama sekali baru. Tentunya ada cara mudah untuk mendefinisikan tingkat melalui teknik 'rendering sederhana'?
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")