Building a Python Plugin



Σχετικά έγγραφα
Using Custom Python Expression Functions

Using the QGIS Browser

Searching and Downloading OpenStreetMap Data

Batch Processing using Processing Framework

Leaflet Web Maps with qgis2leaf

Automating Complex Workflows using Processing Modeler

Performing Spatial Queries

Using Google Maps Engine Connector for QGIS

Nearest Neighbor Analysis

Working with Terrain Data

Georeferencing Topo Sheets and Scanned Maps

Οδηγίες εγκατάστασης και χρήσης Java σε προσωπικό υπολογιστή

Performing Spatial Joins

Basic Raster Styling and Analysis

Interpolating Point Data

Making A Map. QGIS Tutorials and Tips. Author. Ujaval Gandhi Translations by

Εγκατάσταση λογισμικού και αναβάθμιση συσκευής Device software installation and software upgrade

Οδηγίες Σύνδεσης Ασύρματου Δικτύου ΤΜΗΥ&Π. Οδηγίες Σύνδεσης για λοιπά Linux/Unix Συστήματα

Οδηγίες για την εγκατάσταση του πακέτου Cygwin

How to register an account with the Hellenic Community of Sheffield.

Δημιουργία μιας εφαρμογής Java με το NetBeans

Οδηγίες Αγοράς Ηλεκτρονικού Βιβλίου Instructions for Buying an ebook

Writing Python Scripts for Processing Framework

Οδηγίες προς τον τελικό χρήστη για τη σύνδεση στο Ασύρματο Δίκτυο Δεδομένων του ΤΜΗΥ&Π

Υπηρεσία Απομακρυσμένης Πρόσβασης VPN Οδηγός Εγκατάστασης και Διαμόρφωσης για χρήστες λειτουργικών συστημάτων MAC OS X

PortSip Softphone. Ελληνικά Ι English 1/20

Βρίγκας Μιχαήλ Α.Μ.744 Μπράχος Χ. Ευάγγελος Α.Μ.795

Για περισσότερες πληροφορίες σχετικά με τη συμβατότητα του λογισμικού με άλλα λειτουργικά συστήματα, επικοινωνήστε με το τμήμα υποστήριξης πελατών.

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Υπηρεσία διαμοιρασμού αρχείων

ΔΙΑΔΙΚΑΣΙA ΜΕΤΑΦΟΡΑΣ ΥΛΙΚΟΥ ΜΑΘΗΜΑΤΟΣ ΑΠΟ BLACKBOARD VISTA ΣΕ MOODLE

CYGWIN Οδηγίες Χρήσης (Συγγραφέας: Γιώργος ούκας)

ΔΗ Μ Ι Ο ΥΡ Γ Ι Α W I K I με τ η χρήση τ η ς υπ ηρεσίας h t t p : / id ot.com /

ΔΙΑΔΙΚΑΣΙA ΜΕΤΑΦΟΡΑΣ ΥΛΙΚΟΥ ΜΑΘΗΜΑΤΟΣ ΑΠΟ BLACKBOARD VISTA ΣΕ OPEN ECLASS

ΜΑΘΗΜΑ 10 Ο ΟΡΓΑΝΩΣΗ ΤΗΣ Β ΓΙΑ ΧΡΗΣΤΕΣ (NON-EXPERTS) Α. ΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΕΠΙΛΟΓΩΝ 1. TOOLS DATA UTILITIES SWITCHBOARD MANAGER YES

Joomla! with K2 - User Guide

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Εργαστήριο Εγκατάσταση Ubuntu με VirtualBox Εγκατάσταση Ubuntu με Unetbootin Απομακρυσμένη πρόσβαση με Putty/WinSCP

Δημιουργία και επεξεργασία διανυσματικών επιπέδων στο QGIS

VBA ΣΤΟ WORD. 1. Συχνά, όταν ήθελα να δώσω ένα φυλλάδιο εργασίας με ασκήσεις στους μαθητές έκανα το εξής: Version ΗΜΙΤΕΛΗΣ!!!!

Eισαγωγή στο λογισμικό QGis

Tο περιβάλλον Code::Blocks

Εγκατάσταση του εκτυπωτή από το CD λογισμικού και τεκμηρίωσης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

Μετασχηματισμός δεδομένων σε ενιαίο σύστημα αναφοράς στο QGIS

Οδηγός εγκατάστασης λογισμικού NPD EL

Εργαστήριο 1-1 η Άσκηση - Ανάλυση

