Η
βάση δεδομένων για την καταγραφή των δεδομένων κίνησης στον Server περιγράφεται από την κλάση
GoogleMapsDB. Στην κλάση αυτήν περιλαμβάνονται όλες οι σχετικές συναρτήσεις με
την δημιουργία , την διαχείριση της βάσης και την εισαγωγή σε αυτήν των tokens
. Αναλύοντας τις συναρτήσεις της κλάσης έχουμε :
public
GoogleMapsDB
Κατά την εκτέλεση του constructor της κλάσης , επιτυγχάνεται η σύνδεση στον server και η δημιουργία ,αν δεν υπάρχει ήδη, της βάσης
που αποτελείται από ένα πίνακα(table) token_db στον οποίο θα καταχωρηθούν τα tokens που αποστέλλονται από τους χρήστες της εφαρμογής .
Ο πίνακας που δημιουργείται περιλαμβάνει εγγραφές,
που περιέχουν τις πληροφορίες για κάθε token. Τέτοιες πληροφορίες είναι ο εσωτερικός κωδικός, που
αντιστοιχεί στην συνδεδεμένη συσκευή Android που απέστειλε τα δεδομένα, ο κωδικός του ίδιου του token μέσα στην βάση, τα στοιχεία που περιγράφουν το token, όπως το σημείο αρχής και τέλους του, η μέση
ταχύτητα του οχήματος σε αυτό το token και τέλος το μήκος του.
Για γρηγορότερη αναζήτηση μέσα στην βάση, έχουν
δημιουργηθεί ευρετήρια στα δεδομένα θέσης του token.
void
insertIntoTokenDB
Η συνάρτηση αυτή εισάγει ένα token μέσα στην βάση και καλείται απευθείας από την
εφαρμογή του server επαναληπτικά, κάθε φορά που κάποιος χρήστης
προσφέρει στο σύστημα τα δεδομένα για την κίνηση, που αντιμετώπισε.
void deleteOlderThan(int minutes)
Η
συνάρτηση αυτή έχει σκοπό να καθαρίζει την βάση από δεδομένα που πλέον λόγω
παλαιότητας δεν χρειάζεται να παραμένουν αποθηκευμένα στην βάση, διαγράφοντας
τα. Στόχος της συνάρτησης η οποία λόγω του δοκιμαστικού χαρακτήρα της εφαρμογής
μας δεν χρησιμοποιήθηκε στην εφαρμογή της παρουσίασης έχει σαν στόχο τη
συντήρηση του συστήματος σε πραγματικές συνθήκες πολλών χρηστών.
double estimateRouteTime(TokenList
route, int minutes)
Η συνάρτηση αυτή είναι η σημαντικότερη στην κλάση,
και σκοπός της είναι, δεδομένης μίας διαδρομής να της αποδώσει μία εκτίμηση κυκλοφοριακής
συμφόρησης χρησιμοποιώντας συνδυαστικά τα
συγκεντρωμένα δεδομένα και την
εκτίμηση που δίνει η ίδια η Google .
Η διαδικασία περιλαμβάνει την επιλογή των token της βάσης, που αντιστοιχούν στην διαδρομή. Στην
επιλογή αυτή για να υπολογίσουμε και την πιθανή έλλειψη ακρίβειας του δέκτη GPS της συσκευής, έχει εισαχθεί και ένας παράγοντας
ακρίβειας ως προς την πραγματική θέση. Η βελτιστοποίηση της τιμής του ανάλογα
με την βαθμό ακρίβειας εύρεσης της τοποθεσίας (πχ. μεγαλύτερος αριθμός
συνδεδεμένων δορυφόρων επιφέρει καλύτερη ακρίβεια ) απομένει να ρυθμιστεί με
περαιτέρω μετρήσεις σε πραγματικό περιβάλλον.
Σχετικά με τα δεδομένα, που ανακτήσαμε από την
βάση, αυτά καθορίζουν την τελική αξιολόγηση της διαδρομής με διαφορετικές
βαρύτητες. Όσο πλησιέστερο χρονικά είναι το token στην χρονική στιγμή της επερώτησης του χρήστη,
τόσο μεγαλύτερη βαρύτητα θα έχει στο τελικό αποτέλεσμα. Τα tokens χωρίζονται σε τρεις κλάσεις με την βαρύτητα, που
λαμβάνουν να αντιστοιχεί στην χρονική
κλάση στην οποία ανήκουν. Τα tokens της πρώτης κλάσης αντιστοιχούν στα πιο πρόσφατα δείγματα και απέχουν
χρονικά λιγότερο από το ένα τρίτο του χρονικού παραθύρου minutes (στο παράδειγμά μας είναι minutes = 30 λεπτά ) και λαμβάνουν βαρύτητα 60%, αυτά της
δεύτερης κλάσης (1/3 minutes < t <2/3 minutes) 25% και τα υπόλοιπα δείγματα μέχρι την λήξη
του χρονικού παραθύρου βαρύτητα 15%.
Στην περίπτωση που κάποια tokens της διαδρομής δεν αντιστοιχούν σε δείγματα μέσα
στην βάση δεδομένων, τότε λαμβάνεται η προϋπολογισμένη προσεγγιστική τιμή της Google για τα token αυτά.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου