Suite

Print Composer utilisant l'entrée de plusieurs tables Spatialite avec PyQgis

Print Composer utilisant l'entrée de plusieurs tables Spatialite avec PyQgis


Comment puis-je créer des fichiers PDF à partir de QGIS à l'aide des modèles Print Composer qui incluent beaucoup de texte (à partir d'un modèle de texte) et dans le texte, plusieurs informations proviennent de ma base de données spatiallite. Une carte en fait également partie, mais je n'ai que des problèmes avec les entrées spatialite-text.

Flux de travail :

  • L'utilisateur sélectionne un polygone (c'est le seul calque chargé)
  • Les utilisateurs appuient sur un bouton de plug-in « Imprimez-le pour moi » (En utilisant le nom de polygone, je récupère toutes les informations dont j'ai besoin des tables de ma base de données Spatialite)
  • L'utilisateur obtient un magnifique PDF

Le tableau qui comprend le polygone est différent des tableaux (oui, il y en a plusieurs) qui ont toutes les autres informations, cela est dû à des raisons de saisie de données.

J'ai déjà une solution utilisant QWebView(), mais ma solution n'est pas très bonne pour composer la carte elle-même et si un utilisateur veut changer mes modèles, c'est un peu compliqué. Voici ma solution :

import sys de PyQt4.QtCore import * de PyQt4.QtGui import * de PyQt4.QtWebKit import * import sqlite3 # create web view webview = QWebView() connection = sqlite3.connect('D:allthedata.sqlite') curseur = connection. curseur() cursor.execute('SELECT name FROM information WHERE polygon_nr = 2015') pour la ligne dans cursor.fetchall(): name = row[0] # J'utilise 15 entrées, mais pour simplifier cela, j'utilise uniquement "name " ici # obtenir le modèle et le pousser dans la vue Web template_txt_temp = open("c:/template1.txt") #J'ai plusieurs modèles template_txt = template_txt_temp.read() html = template_txt.replace('$name$', name) # le le modèle n'est que du HTML, mais peut avoir plusieurs pages ; html → # 

Bonjour, c'est juste un texte factice, je veux vous montrer, où je veux # donc insérez le $nom$ de la base de données

print html print type(html) webview.setHtml(html) printer = QPrinter() printer.setPageSize(QPrinter.A4) printer.setOutputFormat(QPrinter.PdfFormat) printer.setOutputFileName(r'C: eport.pdf') webview. print_(imprimante)

Et à partir de cela, j'obtiens un joli PDF. Donc la question essentielle : Comment puis-je obtenir les informations de "nom" de ma base de données et dans Print Composer ? (Et ma question est-elle même compréhensible ?) Peut-être que cette image aide :


Je vous suggère d'effectuer une jointure des tables non spatiales pertinentes avec votre couche spatiale. Pour ce faire, ouvrez les propriétés de votre table spatiale. Vous ouvrez ensuite l'onglet Join et ajoutez les jointures appropriées.

Si vos tables ne partagent pas une clé commune, vous pouvez créer une table de support que vous utiliserez ensuite pour chacune de vos plaques de carte. Ce tableau est ensuite lié aux objets pertinents dans les autres tableaux. Vous pouvez le nommer tbl_mapcoverage et vos attributs pourraient ressembler à ceci :

  • id - identifie de manière unique votre assiette)
  • geom - un polygone qui définit la zone de mise au point de votre carte. Il n'a pas besoin d'être visible.
  • ref_breadandbutterprices - référence au tableau avec des informations non spatiales
  • ref_conveniencestore - référence à la table avec geom contenant le référencement d'un ou plusieurs magasins.

Je suppose que vous savez comment fonctionne la fonctionnalité de l'atlas QGIS]2 et que vous l'utilisez pour effectuer cette tâche.

Si vous souhaitez inclure une relation un à plusieurs, vous pouvez extraire ces données à l'aide d'un script python et générer une table html avec vos données à l'aide d'une fonction.


Voir la vidéo: SpatiaLite, SIG