Tο περιβάλλον Code::Blocks

Digitizing Map Data. QGIS Tutorials and Tips. Author. Ujaval Gandhi Translations by

Ξεκινώντας με το MIT Αρρ Inventor. 1 η Εργασία

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Αν παρ όλα αυτά αντιμετωπίζετε πρόβλημα, επικοινωνήστε με το Κέντρο Δικτύου της ΑΣΠΑΙΤΕ Τηλ , , ,

Οδηγός Σύνδεσης στο Ασύρματο Δίκτυο cs-wifi του Τμήματος Πληροφορικής του Πανεπιστημίου Κύπρου για Windows 7, CentOS 6, Mac OS, IOS, και Android

Hase οδηγίες χρήσης.

Οδηγός Βήμα-Βήμα για να εγκαταστήσετε τα Windows 7 στον Η/Υ σας

ΟΔΗΓΙΕΣ ΣΥΝΔΕΣΗΣ ΣΤΟ ΑΣΥΡΜΑΤΟ ΔΙΚΤΥΟ eduroam

Android Studio για Windows

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Βήμα 1ο. Συνδεθείτε στο σύστημα διαχείρισης του Joomla ιστοχώρου σας. Η διεύθυνση θα είναι:

Ανάπτυξη εφαρμογής Input-Output

Ρυθµ θ ίσ ί ε σ ις ς e-mai a l i dsp s ei e ra r i a a.gr g

ΑΝΑΠΑΡΑΓΩΓΗ ΜΑΘΗΣΙΑΚΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ ΣΤΟ ΦΩΤΟΔΕΝΤΡΟ ΜΑΘΗΣΙΑΚΑ ΑΝΤΙΚΕΙΜΕΝΑ. Οδηγίες για Java

Εγχειρίδιο Χρήστη ECAS

Εργαστήριο 2. Εισαγωγή στο Git Versioning System

Δημιουργώντας μια εφαρμογή ζωγραφικής. 2 ο Μάθημα

ΜΑΘΗΜΑ Άνοιγμα Της Εφαρμογής Επεξεργασίας Κειμένου. 2. Κύρια Οθόνη Της Εφαρμογής Κειμένου ΣΤΟΧΟΙ:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΜΟΝΑΔΑ ΑΡΙΣΤΕΙΑΣ ΕΛ/ΛΑΚ

Hase οδηγίες χρήσης.

Πρόσβαση μέσω webdav. ΚΕ.Δ.Δ. Τ.Ε.Ι. Μεσολογγίου. 3. Στην συνέχεια πληκτρολογούμε το username και το password και πατάμε στο κουμπί Είσοδος.

ΕΓΚΑΤΑΣΤΑΣΗ ΕΦΑΡΜΟΓΩΝ ΓΙΑ ΠΡΟΣΩΠΙΚΟ ΥΠΟΛΟΓΙΣΤΗ (MS WINDOWS, LINUX, MACOS)

JOOMLA CMS ΒΑΣΙΚΗ ΠΑΡΑΜΕΤΡΟΠΟΙΗΣΗ (PART I)

ηµιουργία Αρχείου Πρότζεκτ (.qpf)

ARTius με PostgreSQL

Σημειώσεις για τις Ιστοσελίδες του Google

Εγκατάσταση αρχείων βιβλιοθήκης VHOPE και VHOPE

ΔΙΑΧΕΙΡΙΣΗ ΚΟΙΝΟΧΡΗΣΤΩΝ ΦΑΚΕΛΩΝ ΚΑΙ ΑΡΧΕΙΩΝ

Φύλλο Εργασίας Τίτλος: Εισαγωγική Εφαρμογή

Δημιουργία ιστοσελίδας με Wordpress - Βασικές λειτουργίες

Εγχειρίδιο εγκατάστασης και χρήσης περιοδικών etwinning

SOAP API. Table of Contents

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

Προσομείωση ασύρματων δικτύων με τη χρήση του OPNET Modeler

Εισαγωγή στη Βιοπληροφορική

1. O FrontPage Explorer

Ξεκινώντας με το MIT Αρρ Inventor. 1 η Εργασία

ΣΧΕΔΙΑΣΜΟΣ ΙΣΤΟΣΕΛΙΔΑΣ ΜΕ ΤΗ ΧΡΗΣΗ "ΠΡΟΤΥΠΟΥ ΙΣΤΟΣΕΛΙΔΑΣ" (TEMPLATE) ΣΤΟ ΠΡΟΓΡΑΜΜΑ MICROSOFT OFFICE SHAREPOINT DESIGNER 2007

