ΓΕΩΓΡΑΦΙΚΑ ΣΥΣΤΗΜΑΤΑ ΠΛΗΡΟΦΟΡΙΩΝ – PYTHON Λάζαρος Ηλιάδης Καθηγητής ΔΠΘ
ΟΡΙΣΜΟΣ Είναι γνωστά ευρέως και ως G.I.S. Geographic Information Systems. Είναι συστήματα διαχείρισης χωρικών δεδομένων (spatial data) και συσχετισμένων ιδιοτήτων Στα ΣΓΠ τα χωρικά δεδομένα συνδέονται με περιγραφικά δεδομένα, π.χ. μια ομάδα σημείων που αναπαριστούν θέσεις πόλεων συνδέεται με ένα πίνακα όπου κάθε εγγραφή εκτός από τη θέση περιέχει πληροφορίες όπως ονομασία, πληθυσμός κλπ.
ΔΟΜΕΣ ΠΑΡΑΣΤΑΣΗΣ ΔΕΔΟΜΕΝΩΝ Σε ένα ΣΓΠ τα χωρικά δεδομένα μπορούν να αναπαρίστανται με δύο βασικές δομές: την διανυσματική δομή (Vector) και τη ψηφιδωτή δομή (Raster).
VECTOR Διανύσματα (Vector). Όλα τα χωρικά δεδομένα μπορούν να αναπαρασταθούν με τρεις βασικούς τύπου γεωμετριών: σημεία, γραμμές, πολύγωνα. Έτσι για την απόδοση της θέσης μια πόλης σε ένα χάρτη μπορεί να χρησιμοποιηθεί ένα σημείο, για την αποτύπωση του οδικού δικτύου μια γραμμή αποτελούμενη από πολλές κορυφές και για την αποτύπωση μιας ιδιοκτησίας ένα πολύγωνο. Στην ουσία τα πάντα αναπαρίστανται από γραμμές. Το σημείο είναι μια γραμμή μηδενικού μήκους, ενώ το πολύγωνο είναι μια ακολουθία γραμμών με αρχή και τέλος την ίδια κορυφή. Η γεωμετρία που θα υιοθετηθεί για το συμβολισμό ενός αντικειμένου εξαρτάται από την κλίμακα απεικόνισης και το σκοπό της εφαρμογής που αναπτύσσεται. Έτσι π.χ. σε μια πολύ μεγάλη κλίμακα (1:1000) τα κτίσματα αποτυπώνονται ως πολύγωνα, ενώ σε μικρότερες κλίμακες (1:10.000) είναι ορθότερο να χρησιμοποιηθεί η γεωμετρία του σημείου. Τέλος κάθε γεωμετρία συνδέεται με μια σχέση 1-1 με μια εγγραφή σε ένα πίνακα περιγραφικών χαρακτηριστικών.
Ψηφιδωτά (Raster). Η ψηφιδωτή δομή δεδομένων χρησιμοποιείται όταν το χωρικό φαινόμενο που αποτυπώνεται χαρακτηρίζεται ως συνεχής μεταβλητή (π.χ. το υψόμετρο του εδάφους, η κατανομή του θορύβου) ή όταν στο ΣΓΠ θέλουμε να ενσωματώσουμε μια δορυφορική εικόνα ή μια σαρωμένη αεροφωτογραφία. Οι ψηφιδωτές δομές δεδομένων έχουν περιορισμένες δυνατότητες σύνδεσης με περιγραφικά χαρακτηριστικά. Παράδειγμα πληροφορίας ψηφιδωτής δομής σε ένα GIS είναι η πιο κάτω εικόνα (Χάρτης Οικιστικής Πυκνότητας) που περιέχει την πληροφορία του αριθμού κατοικιών ανά εκτάριο σε ψηφιδωτή δομή.
Πρωτογενή δεδομένα Τα GIS προσφέρουν γραφικό περιβάλλον εργασίας Μπορούν να περιέχουν Ψηφιδωτά Πρωτογενή δεδομένα. Τέτοια είναι τα δεδομένα της τηλεπισκόπισης. Είναι ψηφιακές εικόνες που προέρχονται από αισθητήρες τοποθετημένους σε αεροπλάνα ή δορυφόρους. Οι αισθητήρες αυτοί καταγράφουν την ποσότητα της ηλεκτρομαγνητικής ακτινοβολίας που εκπέμπεται ή ανακλάται Η ανάλυση είναι χωρική, φασματική και χρονική.
Διανυσματικά πρωτογενή δεδομένα Κυρίως τοπογραφικές μετρήσεις πεδίου με ακρίβεια χιλιοστού Μετρήσεις που γίνονται με GPS (Αμερικάνικο) GLONASS (Ρώσικο) GALILEO (Ευρωπαικό). Επίσης με το LiDAR (Light Detection and Ranging) από αεροπλάνο ή ελικόπτερο με ακρίβεια 15 cm
Διανυσματικά δευτερογενή δεδομένα Γίνεται με τη διαδικασία της Ψηφιοποίησης διανυσματικών οντοτήτων από χάρτες Γίνεται σε οθόνη Επίσης γίνεται και με τη χρήση προγραμμάτων ελεύθερου λογισμικού όπως το QGIS αλλά και εμπορικών όπως τα προγράμματα ArcGis!
Προμήθεια δεδομένων Στην Ελλάδα μπορεί κανείς να προμηθευτεί δεδομένα από ιδιωτικές εταιρείες που παράγουν ψηφιακά δεδομένα ή από κρατικές υπηρεσίες ή οργανισμούς Γεωγραφική Υπηρεσία Στρατού ΓΥΣ 1:50000 από αεροφωτογραφίες αλλά και 1:5000 web.gys.gr Υδρογραφική Υπηρεσία Πολεμικού Ναυτικού ΥΥΠΝ Υπουργείο Περιβάλλοντος (μεγάλης κλίμακας) Εθνική Στατιστική Υπηρεσία 1: και 1:5000 Κτηματική Εταιρεία Δημοσίου Οργανισμός Κτηματολογίου και Χαρτογράφησης Υπηρεσία Πολιτικής Αεροπορίας ΥΠΑ Μεσαίες και μεγάλες κλίμακες Υπουργείο Γεωργίας Ελεύθερα δεδομένα από το Link geodata.gov.gr
Format Μορφότυπα
ΣΔΒΔ Όπως έχουμε πει τα ΓΣΠ είναι χωρικές βάσεις δεδομένων Ανάλογα με τον τρόπο αποθήκευσης των δεδομένων διακρίνουμε: ΣΧΕΣΙΑΚΑ RDBMS (τα δεδομένα αποθηκεύονται σε δισδιάστατους πίνακες). Περισσότερο από το 95% Αντικειμενοστραφή ODBMS Αντικειμενο-σχεσιακά ORDBMS Ερωτήματα για την ανάκληση πληροφοριών γίνονται μέσω της SQL (Structured Query Language) Παράδειγμα ερωτήματος SQL SELECT * FROM CITIES WHERE POPULATION>200000
ΠΡΟΓΡΑΜΜΑΤΙΖΟΝΤΑΣ ΣΕ PYTHON Το QGIS επιτρέπει τη συγγραφή και εκτέλεση κώδικα στη γλώσσα Scripting PYTHON. Έτσι έχουμε προγραμματισμό σε PyQGiS Θα χρησιμοποιήσουμε το zip file ne_10m_airports.zip από το dataset Airports της Natural Earth ted_with_pyqgis.html ted_with_pyqgis.html
ΠΡΟΣΘΗΚΗ ΔΙΑΝΥΣΜΑΤΙΚΟΥ ΕΠΙΠΕΔΟΥ Το QGIS δέχεται και zip αρχεία από τα οποία επιλέγουμε να ανοίξουμε αυτό που επιθυμούμε Ανοίγω το ne_10m_airports.shp
Στη Κονσόλα του Python Εκεί υπάρχει το σύμβολο >>> όπου μπορώ να γράψω τον κώδικά μου layer = iface.activeLayer() Αυτή η εντολή κάνει ενεργό το τρέχον επίπεδο και το αποθηκεύει στην μεταβλητή layer
Προκειμένου να δω όλες τις διαθέσιμες από το Python μεθόδους που μπορούν να ασκηθούν σε ένα αντικείμενο γράφω dir(layer)
for f in layer.getFeatures(): print f Η εντολή getFeatures θα μας παρουσιάσει όλες τις περιπτώσεις των δεδομένων του τρέχοντος επιπέδου. Εδώ κάθε αεροδρόμιο θα είναι και μια περίπτωση που θα παρουσιαστεί.
for f in layer.getFeatures(): print f['name'], f['iata_code'] Θα εμφανιστεί το όνομα και ο κωδικός iata κάθε αεροδρομίου for f in layer.getFeatures(): geom = f.geometry() print geom.asPoint() Θα εμφανίσει τις συντεταγμένες στο χάρτη κάθε αεροδρομίου. Επειδή τα αεροδρόμια είναι κουκίδες χρησιμοποιώ την asPoint() αν ήταν γραμμή ή πολύγωνο θα χρησιμοποιούσα τις asPolyline() και asPolygon() αντίστοιχα
ΠΑΡΑΛΛΑΓΗ for f in layer.getFeatures(): geom = f.geometry() print geom.asPoint().x() Αν ήθελα να εμφανίσω μόνο την τετμημένη Χ
for f in layer.getFeatures(): geom = f.geometry() print '%s, %s, %f, %f' % (f['name'], f['iata_code'], geom.asPoint().y(), geom.asPoint().x()) Εμφανίζει τα name, iata_code, latitude and longitude κάθε αεροδρομίου Τα %s %f αναφέρονται σε string και σε αριθμό αντίστοιχα
Εγγραφή σε αρχείο output_file = open('C:\Users\user\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()
Αρχείο αποτελεσμάτων!
ΑΣΚΗΣΗ Φτιάξτε ένα project στο QGIS Προσθέστε το επίπεδο Dasarxeia.shp Γράψτε και εκτελέστε πρόγραμμα σε Python που θα τρέχει μέσα από το QGIS (PyQGIS) Το πρόγραμμα θα κάνει ενεργό θέμα το θέμα dasarxeia.shp Θα εμφανίζει όλες τις διαθέσιμες μεθόδους που μπορούν να εφαρμοστούν Θα παρουσιάσει όλες τις περιπτώσεις (δασαρχεία) του τρέχοντος επιπέδου Θα εμφανίζει το Όνομα τον κωδικό και τις τιμές όλων των πεδίων που αφορούν σε κάθε Δασαρχείο καθώς και τις συντεταγμένες του. Προσοχή τα Δασαχρεία δεν είναι κουκίδες!! Στο τέλος θα αποθηκεύει σε αρχείο όλες τις αποθηκευμένες τιμές δεδομένων για κάθε δασαρχείο