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")
Jawaban:
Mungkin cukup bagi Anda untuk hanya menyimpan kanvas peta sebagai gambar setelah melakukan zooming sejauh yang diinginkan. Memanfaatkan mapCanvas () tidak menambahkan terlalu banyak baris kode dan akan mengekspor PNG sederhana.
Dari konsol python, kode ini akan menghasilkan tangkapan layar sederhana dari area yang berorientasi pada fitur yang dipilih, semua lapisan aktif, dan label yang diaktifkan:
sumber
Jika Anda tahu koordinat persegi panjang Anda, Anda bisa menggunakan kode berikut:
di sini, untuk Anda, gunakan saja
Dan hanya untuk presisi:
atau sama untuk plugin, bukan konsol pyqgis
sumber
QGIS 3
sumber