أكثر

Print Composer باستخدام مدخلات من عدة جداول Spatialite مع PyQgis

Print Composer باستخدام مدخلات من عدة جداول Spatialite مع PyQgis


كيف يمكنني إنشاء ملفات PDF من QGIS باستخدام Print Composer Templates التي تتضمن الكثير من النص (من قالب نصي) وداخل النص تخرج العديد من المعلومات من قاعدة بيانات spatiallite الخاصة بي. الخريطة هي أيضًا جزء منها ، لكني أواجه مشاكل فقط مع مدخلات النص المكاني.

سير العمل:

  • يحدد المستخدم مضلعًا (هذه هي الطبقة الوحيدة التي يتم تحميلها)
  • يضغط المستخدمون على زر "اطبع هذا نيابة عني" (Print this for me ") (باستخدام اسم المضلع أحصل على جميع المعلومات التي أحتاجها من الجداول في قاعدة بيانات Spatialite الخاصة بي)
  • يحصل المستخدم على ملف PDF رائع

الجدول الذي يحتوي على المضلع يختلف عن الجداول (نعم ، هناك عدة) التي تحتوي على جميع المعلومات الأخرى ، ويرجع ذلك إلى أسباب إدخال البيانات.

لدي بالفعل حل باستخدام QWebView () ، لكن الحل الخاص بي ليس جيدًا جدًا لإنشاء الخريطة نفسها وإذا أراد المستخدم تغيير القوالب الخاصة بي ، فهذا معقد بعض الشيء. هنا الحل الخاص بي:

استيراد sys من PyQt4.QtCore استيراد * من PyQt4.QtGui استيراد * من PyQt4.QtWebKit استيراد * استيراد sqlite3 # إنشاء عرض ويب لعرض الويب = اتصال QWebView () = sqlite3.connect ('D:  allthedata.sqlite') المؤشر = اتصال. cursor () cursor.execute ('SELECT name FROM information WHERE polygon_nr = 2015') للصف في cursor.fetchall (): name = row [0] # I use 15 inputs ، ولكن لتبسيط ذلك ، أنا فقط استخدم "name" "هنا # احصل على القالب وادخل إلى webview template_txt_temp = open (" c: /template1.txt ") # لدي عدة قوالب template_txt = template_txt_temp.read () html = template_txt.replace ('$ name $'، name) # the النموذج هو مجرد بعض لغة تأشير النص الفائق ، ولكن يمكن أن تحتوي على عدة صفحات ؛ أتش تي أم أل → # 

مرحبًا ، هذا مجرد نص وهمي ، أريد أن أعرضه لك ، حيث أريد # لذا أدخل $ name $ من قاعدة البيانات

طباعة html نوع الطباعة (html) webview.setHtml (html) printer = QPrinter () printer.setPageSize (QPrinter.A4) printer.setOutputFormat (QPrinter.PdfFormat) printer.setOutputFileName (r'C: report.pdf ') webview. print_ (طابعة)

ومنه أحصل على ملف PDF لطيف. لذا فإن السؤال الأساسي: كيف يمكنني الحصول على معلومات "الاسم" من قاعدة البيانات الخاصة بي إلى Print Composer؟ (وهل سؤالي مفهوم؟) ربما تساعد هذه الصورة:


أود أن أقترح عليك إجراء ربط للجداول غير المكانية ذات الصلة بطبقتك المكانية. قم بذلك عن طريق فتح خصائص الجدول المكاني الخاص بك. يمكنك بعد ذلك فتح علامة التبويب الانضمام وإضافة الصلات ذات الصلة.

إذا كانت الجداول الخاصة بك لا تشترك في مفتاح مشترك ، فيمكنك إنشاء جدول دعم تستخدمه بعد ذلك لكل لوحة من لوحات الخرائط الخاصة بك. ثم يتم ربط هذا الجدول بالعناصر ذات الصلة في الجداول الأخرى. يمكنك تسميته tbl_mapcoverage ويمكن أن تكون سماتك شيئًا مثل هذا:

  • معرف - يحدد لوحة الخاص بك بشكل فريد)
  • geom - مضلع يحدد منطقة التركيز لخريطتك. لا يجب أن تكون مرئية.
  • ref_breadandbutterprices - مرجع للجدول الذي يحتوي على معلومات غير مكانية
  • ref_conveniencestore - مرجع للجدول الذي يحتوي على geom يحتوي على إشارة إلى متجر واحد أو أكثر.

أفترض أنك على دراية بكيفية عمل وظيفة أطلس QGIS] 2 وأنك تستخدمها لإكمال هذه المهمة.

إذا كنت ترغب في تضمين علاقة واحد إلى العديد ، فيمكنك سحب هذه البيانات باستخدام برنامج نصي بيثون وإنشاء جدول html ببياناتك باستخدام وظيفة.


شاهد الفيديو: Spatialite GUI - SQLite - Download and Run Spatialite Graphical User Interface Software - Part I