ΕΡΓΑΣΤΗΡΙΟ 16. Χρησιμοποιώντας τον Αποσφαλματιστή (Debugger) του Eclipse

NetBeans και σχετικά προγράμματα. Κακαρόντζας Γεώργιος Κέντρο Αριστείας Ανοιχτού Λογισμικού ΑΠΘ 1ο Θερινό Σχολείο Κώδικα

Κέντρο υποστήριξης HP. Εισαγωγή. Τι χρειάζεται να γνωρίζετε. Λήψη και εγκατάσταση της λύσης Vista στα Windows 8. 1 of 5 1/7/2014 2:09 μμ

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD για εξωτερικούς χώρους v3.14

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Ράβδος Εργαλείων, σχεδόν τα ίδια εργαλεία και εικονίδια υπάρχουν όπως στα άλλα προγράμματα που έχετε μάθει μέχρι σήμερα.

Άσκηση. Εξοικείωση με διαδικασία εγγραφής μαθητών σε κάποιο μάθημα και διαδικασία μεταφοράς μαθημάτων μεταξύ διαφορετικών συστημάτων moodle

1. Τρόποι πρόσβασης στο σας

ΕΠΕΞΕΡΓΑΣΙΑ ΒΙΝΤΕΟ ΜΕ ΤΟ ΠΡΟΓΡΑΜΜΑ VSDC FREE VIDEO EDITOR

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14

RMCLab. Remote Monitored and Controlled Laboratory

Vodafone Business Connect

Android Studio για Linux

Δημιουργία Λογαριασμού Διαχείρισης Business Telephony Create a Management Account for Business Telephony

Transcript:

Building a Python Plugin QGIS Tutorials and Tips Author Ujaval Gandhi http://google.com/+ujavalgandhi Translations by Christina Dimitriadou Paliogiannis Konstantinos Tom Karagkounis Despoina Karfi This work is licensed under a Creative Commons Attribution 4.0 International License.

Δημιουργία ενός πρόσθετου στην Python. Τα πρόσθτε είναι ένας υπέροχος τρόπος να επεκτίνουμε την λειτουργικότητα του QGIS. Μπορείτε να γράψετε πρόσθετα χρησιμοποιώντας Python τα οποία μπορούν να είναι από την εισαγωγή ενός απλού κουμπιού μέχρι την δημιουργία μιας εκλεπτισμένης εργαλειοθήκης. Αυτή η εργασία θα παραθέσει την διαδικασία η οποία απαιτείται στην ρύθμιση του περιβάλλοντος ανάπτυξης σας, σχεδιάζοντας την διεπαφή με χρήστη για ένα πρόσθετο και γράφοντας κώδικα με σκοπό να αλληλεπιδράσετε με το QGIS. Παρακαλώ διαβάστε την άσκηση Ξεκινώντας προγραμματισμό με την Python για να εξοικειωθείτε με τα βασικα βήματα. Περίληψη του αντικειμένου. Θα δημιουργήσουμε ένα απλό πρόσθετο που λέγεται "Αποθήκευση χαρακτηριστικών" το οποίο θα επιτρέπει στους χρήστες να πάρουν ένα διανυσματικό στρώμα και να γράψουν τα χαρακτηριστικά του σε ένα αρχείο CSV. Πάρτε τα εργαλεία ηµιουργ ς Qt To Qt <http://www.qt.io/>`_είναι μια πλατφόρμα ανάπτυξης λογισμικού η οποία χρησιμοποιείται για να δημιουργεί εφαρμογέ για Windows, Mac, Linux καθώς και για διάφορα λειτουργικά συστήματα για κινητά. Το ίδιο το QGIS είναι γραμμένο χρησιμοποιώντας την πλατφόρμα Qt. Για την ανάπτυξη πρόσθετων, θα χρησιμοποιήσουμε μια εφαρμογή που λέγεται `Qt Creator για να σχεδιάσουμε την διεπαφή για το πρόσθετό μας. Μεταφορτώστε και εγκαταστείστε το λογισμικό Qt Creator από το SourgeForge εσµοι Python για το Qt Δεδομένου οτι αναπτύσουμε ένα πρόσθετο στην Python, χρειάζεται να εγκαταστήσουμε τους δεσμού python για το Qt. Η μέθοδος για την εγκατάσταση αυτή θα εξαρτηθεί από την πλατφόρμα που χρησιμοποιείτε. Για την δημιουργία των πρόσθετων θα χρειαστούμε το εργαλείο γραμμής εντολών pyrcc4. Windows Κατεβάστε το OSGeo4W network installer και επιλέξτε το Express Desktop Install. Εγκαταστείστε το πακέτο QGIS. Μετά την εγκατάσταση, θα έχετε πρόσβαση στο εργαλείο pyrcc4 μέσω του OSGeo4W Shell. Mac Εγκαταστείστε τον διαχειριστή πακέτων Homebrew <http://brew.sh>". Εγκαταστε στε το πακ το ``PyQt` τρέχοντας την παρακάτω εντολή. brew install pyqt Linux Λαμβάνοντας υπόψην την διανομή σας, βρείτε και εγκαταστείστε το πακέτο python-qt4. Στα Ubuntu και τις διανομές Debian, μπορείτε να χρησιμοποιείσετε την παρακάτω εντολή. sudo apt-get install python-qt4

