Εισαγωγή στα generic mapping tools

nikolaosv | Τετ, 02/06/2013 - 14:39 | 13'

Στο παρών άρθρο θα ασχοληθούμε με μια συλλογή εργαλείων τα Generic Mapping Tools. Πρόκειται για περίπου 65 διαφορετικά εργαλεία που μπορούν να διαχειριστούν γεωγραφικά και καρτεσιανά δεδομένα και να παράγουν γραφικές απεικονίσεις σε postscript μορφή. Παρόλο που δεν έχουν γραφικό περιβάλλον, έχουν αρκετές δυνατότητες επεξεργασίας δεδομένων εφάμιλλες με αυτές εμπορικών προγραμμάτων . Μέσα σε αυτές περιλαμβάνονται λειτουργίες όπως το φιλτράρισμα, στατιστική προσαρμογή των δεδομένων, παρεμβολή τιμών, δημιουργία χαρτών κλπ. Είναι όλα ανοικτού κώδικα και υποστηρίζονται από το National Science Foundation αναπτύχθηκαν και συντηρούνται από τους Paul Wessel, Walter H.F. Smith, Remko Scharroo, και Joaquim Luis καθώς επίσης και από ένα σύνολο εθελοντών. Φυσικά, η άδεια που το συνοδεύει είναι η GPL.

Πρέπει να ξεκαθαρίσουμε τι δεν είναι το GMT. Προφανώς δεν είναι κάποιο εξελιγμένο λογισμικό διαχείρισης χωρικών δεδομένων αν και στην έκδοση 5 έχουν προστεθεί επιπλέον δυνατότητες, όπως το άνοιγμα shape αρχείων. Δεν είναι εξελιγμένο πρόγραμμα μαθηματικών υπολογισμών παρόλο που υποστηρίζονται ανάγνωση και εγγραφή grid αρχείων για matlab ή octave. Το GMT εστιάζει στην οπτικοπoίηση και αναπαράσταση δεδομένων, με κάποιες δυνατότητες επεξεργασίας. Χρησιμοποιεί την awk για να μορφοποιήσει την είσοδο από αρχεία κειμένου, ενώ στην 5 η ανάγκη για εξωτερικά εργαλεία έχει εξαλειφθεί με κατάλληλες προσθήκες στον κώδικα τους.

Το GMT έρχονται σε δυο εκδόσεις, την 4 και την 5. Η 4 είναι η σταθερή, ενώ η 5 έχει τις περισσότερες αλλαγές και καινοτομίες ενώ αλλάζει διαρκώς. Αν και έχει κυκλοφορήσει επίσημα , θα μπορούσε πει κανείς ότι είναι σε δοκιμαστική έκδοση. Κάποια νέα χαρακτηριστικά έχουν ενσωματωθεί ενώ κάποιες εντολές έχουν απλοποιηθεί. Πακέτα για το GMT υπάρχουν για linux, Mac, αλλά και εκτελέσιμα για τα windows. Αν ανοίξετε το διαχειριστή λογισμικού της διανομής σας θα βρείτε τα πακέτα προς εγκατάσταση. Εμείς θα ασχοληθούμε με εγκατάσταση από το site για 2 λόγους. Ο πρώτος είναι ότι δεν υπάρχουν πάντα οι τελευταίες εκδόσεις και ο δεύτερος ότι σε κάποιες διανομές ορισμένα πακέτα δεν υπάρχουν στα αποθετήρια γιατί... πιάνουν χώρο!! Χαρακτηριστικό είναι το παράδειγμα του ubuntu και του mint κατ' επέκταση όπου το πακέτο gmt-coast-high που είναι υπεύθυνο για παραγωγή χαρτών με υψηλή ανάλυση δεν υπάρχει.

