Saya mencoba mengikuti bagian rendering peta dari buku masak pyqgis, tetapi saya ingin menguji ini sebagai aplikasi mandiri. Saya dapat melakukan bagian pertama, menggunakan rendering sederhana, tapi saya agak terjebak melakukan contoh kedua menggunakan komposer peta sebagai skrip mandiri.
Ini adalah contoh mandiri yang bisa saya lakukan:
from qgis.core import *
from qgis.gui import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtXml import *
QgsApplication.setPrefixPath("/usr/", True)
QgsApplication.initQgis()
fh = open("eg.csv","w")
fh.write("""
x,y,name
153.0278, -27.4679, Brisbane
144.2500, -23.4500, Longreach
145.7753, -16.9256, Cairns
""")
fh.close()
uri = "eg.csv?delimiter=%s&xField=%s&yField=%s" % (",", "x", "y")
layer = QgsVectorLayer(uri, "eglayer", "delimitedtext")
QgsMapLayerRegistry.instance().addMapLayer(layer)
img = QImage(QSize(800,600), QImage.Format_ARGB32_Premultiplied)
color = QColor(255,255,255)
img.fill(color.rgb())
p = QPainter()
p.begin(img)
render = QgsMapRenderer()
lst = [ layer.getLayerID() ] # add ID of every layer
render.setLayerSet(lst)
rect = QgsRectangle(render.fullExtent())
rect.scale(1.1)
render.setExtent(rect)
render.setOutputSize(img.size(), img.logicalDpiX())
render.render(p)
p.end()
img.save("render.png","png")
Apa yang benar-benar ingin saya lakukan adalah sama, tetapi gunakan QgsComposition
, dan simpan seperti pdf misalnya. Buku masak itu mengatakan:
Saat menggunakan komposer dalam aplikasi mandiri, Anda dapat membuat instance peta renderer Anda sendiri dengan cara yang sama seperti yang ditunjukkan pada bagian di atas dan meneruskannya ke komposisi.
Bit ini saya tidak bisa lakukan, semua usaha saya mendapatkan peta kosong, atau segfault. Saya menjalankan linux mint 13, menggunakan qgis 1.8.0. Akan lebih bagus jika seseorang dapat menunjukkan kepada saya bagaimana memodifikasi contoh sederhana menjadi contoh yang menggunakan komposer.
2.4
dan di atas, lihat jawaban ini berdasarkan contoh yang sama yang seharusnya berfungsi gis.stackexchange.com/a/223127/36886QgsMapRenderer sudah ditinggalkan di 2,4 dan di atas, saya telah memperbarui bagian yang dihentikan dari jawaban ini untuk sesuatu yang harus bekerja dari
2.4
ke2.18.2
.sumber
layer.getLayerID()
tidak berfungsi dan harus diubah ke:layer.id()
Mungkin kode ini bermanfaat, meskipun itu bukan aplikasi mandiri:
Peta ini didasarkan pada proyek QGIS. Anda dapat menemukan contoh lengkap di sini: http://www.qgis.nl/media/2013/08/composerimage_demo.zip
sumber
QgsComposition
tanpa meneleponiface.mapCanvas().mapRenderer()
.