Ενας επεξεργαστ ς κειµ νου να Python IDE Κάθε είδους ανάπτυξη λογισμικού χρειάζεται έναν καλό επεξεργαστή κειμένου. Αν έχετε ήδη κάποιον επεξεργαστή κειμένου ή ένα IDE (Ενσωματωμένο περιβάλλον ανάπτυξης), μπορείτε να το χρησιμοποιήσετε για αυτή την άσκηση. Σε διαφορετική περίπτωση, κάθε πλατφόρμα σας δίνει την δυνατότητα να χρησιμοποιήσετε μια μεγάλη ποικιλία από δωρεάν ή επι πληρωμή επεξεργαστές κειμένων. Επιλέξτε έναν που να ταιριάζει με τις ανάγκες σας. Αυτή η άσκηση χρησιμοποιεί τον επεξεργαστή Notepad++ για Windows Windows To Notepad++ είναι ένας καλός, δωρεάν επεξεργαστής για Windows. Κατεβάστε και εγκαταστείστε τον επεξεργαστή Notepad++ editor. Note Αν χρησιμοποιείτε το Notepad++, φροντίστε να έχετε επιλέξει το Replace by space στο Settings Preferences Tab Settings. Η Python είναι αρκετά ευαίσθητη όταν υπάρχουν κενά και αυτή η ρύθμιση θα φροντίσει ώστε οι καρτέλες και τα κενά να διαχειρίζονται με τον σωστό τρόπο. ηµιουργ α πρ σθετου Υπάρχει ένα πολύ χρήσιμο πρόσθετο στο QGIS που ονομάζεται Plugin Builder το οποίο δημιουργεί όλα τα κατάλληλα αρχεία και το πρότυπο του κώδικα για το πρόσθετο. Βρείτε και εγκαταστείστε το πρόσθετο Plugin Builder. Βλέπε Χρησιμοποιώντας Πρόσθετες Λειτουργίες για περισσότερες λεπτομέρειες για το πως να εγκαταστείσετε ένα πρόσθετο. Μεταφ ρτωση πρ σθετου Αυτός είναι ένας ακόμα βοηθός για τα πρόσθετα ο οποίος επιτρέπει την επαναλαμβανόμενη ανάπτυξη πρόσθετων. Χρησιμοποιώντας αυτό το πρόσθετο, μπορείτε να αλλάξετε τον κώδικα του πρόσθετού σας και να κάνετε τις αλλαγές να αντικατοπτρίζονται στο QGIS χωρίς να πρέπει να κάνετε επανεκκίνηση στο QGIS κάθε φορά. Βρείτε και εγκαταστείστε το πρόσθετο Plugin Reloader. Δείτε το Χρησιμοποιώντας Πρόσθετες Λειτουργίες για περισσότερες λεπτομέρειες για την εγκατάσταση πρόσθετων. Note Ο επαναφορτωτής πρόσθετων είναι ένα πειραματικό πρόσθετο. Φροντίστε να έχετε επιλέξει το Show also experimental plugins στις ρυθμίσεις Plugin Manager αν δεν μπορείτε να το βρείτε. Διαδικασία 1. Ανοίξτε το QGIS. Πηγαίνετε στο Plugins Plugin Builder Plugin Builder.

