Getting Started with Python Programming QGIS Tutorials and Tips Author Ujaval Gandhi http://google.com/+UjavalGandhi Translations by Christina Dimitriadou Paliogiannis Konstantinos Tom Karagkounis This work is licensed under a Creative Commons Attribution 4.0 International License. Ξεκιν■ντας προγραµµατισµ■ µε την Python Το QGIS ■χει µια ισχυρ■ διασ■νδεση προγραµµατισµο■ που σας επιτρ■πει να επεκτε■νεται την βασικ■ λειτουργικ■τητα του λογισµικο■, καθ■ς και γρ■φει σεν■ρια για την αυτοµατοπο■ηση εργασι■ν σας. Το QGIS υποστηρ■ζει τη γνωστ■ γλ■σσα Python scripting. Ακ■µα και αν ε■στε αρχ■ριος, µαθα■νοντας λ■γο Python και QGIS διεπαφ■ προγραµµατισµο■, θα ε■στε πολ■ πιο παραγωγικο■ στην εργασ■α σας. Αυτ■ το σεµιν■ριο δεν υποθ■τει καµ■α προηγο■µενη γν■ση προγραµµατισµο■ και ■χει σκοπ■ να δ■σει µια εισαγωγ■ στην Python scripting στο QGIS (PyQGIS). Επισκ■πηση του ■ργου Θα φορτ■σουµε ■να διανυσµατικ■ σηµε■ο στρ■µατος εκπροσωπ■ντας ■λα τα µεγ■λα αεροδρ■µια και θα χρησιµοποι■σουµε την Python για να δηµιουργ■σουµε ■να αρχε■ο κειµ■νου µε το ■νοµα του αερολιµ■να, κωδικ■ αεροδροµ■ου, το γεωγραφικ■ πλ■τος και µ■κος για κ■θε αεροδρ■µιο στο στρ■µα. Π■ρτε τα δεδοµ■να Θα χρησιµοποι■σουµε τα Αεροδρ■µια <http://www.naturalearthdata.com/downloads/10m-cultural-vectors/airports/> _ dataset απ■ Natural Earth. Κατεβ■στε το Airports αρχε■ο. Πηγ■ δεδοµ■νων [naturalearth] _ ∆ιαδικασ■α 1. Στο QGIS, µεταβε■τε στη διε■θυνση: menuselection: Επ■πεδα -> Προσθ■κη Vector Layer. Αναζητ■στε το `` αρχε■ο ne_10m_airports.zip`` και κ■ντε κλικ στο: guilabel: Open. Επιλ■ξτε το `` ne_10m_airports.shp`` στρ■µα και κ■ντε κλικ στο: guilabel: OK. 2. Θα δε■τε το `` ne_10m_airports`` στρ■µα ■χει τοποθετηθε■ στο QGIS. 3. Επιλ■ξτε το: guilabel: εργαλε■ο Identify και κ■ντε κλικ σε οποιοδ■ποτε απ■ τα σηµε■α για να εξετ■σετε τα διαθ■σιµα χαρακτηριστικ■. Θα δε■τε ■τι το ■νοµα του αεροδροµ■ου και ο 3-ψ■φιος κωδικ■ς του περι■χονται στα χαρακτηριστικ■ `` name`` και `` iata_code`` αντ■στοιχα. 4. Το QGIS παρ■χει µια ενσωµατωµ■νη κονσ■λα, ■που µπορε■τε να πληκτρολογ■σετε εντολ■ς Python και να π■ρετε το αποτ■λεσµα. Αυτ■ η κονσ■λα ε■ναι ■νας πολ■ καλ■ς τρ■πος για να µ■θετε scripting, αλλ■ και να κ■νετε γρ■γορη επεξεργασ■α δεδοµ■νων. Ανο■ξτε το: guilabel: Python Console πηγα■νοντας στο: menuselection:` Plugins -> Python Console`. 5. Θα δε■τε µια ν■α οθ■νη ανοιχτ■ στο κ■τω µ■ρος του QGIS καµβ■. Θα δε■τε µια γραµµ■ ■πως `` `` >>> στο κ■τω µ■ρος ■που µπορε■τε να πληκτρολογ■σετε εντολ■ς. Για την αλληλεπ■δραση µε το περιβ■λλον QGIS, πρ■πει να χρησιµοποι■σετε την `` iface`` µεταβλητ■. Για να αποκτ■σετε πρ■σβαση στο τρ■χον ενεργ■ στρ■µα του QGIS, πληκτρολογ■στε την παρακ■τω φρ■ση και πατ■στε το πλ■κτρο: kBd: Enter. Η εντολ■ αυτ■ φ■ρνει την αναφορ■ στο ■δη φορτωµ■νο στρ■µα και το αποθηκε■ει στη `` layer`` µεταβλητ■. layer = iface.activeLayer() 6. Υπ■ρχει µια ε■χρηστη λειτουργ■α που ονοµ■ζεται `` dir () `` στη Python ■που σας δε■χνει ■λες τις διαθ■σιµες µεθ■δους για κ■θε αντικε■µενο. Αυτ■ ε■ναι χρ■σιµο ■ταν δεν ε■στε σ■γουροι για το τι λειτουργ■ες ε■ναι διαθ■σιµες για το αντικε■µενο. Εκτελ■στε την ακ■λουθη εντολ■ για να δο■µε τι εν■ργειες µπορο■µε να κ■νουµε για την `` layer`` µεταβλητ■. dir(layer) 7. Θα δε■τε µια µακρ■ λ■στα µε τις διαθ■σιµες λειτουργ■ες. Προς το παρ■ν, θα χρησιµοποι■σουµε µια λειτουργ■α που ονοµ■ζεται `` getFeatures () `` η οπο■α θα σας πα■ρνει την αναφορ■ σε ■λες τις λειτουργ■ες εν■ς στρ■µατος. Στη δικ■ µας περ■πτωση, κ■θε στοιχε■ο θα ε■ναι ■να σηµε■ο που αντιπροσωπε■ει ■να αεροδρ■µιο. Μπορε■τε να πληκτρολογ■σετε την ακ■λουθη εντολ■ για να µετακινηθε■τε µ■σα απ■ κ■θε ■να απ■ τα χαρακτηριστικ■ στην τρ■χουσα στρ■ση. Σιγουρευτε■τε ■τι ■χετε προσθ■σει 2 κεν■ πριν πληκτρολογ■σετε τη δε■τερη γραµµ■. for f in layer.getFeatures(): print f 8. ■πως θα δε■τε στην ■ξοδο, κ■θε γραµµ■ περι■χει µια αναφορ■ σε ■να χαρακτηριστικ■ στο εσωτερικ■ του στρ■µατος. Η αναφορ■ στο χαρακτηριστικ■ αποθηκε■εται στην `` f`` µεταβλητ■. Μπορο■µε να χρησιµοποι■σουµε την `` f`` µεταβλητ■ για να αποκτ■σουµε πρ■σβαση στις ιδι■τητες του κ■θε χαρακτηριστικο■. Πληκτρολογ■στε τα ακ■λουθα για να εκτυπ■σετε το `` name`` και `` iata_code`` για κ■θε χαρακτηριστικ■ αεροδρ■µιο. for f in layer.getFeatures(): print f['name'], f['iata_code'] 9. ■τσι τ■ρα ξ■ρετε π■ς να ■χετε πρ■σβαση µε προγραµµατισµ■ τις ιδι■τητες του κ■θε χαρακτηριστικο■ σε ■να στρ■µα. Τ■ρα, ας δο■µε π■ς µπορο■µε να ■χουµε πρ■σβαση στις συντεταγµ■νες του χαρακτηριστικο■. Οι συντεταγµ■νες του διαν■σµατος χαρακτηριστικ■ν µπορο■ν να προσεγγιστο■ν µε την κλ■ση geometry() συν■ρτησης. Αυτ■ η συν■ρτηση επιστρ■φει ■να γεωµετρικ■ αντικε■µενο που µπορο■µε να αποθηκε■σουµε στη µεταβλητ■ `` geom``. Μπορε■τε να εκτελ■σετε την asPoint()` συν■ρτηση` στο γεωµετρικ■ αντικε■µενο για να π■ρει το x και y τις συντεταγµ■νες του σηµε■ου. Αν το χαρακτηριστικ■ σας ε■ναι µια γραµµ■ ■ ■να πολ■γωνο, µπορε■τε να χρησιµοποι■σετε τις `` asPolyline () `` ■ `` asPolygon () `` συναρτ■σεις . Πληκτρολογ■στε τον ακ■λουθο κ■δικα στη γραµµ■ και πατ■στε το πλ■κτρο: kBd: Enter να δε■τε τις x και y συντεταγµ■νες του κ■θε χαρακτηριστικο■. for f in layer.getFeatures(): geom = f.geometry() print geom.asPoint() 10. Τι θα συµβε■ αν θ■λαµε να π■ρουµε µ■νο τη `` x`` συντεταγµ■νη του χαρακτηριστικο■; Μπορε■τε να καλ■σετε τη συν■ρτηση x() σχετικ■ µε το αντικε■µενο και να π■ρετε το σηµε■ο x συντεταγµ■νης. for f in layer.getFeatures(): geom = f.geometry() print geom.asPoint().x() 11. Τ■ρα ■χουµε ■λα τα κοµµ■τια που µπορο■µε να εν■σουµε για να δηµιουργ■σουν το επιθυµητ■ αποτ■λεσµα µας. Πληκτρολογ■στε τον ακ■λουθο κ■δικα για να εκτυπ■σετε τα ■νοµα, iata_code, γεωγραφικ■ πλ■τος και µ■κος καθεν■ς απ■ τα χαρακτηριστικ■ του αεροδροµ■ου. Το % s και % f συµβολισµο■ ε■ναι τρ■ποι για να διαµορφ■σετε µια σειρ■ και ■ναν αριθµ■ των µεταβλητ■ν. for f in layer.getFeatures(): geom = f.geometry() print '%s, %s, %f, %f' % (f['name'], f['iata_code'], geom.asPoint().y(), geom.asPoint().x()) 12. Μπορε■τε να δε■τε το εκτυπωµ■νο αρχε■ο στην ■ξοδο της κονσ■λας. ■νας πιο χρ■σιµος τρ■πος για να αποθηκε■σετε την ■ξοδο ε■ναι σε ■να αρχε■ο. Μπορε■τε να πληκτρολογ■σετε τον παρακ■τω κ■δικα για να δηµιουργ■σετε ■να αρχε■ο και να γρ■ψετε την ■ξοδο εκε■. Αντικαταστ■στε τη διαδροµ■ του αρχε■ου µε ■να µονοπ■τι για το δικ■ σας σ■στηµα. Σηµει■στε ■τι προσθ■τουµε `` n`` στο τ■λος της γραµµ■ς µορφοπο■ησης µας. Αυτ■ γ■νεται για να προσθ■σετε µια ν■α γραµµ■, µετ■ προσθ■τουµε τα δεδοµ■να για κ■θε χαρακτηριστικ■. Θα πρ■πει επ■σης να σηµειωθε■ η `` unicode_line = line.encode ('utf-8') `` γραµµ■. Μ■ας και το στρ■µα µας περιλαµβ■νει ορισµ■να στοιχε■α µε τους χαρακτ■ρες Unicode, δεν µπορο■µε να το γρ■ψουµε απλ■ σε ■να αρχε■ο κειµ■νου. Κωδικοποιο■µε το κε■µενο χρησιµοποι■ντας την κωδικοπο■ηση UTF-8 και στη συν■χεια το γρ■φουµε στο αρχε■ο κειµ■νου. output_file = open('c:/Users/Ujaval/Desktop/airports.txt', 'w') for f in layer.getFeatures(): geom = f.geometry() line = '%s, %s, %f, %f\n' % (f['name'], f['iata_code'], geom.asPoint().y(), geom.asPoint().x()) unicode_line = line.encode('utf-8') output_file.write(unicode_line) output_file.close() 13. Μπορε■τε να µεταβε■τε στη θ■ση του αρχε■ου εξ■δου που ■χετε ορ■σει και να ανο■ξετε το αρχε■ο κειµ■νου. Θα δε■τε τα δεδοµ■να απ■ το shapefile των αεροδροµ■ων που εξ■γαµε µε την Python scripting.
© Copyright 2024 Paperzz