Για αυτό θα εγκαταστήσουμε την έκδοση 4 από τη σελίδα του GMT. Έχουμε 2 επιλογές: Είτε να κατεβάσουμε όλα τα πακέτα και να εγκαταστήσουμε ή να βάλουμε το λειτουργικό μας να τα εγκαταστήσει μόνο του. Στην πρώτη περίπτωση, πηγαίνουμε στο μενού mirrors και επιλέγουμε ένα διακομιστή. Από εκεί κατεβάζουμε τα πακέτα ghhs-2.2.0.tar.bz, gmt-4.5.8.tar.bz2, install_gmt.sh. Πριν συνεχίσουμε πρέπει να μεταβούμε στην σελίδα downloads και να συμπληρώσουμε τα στοιχεία που θα μας βοηθήσουν να εγκαταστήσουμε το gmt. Στην ουσία αυτό που γίνεται είναι η αυτόματη συμπλήρωση ενός αρχείου παραμέτρων που μπορούμε να αποθηκεύσουμε στη συνέχεια στον υπολογιστή μας ως ένα απλό αρχείο κειμένου, το οποίο χρησιμοποιεί το script install-gmt. Εκεί βρίσκονται αποθηκευμένες όλες οι πληροφορίες για την εγκατάσταση του gmt. Το εκτελέσιμο δίνει τη δυνατότητα να κατεβούν κατά την εγκατάσταση τα πακέτα όμως είναι πιο χρονοβόρα η διεργασία.

Η δική μας επιλογή είναι το πρόγραμμα να κατεβάσει και να εγκαταστήσει τα αρχεία. Συμπληρώνουμε την φόρμα για την εγκατάσταση. Αφήνουμε τις αρχικές παραμέτρους ως έχουν και στο βήμα 5 επιλέγουμε gcc εφόσον είναι ο πιο διαδεδομένος compiler, στο 7 επιλέγουμε make, ενώ στο 8 διαλέγουμε που θέλουμε να εγκαταστήσουμε το gmt. Εμείς διαλέξαμε την τοποθεσία /opt/gmt . Στο 9 βήμα το αφήνουμε κενό, στο 10 επιλέγουμε MEX ενώ στο 11 το αφήνουμε πάλι ως έχει. Αν θέλουμε να τρέξουμε τα παραδείγματα μετά την εγκατάσταση διαλέγουμε “run all example scripts”. Εδώ πρέπει να πούμε πως καλό θα ήταν να εγκαταστήσουμε τα gv και το gdal από τα αποθετήρια της της διανομής μας. Στο τέλος και ενώ έχουμε βεβαιωθεί ότι όλα είναι οκ, πατάμε το get parameters. Αντιγράφουμε και σώζουμε τις παραμέτρους στο αρχείο parameters.txt

Μεταφέρουμε όλα τα απαραίτητα αρχεία στο φάκελο opt και τρέχουμε την εντολή #./install_gmt.sh parameters.txt. Φυσικά η εγκατάσταση μπορεί να γίνει και στο home του χρήστη άν κάποιος δε θέλει να τρέξει ως διαχειριστής την εγκατάσταση. Η εγκατάσταση ξεκινά με το κατεβασμα του netcdf. Μόλις κατεβεί το netcdf ξεκινά η μεταγλώτισση της εφαρμογής. Ακολουθούν το gmt και το ghhs κατά την εγκατάσταση. Το πρόγραμμα μόλις τελειώσει ζητά να το προσθέσουμε στο μονοπάτι του χρήστη. Ανοίγουμε με τον αγαπημένο μας επεξεργαστή κειμένου και γράφουμε τις ακόλουθες γραμμές:

export NETCDFHOME=/opt/netcdf-3.6.3

export PATH=/opt/GMT4.5.8/bin:$PATH

και το σώζουμε ως .bashrc. Είναι απαραίτητο ώστε να μπορούμε να το τρέξουμε το gmt από το τερματικό μας.

Ας δούμε τώρα μερικά παραδείγματα εφαρμογών του GMT. Ανοίγουμε τον αγαπημένο μας επεξεργαστή κειμένου και γράφουμε το script μας. Ξεκινάμε με #!/bin/bash, ώστε να ξέρει το σύστημα με ποιο κέλυφος να το εκτελέσει. Το script μας έχει ως στόχο να αποτυπώσει την ευρύτερη γεωγραφική περιοχή που βρίσκεται η Ελλάδα και κάποιες από τις πόλεις της. Το εκτελέσιμο αποτελείται από δυο εντολές μόνο του gmt ωστόσο είναι αρκετές για το αποτέλεσμα. Ας αναλύσουμε το αρχείο γραμμή προς γραμμή.

 
#!/bin/bash

# Δημιουργία βασικού χάρτη της Ελλάδας και αποτύπωση κάποιων πόλεων σε αυτόν.

ps=./map.ps

pscoast -R18/30/33/42 -JM15c -K -Na/0.25p -Ggreen -Sblue -Ia -Df -Wthinnest -B05 -U"Linux Inside" > $ps psxy -R -J majorcitiesnew.dat -Sc0.2c -Gred -O >> $ps