2. Θα δείτε το παράθυρο διαλόγου QGIS Plugin Builder με μία φόρμα. Μπορείτε να ολοκληρώσετε την φόρμα αυτή με λεπτομέρεις που να σχετίζονται με το πρόσθετό σας. Η Class name θα είναι το όνομα από την κατηγορία της Python που περιέχει την λογική για το πρόσθετο. Αυτό θα είναι επίσης και το όνομα του φακέλου που θα περιέχει όλα τα αρχεία του πρόσθετου. Εισάγετε ως όνομα για την κατηγορία το SaveAttributes. Προσθέστε μια περιγραφή στο πεδίο Description. Το Module name θα είναι το όνομα του κεντρικού αρχείου της python για το πρόσθετο. Εισάγετε το ως save_attributes. Αφήστε τους αριθμούς της έκδοσης ίδιους. Η τιμή του Text for menu item θα είναι ο τρόπος με τον οποίο οι χρήστες θα βρίσκουν το πρόσθετό σας στο μενού του QGIS. Εισάγετέ το ως Save Attributes as CSV. Εισάγετε το όνομά σας και την διεύθυσνη του ηλεκτρονικού σας ταχυδρομείου στα κατάλληλα πεδία. Το πεδίο Menu θα καθορίσει την τοποθεσία του πρόσθετού σας όταν αυτό θα προστεθεί στο QGIS. Λαμβάνοντας υπόψιν οτι το πρόσθετό σας είναι για διανυσματικά δεδομένα, επιλέξτε "Vector. Κάντε κλικ στο κουτί Flag the plugin as experimental στο κάτω μέρος της οθόνης. Κάντε κλικ στο OK.

3. Έπειτα θα σας ζητηθεί να επιλέξετε ένα φάκελο για το πρόσθετό σας. Θα χρειαστεί να μεταφερθείτε στον φάκελο με τα QGIS python πρόσθετα στον υπολογιστή σας και να επιλέξετε Select Folder. Ενας τυπικός φάκελος.qgis2/ βρίσκεται στον βασικό σας φάκελο. Η θέση του φακέλου plugin εξαρτάται από την πλατφόρμα που χρησιμοποιείτε και είναι συνήθως : (Replace username with your login name) Windows c:\users\username\.qgis2\python\plugins Mac /Users/username/.qgis2/python/plugins Linux

/home/username/.qgis2/python/plugins 4. Θα δείτε ένα παράθυρο το οποίο θα σας επιβεβαιώνει οτι το πρότυπο του πρόσθετου σας έχει δημιουργηθεί. Συγκρατήστε την διαδρομή για τον φάκελο του πρόσθετου,

5. Πριν μπορέσουμε να χρησιμοποιήσουμε το πρόσφατα δημιουργημένο πρόσθετο, χρειάζεται να συντάξουμε το αρχείο resources.qrc το οποίο δημιουργήθηκε από το Plugin Builder. Τρέξτε το OSGeo4W Shell σε Windows ή σε ένα τερματικό σε Mac ή Linux.

6. Μεταφερθείτε στον φάκελο του πρόσθετου όπου το εξαγόμενο του Plugin Builder δημιουργήθηκε. Μπορείτε να χρησιμοποιήσετε την εντολή cd ακολουθούμενη από την διαδρομή για τον φάκελο. cd c:\users\username\.qgis2\python\plugins\saveattributes 7. Αφού μεταφερθείτε στον φάκελο, πληκτρολογίστε make. Αυτό θα τρέξει την εντολή pyrcc4 την οποία εγκαταστήσαμε ως μέρος του Qt bindings για την python. make

ουργήσαμε. Κλείστε το QGIS και ξανατρέξτε το πάλι. Πηγαίνετε στο P ε οτι υπ ρχει να ν ο εικον διο στην γραµµ εργαλε ων και µια ν α εγγραφ κ τω απ το µεν 9. Θα παρατηρήσετε ένα νέο κενό παράθυρο διαλόγου με όνομα Save Attributes. Κλείστε αυτό το παράθυρο διαλόγου.

10. Τώρα θα σχεδιάσουμε το δικό μας παράθυρο διαλόγου και θα προσθέσουμε μερικά στοιχεία στην διεπαφή χρήστη. Ανοίξτε το πρόγραμμα Qt Creator και πηγαίνετε στο File --> Open File or Project...

11. Μεταφερθείτε στον φάκελο του πρόσθετου και επιλέξτε το αρχείο save_attributes_dialog_base.ui. Πατήστε Open. 12. Τώρα θα δείτε ένα κενό παράθυρο διαλόγου από το πρόσθετο. Μπορείτε να επιλέξετε και να σύρετε στοιχεία από το παράθυρο στα αριστερά, στο παράθυρο διαλόγου. Θα προσθέσουμε ενός είδους Widget:guilabel:Combo Box type of Input Widget. Σύρετέ το στο παράθυρο διαλόγου του πρόσθετου.

