Ξεκινώντας προγραμματισμό με την Python

Προειδοποίηση

A new version of this tutorial is available at Getting Started With Python Programming (QGIS3)

Το 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.

../_images/1185.png
  1. Θα δείτε το `` ne_10m_airports`` στρώμα έχει τοποθετηθεί στο QGIS.

../_images/2151.png
  1. Επιλέξτε το: guilabel: εργαλείο Identify και κάντε κλικ σε οποιοδήποτε από τα σημεία για να εξετάσετε τα διαθέσιμα χαρακτηριστικά. Θα δείτε ότι το όνομα του αεροδρομίου και ο 3-ψήφιος κωδικός του περιέχονται στα χαρακτηριστικά `` name`` και `` iata_code`` αντίστοιχα.

../_images/394.png
  1. Το QGIS παρέχει μια ενσωματωμένη κονσόλα, όπου μπορείτε να πληκτρολογήσετε εντολές Python και να πάρετε το αποτέλεσμα. Αυτή η κονσόλα είναι ένας πολύ καλός τρόπος για να μάθετε scripting, αλλά και να κάνετε γρήγορη επεξεργασία δεδομένων. Ανοίξτε το: guilabel: Python Console πηγαίνοντας στο: menuselection:` Plugins -> Python Console`.

../_images/458.png
  1. Θα δείτε μια νέα οθόνη ανοιχτή στο κάτω μέρος του QGIS καμβά. Θα δείτε μια γραμμή όπως `` `` >>> στο κάτω μέρος όπου μπορείτε να πληκτρολογήσετε εντολές. Για την αλληλεπίδραση με το περιβάλλον QGIS, πρέπει να χρησιμοποιήσετε την `` iface`` μεταβλητή. Για να αποκτήσετε πρόσβαση στο τρέχον ενεργό στρώμα του QGIS, πληκτρολογήστε την παρακάτω φράση και πατήστε το πλήκτρο: kBd: Enter. Η εντολή αυτή φέρνει την αναφορά στο ήδη φορτωμένο στρώμα και το αποθηκεύει στη `` layer`` μεταβλητή.

layer = iface.activeLayer()
../_images/551.png
  1. Υπάρχει μια εύχρηστη λειτουργία που ονομάζεται `` dir () `` στη Python όπου σας δείχνει όλες τις διαθέσιμες μεθόδους για κάθε αντικείμενο. Αυτό είναι χρήσιμο όταν δεν είστε σίγουροι για το τι λειτουργίες είναι διαθέσιμες για το αντικείμενο. Εκτελέστε την ακόλουθη εντολή για να δούμε τι ενέργειες μπορούμε να κάνουμε για την `` layer`` μεταβλητή.

dir(layer)
../_images/649.png
  1. Θα δείτε μια μακρά λίστα με τις διαθέσιμες λειτουργίες. Προς το παρόν, θα χρησιμοποιήσουμε μια λειτουργία που ονομάζεται `` getFeatures () `` η οποία θα σας παίρνει την αναφορά σε όλες τις λειτουργίες ενός στρώματος. Στη δική μας περίπτωση, κάθε στοιχείο θα είναι ένα σημείο που αντιπροσωπεύει ένα αεροδρόμιο. Μπορείτε να πληκτρολογήσετε την ακόλουθη εντολή για να μετακινηθείτε μέσα από κάθε ένα από τα χαρακτηριστικά στην τρέχουσα στρώση. Σιγουρευτείτε ότι έχετε προσθέσει 2 κενά πριν πληκτρολογήσετε τη δεύτερη γραμμή.

for f in layer.getFeatures():
  print f
../_images/749.png
  1. Όπως θα δείτε στην έξοδο, κάθε γραμμή περιέχει μια αναφορά σε ένα χαρακτηριστικό στο εσωτερικό του στρώματος. Η αναφορά στο χαρακτηριστικό αποθηκεύεται στην `` f`` μεταβλητή. Μπορούμε να χρησιμοποιήσουμε την `` f`` μεταβλητή για να αποκτήσουμε πρόσβαση στις ιδιότητες του κάθε χαρακτηριστικού. Πληκτρολογήστε τα ακόλουθα για να εκτυπώσετε το `` name`` και `` iata_code`` για κάθε χαρακτηριστικό αεροδρόμιο.

for f in layer.getFeatures():
  print f['name'], f['iata_code']
../_images/848.png
  1. Έτσι τώρα ξέρετε πώς να έχετε πρόσβαση με προγραμματισμό τις ιδιότητες του κάθε χαρακτηριστικού σε ένα στρώμα. Τώρα, ας δούμε πώς μπορούμε να έχουμε πρόσβαση στις συντεταγμένες του χαρακτηριστικού. Οι συντεταγμένες του διανύσματος χαρακτηριστικών μπορούν να προσεγγιστούν με την κλήση geometry() συνάρτησης. Αυτή η συνάρτηση επιστρέφει ένα γεωμετρικό αντικείμενο που μπορούμε να αποθηκεύσουμε στη μεταβλητή `` geom``. Μπορείτε να εκτελέσετε την asPoint()` συνάρτηση` στο γεωμετρικό αντικείμενο για να πάρει το x και y τις συντεταγμένες του σημείου. Αν το χαρακτηριστικό σας είναι μια γραμμή ή ένα πολύγωνο, μπορείτε να χρησιμοποιήσετε τις `` asPolyline () `` ή `` asPolygon () `` συναρτήσεις . Πληκτρολογήστε τον ακόλουθο κώδικα στη γραμμή και πατήστε το πλήκτρο: kBd: Enter να δείτε τις x και y συντεταγμένες του κάθε χαρακτηριστικού.

for f in layer.getFeatures():
  geom = f.geometry()
  print geom.asPoint()
../_images/948.png
  1. Τι θα συμβεί αν θέλαμε να πάρουμε μόνο τη `` x`` συντεταγμένη του χαρακτηριστικού; Μπορείτε να καλέσετε τη συνάρτηση x() σχετικά με το αντικείμενο και να πάρετε το σημείο x συντεταγμένης.

for f in layer.getFeatures():
  geom = f.geometry()
  print geom.asPoint().x()
../_images/1055.png
  1. Τώρα έχουμε όλα τα κομμάτια που μπορούμε να ενώσουμε για να δημιουργήσουν το επιθυμητό αποτέλεσμα μας. Πληκτρολογήστε τον ακόλουθο κώδικα για να εκτυπώσετε τα όνομα, 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())
../_images/1186.png
  1. Μπορείτε να δείτε το εκτυπωμένο αρχείο στην έξοδο της κονσόλας. Ένας πιο χρήσιμος τρόπος για να αποθηκεύσετε την έξοδο είναι σε ένα αρχείο. Μπορείτε να πληκτρολογήσετε τον παρακάτω κώδικα για να δημιουργήσετε ένα αρχείο και να γράψετε την έξοδο εκεί. Αντικαταστήστε τη διαδρομή του αρχείου με ένα μονοπάτι για το δικό σας σύστημα. Σημειώστε ότι προσθέτουμε `` 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()
../_images/1257.png
  1. Μπορείτε να μεταβείτε στη θέση του αρχείου εξόδου που έχετε ορίσει και να ανοίξετε το αρχείο κειμένου. Θα δείτε τα δεδομένα από το shapefile των αεροδρομίων που εξάγαμε με την Python scripting.

../_images/1355.png

If you want to give feedback or share your experience with this tutorial, please comment below. (requires GitHub account)