Το script του χάρτη
#!/bin/bash : Δηλώνει ότι είναι ένα εκτελέσιμο που χρησιμοποιεί το bash για να “τρέξει”.
# Η επόμενη γραμμή είναι απλά σχόλιο
ps=./map.ps : Δηλώνουμε το όνομα του αρχείου που θα δημιουργήσει το πρόγραμμα.
pscoast -R18/30/33/42 -JM15c -K -Na/0.25p -Ggreen -Sblue -Ia -Df -Wthinnest -B05 -U"Linux Inside" > $ps

Η εντολή pscoast είναι υπεύθυνη για τη δημιουργία της ακτογραμμής. Στην παράμετρο R ορίζουμε τις συντεταγμένες του χάρτη μας με κατεύθυνση δυτικά/ανατολικά/νότια/βόρεια. Η παράμετρος JM15c δηλώνει ότι το μέγεθος του χάρτη θα είναι 15 εκατοστά ενώ η προβολή θα είναι η μερκατορική. Το Κ σημαίνει ότι επιπλέον κώδικας postscript θα προστεθεί αργότερα στο αρχείο μας. Η παράμετρος Νa/0.25p ορίζει ότι θα χαρτογραφηθούν όλα τα σύνορα με πάχος γραμμής 0.25pixel. Το G δηλώνει το χρώμα που θα χρησιμοποιηθεί για τις χερσαίες περιοχές, πράσινο στην περίπτωση μας. Το S δηλώνει το χρώμα για τις περιοχές με το νερό, μπλε για εμάς. Με το Ia αποτυπώνουμε όλα τα υδρογραφικά δίκτυα στην περιοχή μας. To Df ορίζει την πλήρη λεπτομέρεια του χάρτη μας, για αυτό άλλωστε το εγκαταστήσαμε από πηγαίο κώδικα. Το W ορίζει το πάχος της ακτογραμμής. Το Β καθορίζει τα διαστήματα που θα μπουν οι υποδιαιρέσεις των συντεταγμένων στο χάρτη μας. Τέλος το U προσθέτει την ώρα του συστήματος στο σχέδιο μας.

Η επόμενη εντολή είναι η psxy και είναι υπεύθυνη για την προσθήκη των πόλεων στο χάρτη. Διαβάζει από το αρχείο majorcitiesnew.dat τις συντεταγμένες και τις τοποθετεί στο χάρτη. Ας προχωρήσουμε λοιπόν στην ανάλυση των παραμέτρων. Το R εδώ δεν έχει εκ νέου τις συντεταγμένες ούτε το J την προβολή, εφόσον είναι ίδια με την pscoast. Το όνομα του αρχείου δίνεται για να ξέρει η εντολή από που θα διαβάσει τα δεδομένα. Το Sc0.5c Δηλώνει ότι τα σύμβολα των πόλεων θα είναι κύκλοι διαμέτρου 0.5 εκατοστών, ενώ το χρώμα τους θα είναι κόκκινο όπως ορίζεται από το Gred. Τέλος το Ο σημαίνει ότι όλα τα προηγούμενα θα προστεθούν ώς “layer” στον ήδη υπάρχοντα χάρτη. Το αποτέλεσμα φαίνεται στην εικόνα 2.

Εικόνα 2. Ο χάρτης που δημιουργήσαμε.

Πρέπει να τονιστεί ότι αυτό το άρθρο αποτελεί μόνο μια εισαγωγή στο GMT και σε καμιά περίπτωση δεν καλύπτει το σύνολο των δυνατοτήτων του. Εξάλλου από τις περίπου 65 εντολές, εμείς στο παράδειγμα μας χρησιμοποιήσαμε μόνο δυο, χωρίς να ενεργοποιήσουμε όλες τις παραμέτρους τους. Σκοπός μας είναι να δείξουμε ένα αξιόλογο εργαλείο και να δώσουμε το κίνητρο σε όποιον ενδιαφέρεται να ασχοληθεί περισσότερο. Βέβαια η έλλειψη κάποιου επίσημου γραφικού περιβάλλοντος κάνει τα πράγματα λίγο πιο σύνθετα, αλλά από την άλλη είναι μια καλή ευκαιρία για όποιον επιθυμεί να μάθει shell scripting... ;)

Δώσε αστέρια!