13. Αλλάξτε το μέγεθος στο παράθυρο. Τώρα σύρετε στο παράθυρο διαλόγου ένα :Label type Display Widget.

14. Πατήστε σην ετικέτα κείμενο και εισάγετε το Select a layer.

15. Σώστε αυτό το αρχείο πηγαίνοντας στο File Save save_attributes_dialog_base.ui. Συγκρατήστε οτι το όνομα από το αντικείμενοκουτί είναι combobox. Για να αλληλεπιδράσετε με το αντικείμενο χρησιμοποιώντας εντολές στην python, θα πρέπει να το καλείτε με το όνομα αυτό.

16. Ας τρέξουμε το πρόσθετο ώστε να μπορούμε να δούμε τις αλλαγές στο παράθυρο διαλόγου. Πηγαίνετε στο Plugin Plugin Reloader Choose a plugin to be reloaded.

17. Επιλέξτε SaveAttributes από το παράθυρο διαλόγου Configure Plugin reloader. 18. Τώρα πατήστε στο κουμπί Save Attributes as CSV. Θα δείτε ένα καινούριο σχεδιασμένο παράθυρο διαλόγου.

19. Ας προσθέσουμε τώρα λογική στο πρόσθετο το οποίο θα γεμίσει το κουτί με στρώματα τα οποία φορτώνονται στο QGIS. Πηγαίνετε στον φάκελο του πρόσθετου και φορτώστε το αρχείο save_attributes.py σε έναν επεξεργαστή κειμένου. Μεταφερθείτε προς τα κάτω και βρείτε την μέθοδο run(self). Αυτή η μέθοδος θα καλείται όταν πατάτε το κουμπί στην γραμμή εργαλείων ή επιλέγετε το πρόσθετο από το μενού. Προσθέστε τον παρακάτω κώδικα στην αρχή της μεθόδου. Αυτός ο κώδικας παίρνει όλα τα στρώματα τα οποία είναι φορτωμένα στο QGIS και τα προσθέτει στο αντικείμενο κουτί από το παράθυρο διαλόγου του πρόσθετου. layers = self.iface.legendinterface().layers() layer_list = [] for layer in layers: layer_list.append(layer.name()) self.dlg.combobox.additems(layer_list)

20. Πίσω στο κύριο παράθυρο του QGIS, φορτώστε το πρόσθετο πηγαίνοντας στο Plugins Plugin Reloader Reload plugin: SaveAttributes. Εναλλακτικά, μπορείτε απλά να πατήσετε F5. Για να δοκιμάσετε την λειτουργία, θα πρέπει να προσθέσετε μερικά στρώματα στο QGIS. Αφού προσθέσετε τα δεδομένα, τρέξτε το πρόσθετο πηγαίνοντας στο Vector Save Attributes Save Attributes as CSV.

21. Θα δείτε οτι το κουτί είναι τώρα γεμάτο με τα ονόματα των στρωμάτων τα οποία έχετε φορτώσει στο QGIS. 22. Ας προσθέσουμε μερικά στοιχεία διεπαφής χρήστη ακόμα. Πηγαίνετε πάλι στο Qt Creator" και φορτ στε το αρχε ο ``save_attributes_dialog_base.ui.

