Lagi

Cetak Komposer menggunakan input dari beberapa tabel Spatialite dengan PyQgis


Bagaimana saya bisa membuat PDF dari QGIS menggunakan Print Composer Templates yang menyertakan banyak teks (dari teks-template) dan di dalam teks beberapa informasi keluar dari spasial-database saya. Peta juga merupakan bagian darinya, tetapi saya hanya mengalami masalah dengan input spasial-teks.

Alur kerja:

  • Pengguna Memilih Poligon (Ini adalah satu-satunya lapisan yang dimuat)
  • Pengguna menekan Tombol Plugin "Cetak ini untuk saya" (Menggunakan Nama Poligon, saya mendapatkan semua informasi yang saya butuhkan dari tabel di DB Spatialite saya)
  • Pengguna mendapatkan PDF yang luar biasa

Tabel yang menyertakan poligon berbeda dengan tabel (ya, ada beberapa) yang memiliki semua informasi lainnya, ini karena alasan entri data.

Saya sudah memiliki solusi menggunakan QWebView(), tetapi solusi saya tidak terlalu bagus untuk menyusun peta itu sendiri dan jika pengguna ingin mengubah template saya, ini agak rumit. Di sini solusi saya:

import sys from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * import sqlite3 # create web view webview = QWebView() connection = sqlite3.connect('D:allthedata.sqlite') cursor = connection. cursor() cursor.execute('SELECT name FROM information WHERE polygon_nr = 2015') untuk baris di cursor.fetchall(): name = row[0] # Saya menggunakan 15 input, tetapi untuk menyederhanakannya, saya hanya menggunakan name “ di sini # dapatkan template dan masukkan ke tampilan web template_txt_temp = open("c:/template1.txt") #Saya memiliki beberapa template template_txt = template_txt_temp.read() html = template_txt.replace('$name$', name) # the template hanya beberapa html, tetapi dapat memiliki beberapa halaman; html → # 

Halo, ini hanya teks dummy, saya ingin menunjukkan kepada Anda, di mana saya # ingin jadi masukkan $name$ dari database

print html jenis cetak(html) webview.setHtml(html) printer = QPrinter() printer.setPageSize(QPrinter.A4) printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(r'C: eport.pdf') tampilan web. cetak_(pencetak)

Dan dari situ saya mendapatkan PDF yang bagus. Jadi pertanyaan penting: Bagaimana cara mendapatkan informasi "nama" dari database saya dan masuk ke Print Composer? (Dan apakah Pertanyaan saya bisa dimengerti?) Mungkin gambar ini membantu:


Saya sarankan Anda melakukan penggabungan tabel non spasial yang relevan dengan lapisan spasial Anda. Lakukan ini dengan membuka properti untuk tabel spasial Anda. Anda kemudian membuka tab Gabung dan tambahkan gabungan yang relevan.

Jika tabel Anda tidak memiliki kunci yang sama, Anda dapat membuat tabel pendukung yang kemudian Anda gunakan untuk setiap pelat peta Anda. Tabel ini kemudian ditautkan ke objek yang relevan di tabel lain. Anda bisa menamakannya tbl_mapcoverage dan atribut Anda bisa seperti ini:

  • id - secara unik mengidentifikasi piring Anda)
  • geom - poligon yang menetapkan area fokus untuk peta Anda. Itu tidak harus terlihat.
  • ref_breadandbutterprices - referensi ke tabel dengan informasi non-spasial
  • ref_conveniencestore - referensi ke tabel dengan geom yang berisi referensi satu atau lebih toko.

Saya berasumsi bahwa Anda mengetahui bagaimana fungsionalitas atlas QGIS]2 bekerja dan Anda menggunakannya untuk menyelesaikan tugas ini.

Jika Anda ingin menyertakan relasi satu ke banyak, Anda dapat menarik data ini dengan menggunakan skrip python dan membuat tabel html dengan data Anda menggunakan fungsi.


Tonton videonya: QGIS Python PyQGIS - Get vector geometry (Oktober 2021).