Προσθέστε μια "Ετικέτα" Display Widget και αλλάξτε το κείμενο στο Select output file. Προσθέστε ένα LineEdit` Input Widget το οποίο θα δείχνει την διεύθυσνη του εξαγόμενου αρχείου που έχει επιλεχθεί από τον χρήστη. Μετά, προσθέστε ένα κουμπί Push Button Button και αλλάξτε την ετικέτα του σε... Σημειώστε οτι τα ονόματα των αντικειμένων από τα widget καθώς θα πρέπει να τα χρησιμοποιήσετε για να αλληλεπιδράσετε μαζί τους. Σώστε το αρχείο. 23. Τώρα θα προσθέσουμε κώδικα στην python μέσω του οποίου θα ανοίγει ένας περιηγητής αρχείων όταν ο χρήστης θα πατάει το κουμπί... και να εμφανίζει την επιλεγμένη διαδρομή σε μια γραμμή κειμένου στο widget. Ανοίξτε το αρχείο save_attributes.py σε έναν επεξεργαστή κειμένου. Προσθέστε το QFileDialog στην λίστα με τα εισαγόμενα στην κορυφή του αρχείου

24. Προσθέστε μια νέα μέθοδο που λέγεται select_output_file χρησιμοποιώντας τον παρακάτω κώδικα. Αυτός ο κώδικας θα ανοίγει έναν περιηγητή και θα εμφανίζει στην γραμμή του widget την διαδρομή του αρχείου που έχει επιλέξει ο χρήστης. def select_output_file(self): filename = QFileDialog.getSaveFileName(self.dlg, "Select output file ","", '*.txt') self.dlg.lineedit.settext(filename)

25. Τώρα πρέπει να προσθέσετε κώδικα ώστε όταν το κουμπί... ενεργοποιείται, να καλείται η μέθοδος select_output_file. Μεταφερθείτε προς τα πάνω στην μέθοδο init και προσθέστε τις παρακάτω γραμμές στο τέλος της. Αυτός ο κώδικάς θα σβήνει το κείμενο που είχε φορτωθεί προηγουμένως (αν υπάρχει) στην γραμμή του widget και επίσης θα συνδέει την μέθοδο select_output_file με το σήμα που δίνει το "κλικ" όταν ο χρήστης πατάει το κουμπί στο widget. self.dlg.lineedit.clear() self.dlg.pushbutton.clicked.connect(self.select_output_file)

26. Πίσω στο QGIS, φορτώστε το πρόσθετο και ανοίξτε το παράθυρο διαλόγου Save Attributes`. Αν όλα έχουν πάει καλά, θα είστε σε θέση να κάνετε κλικ στο κουμπί... και επιλέξτε το εξαγόμενο αρχείο κειμένου από τον δίσκο σας.

27. Όταν πατάτε το OK στο παράθυρο διαλόγου του πρόσθετου, δεν συμβαίνει τίποτα. Αυτό συμβαίνει επειδή δεν έχετε προσθέσει λογική ώστε να τραβάτε τα χαρακτηριστικά της πληροφορίας από το στρώμα και να τα γράφετε στο αρχείο κειμένου. Τώρα έχουμε όλα τα κομμάτια στην θέση τους για να ξεκινήσουμε. Βρείτε το σημείο στην μέθοδο run που λέει pass. Αντικαταστήστε το με τον κώδικα παρακάτω. Η εξήγηση για αυτόν τον κώδικα βρίσκεται στο Ξεκινώντας προγραμματισμό με την Python. filename = self.dlg.lineedit.text() output_file = open(filename, 'w') selectedlayerindex = self.dlg.combobox.currentindex() selectedlayer = layers[selectedlayerindex] fields = selectedlayer.pendingfields() fieldnames = [field.name() for field in fields] for f in selectedlayer.getfeatures(): line = ','.join(unicode(f[x]) for x in fieldnames) + '\n' unicode_line = line.encode('utf-8') output_file.write(unicode_line) output_file.close()

28. Τώρα το πρόσθετό μας είναι έτοιμο. Μεταφορτώστε το πρόσθετο και δοκιμάστε το. Θα δείτε οτι το εξαγόμενο αρχείο που έχετε επιλέξει έχει όλα τα χαρακτηριστικά από το διανυσματικό στρώμα. Μπορείτε να συμπιέσετε τον φάκελο του πρόσθετου και να το μοιραστείτε με άλλους χρήστες. Αυτού μπορούν να αποσυμπιέσουν τα περιεχόμενα του φακέλου του πρόσθετου και να δοκιμάσουν το πρόσθετό σας. Αν αυτό είναι ένα πραγματικό πρόσθετο, μπορείτε να το ανεβάσετε στο αποθετήριο πρόσθετων του QGIS <https://plugins.qgis.org/>`_ ώστε όλοι οι χρήστες τους QGIS να είναι σε θέση να βρούν και να κατεβάσουν το πρόσθετό σας. Note Αυτό το πρόσθετο είναι για εκπαιδευτικούς λόγους μόνο. Μην το δημοσιεύσετε ή ανεβάσετε το πρόσθετο αυτό στο αποθετήριο του QGIS. Παρακάτω παραθέτεται το πλήρες αρχείο save_attributes.py ως αναφορά. # -*- coding: utf-8 -*- """ /*************************************************************************** SaveAttributes A QGIS plugin This plugin saves the attribute of the selected vector layer as a CSV file. ------------------- begin : 2015-04-20 git sha : $Format:%H$ copyright : (C) 2015 by Ujaval Gandhi email : ujaval@spatialthoughts.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ """ from PyQt4.QtCore import QSettings, QTranslator, qversion, QCoreApplication from PyQt4.QtGui import QAction, QIcon, QFileDialog # Initialize Qt resources from file resources.py import resources_rc # Import the code for the dialog from save_attributes_dialog import SaveAttributesDialog import os.path class SaveAttributes: """QGIS Plugin Implementation.""" def init (self, iface): """Constructor. :param iface: An interface instance that will be passed to this class which provides the hook by which you can manipulate the QGIS application at run time. :type iface: QgsInterface

""" # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname( file ) # initialize locale locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join( self.plugin_dir, 'i18n', 'SaveAttributes_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qversion() > '4.3.3': QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = SaveAttributesDialog() # Declare instance attributes self.actions = [] self.menu = self.tr(u'&save Attributes') # TODO: We are going to let the user set this up in a future iteration self.toolbar = self.iface.addtoolbar(u'saveattributes') self.toolbar.setobjectname(u'saveattributes') self.dlg.lineedit.clear() self.dlg.pushbutton.clicked.connect(self.select_output_file) # noinspection PyMethodMayBeStatic def tr(self, message): """Get the translation for a string using Qt translation API. We implement this ourselves since we do not inherit QObject. :param message: String for translation. :type message: str, QString :returns: Translated version of message. :rtype: QString """ # noinspection PyTypeChecker,PyArgumentList,PyCallByClass return QCoreApplication.translate('SaveAttributes', message) def add_action( self, icon_path, text, callback, enabled_flag=true, add_to_menu=true, add_to_toolbar=true, status_tip=none, whats_this=none, parent=none): """Add a toolbar icon to the toolbar.

:param icon_path: Path to the icon for this action. Can be a resource path (e.g. ':/plugins/foo/bar.png') or a normal file system path. :type icon_path: str :param text: Text that should be shown in menu items for this action. :type text: str :param callback: Function to be called when the action is triggered. :type callback: function :param enabled_flag: A flag indicating if the action should be enabled by default. Defaults to True. :type enabled_flag: bool :param add_to_menu: Flag indicating whether the action should also be added to the menu. Defaults to True. :type add_to_menu: bool :param add_to_toolbar: Flag indicating whether the action should also be added to the toolbar. Defaults to True. :type add_to_toolbar: bool :param status_tip: Optional text to show in a popup when mouse pointer hovers over the action. :type status_tip: str :param parent: Parent widget for the new action. Defaults None. :type parent: QWidget :param whats_this: Optional text to show in the status bar when the mouse pointer hovers over the action. :returns: The action that was created. Note that the action is also added to self.actions list. :rtype: QAction """ icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setenabled(enabled_flag) if status_tip is not None: action.setstatustip(status_tip) if whats_this is not None: action.setwhatsthis(whats_this) if add_to_toolbar: self.toolbar.addaction(action) if add_to_menu: self.iface.addplugintovectormenu( self.menu, action) self.actions.append(action) return action

def initgui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" icon_path = ':/plugins/saveattributes/icon.png' self.add_action( icon_path, text=self.tr(u'save Attributes as CSV'), callback=self.run, parent=self.iface.mainwindow()) def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" for action in self.actions: self.iface.removepluginvectormenu( self.tr(u'&save Attributes'), action) self.iface.removetoolbaricon(action) # remove the toolbar del self.toolbar def select_output_file(self): filename = QFileDialog.getSaveFileName(self.dlg, "Select output file ","", '*.txt') self.dlg.lineedit.settext(filename) def run(self): """Run method that performs all the real work""" layers = self.iface.legendinterface().layers() layer_list = [] for layer in layers: layer_list.append(layer.name()) self.dlg.combobox.additems(layer_list) # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result: # Do something useful here - delete the line containing pass and # substitute with your code. filename = self.dlg.lineedit.text() output_file = open(filename, 'w') selectedlayerindex = self.dlg.combobox.currentindex() selectedlayer = layers[selectedlayerindex] fields = selectedlayer.pendingfields() fieldnames = [field.name() for field in fields] for f in selectedlayer.getfeatures(): line = ','.join(unicode(f[x]) for x in fieldnames) + '\n' unicode_line = line.encode('utf-8') output_file.write(unicode_line) output_file.close()