Πίνακας περιεχομένων:
- Προμήθειες
- Βήμα 1: Ορισμός της διαδικασίας Ι: Λήψη του αρχείου OSM
- Βήμα 2: Καθορισμός της διαδικασίας II: Κατανόηση των δεδομένων
- Βήμα 3: Ορισμός της διαδικασίας ΙΙΙ: πέψη των δεδομένων
- Βήμα 4: Εφαρμογή Python Map Stylizer
- Βήμα 5: Μειονέκτημα εφαρμογής + Λύση
- Βήμα 6: Τομείς βελτίωσης
- Βήμα 7: Κλείσιμο σκέψεων
Βίντεο: Πώς να δημιουργήσετε προσαρμοσμένους στυλιζαρισμένους χάρτες χρησιμοποιώντας το OpenStreetMap: 7 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:33
Σε αυτό το διδακτικό, θα περιγράψω μια διαδικασία με την οποία μπορείτε να δημιουργήσετε τους δικούς σας προσαρμοσμένους τυποποιημένους χάρτες. Ένας τυποποιημένος χάρτης είναι ένας χάρτης όπου ο χρήστης μπορεί να καθορίσει ποια επίπεδα δεδομένων απεικονίζονται, καθώς και να καθορίσει το στυλ με το οποίο απεικονίζεται κάθε επίπεδο. Θα περιγράψω πρώτα τη διαδικασία μέσω της οποίας μπορείτε να γράψετε λογισμικό για να στυλιζαρίσετε χάρτες, ακολουθούμενο από ένα παράδειγμα του λογισμικού Python που έγραψα για να εκτελέσω αυτήν την εργασία.
Το παρακάτω βίντεο υπογραμμίζει τον τρόπο με τον οποίο δημιουργώ προσωπικά στυλιζαρισμένους χάρτες, αλλά συνεχίστε να διαβάζετε για τις οικείες λεπτομέρειες. Είμαι πολύ ενθουσιασμένος που βλέπω τι δημιουργεί η κοινότητα!
Ποιο είναι το κίνητρό μου πίσω από αυτό το έργο;
Ειλικρινά, ξεκίνησα αυτό το έργο γιατί πίστευα ότι θα ήταν διασκεδαστικό να το κάνω. Αυτή η ιδέα τριγύριζε στο μυαλό μου τον τελευταίο χρόνο και τελικά πήρα τον χρόνο που χρειαζόμουν για να την υλοποιήσω. Μετά από μια μέρα πρωτοτυπίας με κάποια βασικά σενάρια, μπόρεσα να δημιουργήσω εξαιρετικά ελπιδοφόρα αποτελέσματα - τόσο πολλά υποσχόμενα που ήξερα ότι έπρεπε να επισημοποιήσω τα σενάρια μου έτσι ώστε οι άλλοι να μπορούν εύκολα να δημιουργήσουν δικές τους δημιουργίες.
Το κίνητρό μου να γράψω αυτό το διδακτικό οφείλεται στο γεγονός ότι βρήκα πολύ ελάχιστες πληροφορίες για το πώς να δημιουργήσετε τους δικούς σας στυλιζαρισμένους χάρτες από την αρχή. Ελπίζω να μοιραστώ όσα έμαθα με την κοινότητα.
Πόροι/σύνδεσμοι:
- OpenStreetMap
- OpenStreetMap Legalese
- Αποθήκη Github
Προμήθειες
- Διανομή Python (χρησιμοποίησα Anaconda & Python 3.6)
- PyQt5 (για εξαρτήσεις GUI)
Βήμα 1: Ορισμός της διαδικασίας Ι: Λήψη του αρχείου OSM
Όταν ξεκίνησα για πρώτη φορά αυτό το έργο, η πιο κραυγαλέα ερώτηση ήταν, "από πού μπορώ να βρω δεδομένα χάρτη". Φυσικά, όπως θα περίμενες, σκέφτηκα αμέσως τους Χάρτες Google. Μετά από σημαντική έρευνα, ανακάλυψα ότι η Google πραγματικά δεν θέλει τους ανθρώπους να παίζουν με τα δεδομένα τους, με δημιουργική έννοια ή με άλλο τρόπο. Στην πραγματικότητα, απαγορεύουν ρητά την απόρριψη ιστού από τους Χάρτες Google.
Ευτυχώς, η απελπισία μου ήταν βραχύβια όταν ανακάλυψα το OpenStreetMap (OSM). Το OSM είναι ένα συνεργατικό έργο που περιλαμβάνει άτομα από όλο τον κόσμο που συνεισφέρουν δεδομένα. Το OSM επιτρέπει ρητά τη χρήση αόριστης χρήσης των δεδομένων τους στο όνομα του λογισμικού ανοιχτού κώδικα. Ως εκ τούτου, η επίσκεψη στην ιστοσελίδα του OSM είναι το σημείο όπου ξεκινά το ταξίδι διαμόρφωσης του χάρτη.
Αφού φτάσετε στον ιστότοπο του OSM, κάντε κλικ στην καρτέλα "Εξαγωγή" για να εμφανίσετε τα εργαλεία εξαγωγής χάρτη. Τώρα, μεγεθύνετε για να δείτε την περιοχή με την οποία ενδιαφέρεστε να συλλέξετε δεδομένα χάρτη. Επιλέξτε τον σύνδεσμο "Μη αυτόματη επιλογή διαφορετικής περιοχής", ο οποίος θα εμφανίσει ένα πλαίσιο στην οθόνη σας. Διαμορφώστε και τοποθετήστε αυτό το κουτί πάνω από την περιοχή ενδιαφέροντος. Μόλις ικανοποιηθείτε, κάντε κλικ στο κουμπί "Εξαγωγή" για να κατεβάσετε το αρχείο δεδομένων OSM.
Σημείωση #1: Εάν η επιλεγμένη περιοχή σας περιέχει πάρα πολλά δεδομένα, θα λάβετε ένα σφάλμα ότι έχετε επιλέξει πάρα πολλούς κόμβους. Αν σας συμβεί αυτό, κάντε κλικ στο κουμπί "Overpass API" για να κατεβάσετε το μεγαλύτερο αρχείο σας.
Σημείωση #2: Εάν το αρχείο OSM που έχετε κατεβάσει είναι μεγαλύτερο από 30MB, το πρόγραμμα Python που έγραψα θα μειωθεί αισθητά. Εάν είστε αποφασισμένοι να χρησιμοποιήσετε μια μεγάλη περιοχή, σκεφτείτε να γράψετε ένα σενάριο για να πετάξετε περιττά δεδομένα που δεν σχεδιάζετε να σχεδιάσετε.
Βήμα 2: Καθορισμός της διαδικασίας II: Κατανόηση των δεδομένων
"Έχω τα δεδομένα … τώρα τι;"
Ξεκινήστε ανοίγοντας το ληφθέν αρχείο OSM στο αγαπημένο σας λογισμικό επεξεργασίας κειμένου. Θα παρατηρήσετε πρώτα ότι αυτό είναι ένα αρχείο XML, το οποίο είναι υπέροχο! Η XML είναι αρκετά εύκολη στην ανάλυση. Η αρχή του αρχείου σας θα πρέπει να μοιάζει σχεδόν πανομοιότυπη με την πρώτη εικόνα αυτού του βήματος - θα παρατίθενται ορισμένα βασικά μεταδεδομένα και γεωγραφικά όρια.
Καθώς μετακινείτε το αρχείο, θα παρατηρήσετε τρία στοιχεία δεδομένων που χρησιμοποιούνται σε ολόκληρο:
- Κόμβοι
- Τρόποι
- Συγγένειες
Το πιο βασικό στοιχείο δεδομένων, ένας κόμβος έχει απλώς ένα μοναδικό αναγνωριστικό, γεωγραφικό πλάτος και γεωγραφικό μήκος που σχετίζονται με αυτό. Φυσικά, υπάρχουν επιπλέον μεταδεδομένα, αλλά μπορούμε να τα απορρίψουμε με ασφάλεια.
Οι τρόποι είναι συλλογές κόμβων. Ένας τρόπος μπορεί να αποδοθεί ως κλειστό σχήμα ή ως ανοιχτή γραμμή. Οι τρόποι αποτελούνται από μια συλλογή κόμβων που προσδιορίζονται από το μοναδικό αναγνωριστικό τους. Επισημαίνονται με κλειδιά που καθορίζουν την ομάδα δεδομένων στην οποία ανήκουν. Για παράδειγμα, ο τρόπος που απεικονίζεται στην τρίτη παραπάνω εικόνα ανήκει στην ομάδα δεδομένων "μέρος" και στην υποομάδα της, "νησί". Με άλλα λόγια, ο συγκεκριμένος τρόπος ανήκει στο στρώμα "νησί" κάτω από την ομάδα "τόπος". Οι τρόποι έχουν επίσης μοναδικά αναγνωριστικά.
Τέλος, οι σχέσεις είναι συλλογές τρόπων. Μια σχέση μπορεί να αντιπροσωπεύει ένα πολύπλοκο σχήμα με οπές ή με πολλαπλές περιοχές. Οι σχέσεις θα έχουν επίσης ένα μοναδικό αναγνωριστικό και θα επισημαίνονται με παρόμοιο τρόπο.
Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτά τα στοιχεία δεδομένων από το wiki OSM:
- Κόμβοι
- Τρόποι
- Συγγένειες
Βήμα 3: Ορισμός της διαδικασίας ΙΙΙ: πέψη των δεδομένων
Τώρα θα πρέπει να έχετε τουλάχιστον μια επιφανειακή κατανόηση των στοιχείων δεδομένων που αποτελούν ένα αρχείο OSM. Σε αυτό το σημείο, μας ενδιαφέρει να διαβάσουμε τα δεδομένα OSM χρησιμοποιώντας τη γλώσσα επιλογής σας. Ενώ αυτό το βήμα είναι επικεντρωμένο στην Python, αν δεν θέλετε να χρησιμοποιήσετε Python, θα πρέπει να διαβάσετε αυτό το μέρος καθώς περιέχει μερικές συμβουλές και κόλπα.
Το πακέτο xml περιλαμβάνεται από προεπιλογή με τις περισσότερες τυπικές διανομές Python. Θα χρησιμοποιήσουμε αυτό το πακέτο για να αναλύσουμε πολύ εύκολα το αρχείο μας OSM όπως φαίνεται στην πρώτη εικόνα. Σε έναν βρόχο για, μπορείτε να επεξεργαστείτε τον χειρισμό δεδομένων OSM για κάθε συγκεκριμένο στοιχείο δεδομένων.
Στην τελευταία γραμμή της εικόνας, θα παρατηρήσετε ότι ελέγχω για την ετικέτα "όρια". Αυτό το βήμα είναι ζωτικής σημασίας για τη μετάφραση των τιμών γεωγραφικού πλάτους και γεωγραφικού μήκους σε εικονοστοιχεία στην οθόνη. Συνιστώ ανεπιφύλακτα να εκτελέσετε αυτήν τη μετατροπή τη στιγμή που φορτώνετε το αρχείο OSM, καθώς η μαζική μετατροπή των δεδομένων είναι εντατική στη διαδικασία.
Μιλώντας για τη μετατροπή γεωγραφικού πλάτους και γεωγραφικού μήκους σε συντεταγμένες οθόνης, εδώ είναι ένας σύνδεσμος προς τη συνάρτηση υπολογισμού που έγραψα. Πιθανότατα θα παρατηρήσετε κάτι λίγο περίεργο στη μετατροπή γεωγραφικού πλάτους σε συντεταγμένες οθόνης. Υπάρχει ένα επιπλέον βήμα σε σύγκριση με το γεωγραφικό μήκος! Όπως αποδεικνύεται, τα δεδομένα OSM μοντελοποιούνται χρησιμοποιώντας τη μέθοδο προβολής Pseudo-Mercator. Ευτυχώς, το OSM έχει φανταστική τεκμηρίωση σχετικά με αυτό το θέμα εδώ και παρέχει λειτουργίες μετατροπής γεωγραφικού πλάτους για σημαντικό αριθμό γλωσσών. Φοβερός!
Σημείωση: Στον κωδικό μου, η συντεταγμένη οθόνης (0, 0) είναι η επάνω αριστερή γωνία της οθόνης.
Βήμα 4: Εφαρμογή Python Map Stylizer
Μέχρι αυτό το σημείο, έχω συζητήσει το αρχείο δεδομένων OSM - τι είναι, πώς να το διαβάσω και τι να κάνω με αυτό. Τώρα θα συζητήσω το λογισμικό που έγραψα για την αντιμετώπιση της στυλιστικής απεικόνισης χαρτών (το repo του GitHub παρέχεται στην εισαγωγή).
Η συγκεκριμένη εφαρμογή μου επικεντρώνεται στον έλεγχο χρήστη του αγωγού απόδοσης. Συγκεκριμένα, επιτρέπω στον χρήστη να επιλέξει τα επίπεδα που θέλει ορατά και πώς θέλει να εμφανιστεί αυτό το επίπεδο. Όπως ανέφερα εν συντομία νωρίτερα, υπάρχουν δύο κατηγορίες στοιχείων που αποδίδονται: συμπληρώστε στοιχεία και στοιχεία γραμμής. Τα συμπληρώματα ορίζονται μόνο από ένα χρώμα, ενώ οι γραμμές καθορίζονται από το χρώμα, το πλάτος γραμμής, το στυλ γραμμής, το ύφος του καπακιού και το στυλ σύνδεσης γραμμής.
Καθώς ο χρήστης κάνει τροποποιήσεις στα στυλ επιπέδων και την ορατότητα, οι αλλαγές αντικατοπτρίζονται στο γραφικό στοιχείο χάρτη στα δεξιά. Μόλις ένας χρήστης τροποποιήσει την εμφάνιση του χάρτη προς ικανοποίηση, μπορεί να προσαρμόσει τη μέγιστη διάσταση του χάρτη και να αποθηκεύσει τον χάρτη ως εικόνα στον υπολογιστή του. Κατά την αποθήκευση μιας εικόνας, θα αποθηκευτεί επίσης ένα αρχείο διαμόρφωσης χρήστη. Αυτό διασφαλίζει ότι ένας χρήστης μπορεί να ανακαλέσει και να επαναχρησιμοποιήσει τη διαμόρφωση που χρησιμοποίησε για τη δημιουργία μιας συγκεκριμένης εικόνας ανά πάσα στιγμή.
Βήμα 5: Μειονέκτημα εφαρμογής + Λύση
Όταν άρχισα να διαμορφώνω ένα χάρτη με το χέρι, έμαθα ότι αυτή ήταν μια αρκετά κουραστική διαδικασία. Η προσφορά στον χρήστη του μέγιστου ελέγχου μπορεί να είναι απλώς συντριπτική λόγω του μεγάλου αριθμού διαθέσιμων "πόμολων". Ωστόσο, υπάρχει μια απλή λύση, η οποία περιλαμβάνει λίγο επιπλέον σενάριο.
Ξεκίνησα προσδιορίζοντας ποια στρώματα με ενδιαφέρουν ιδιαίτερα. Για τους σκοπούς αυτού του διδάσκοντος, ας πούμε ότι ενδιαφέρομαι περισσότερο για κτίρια (όλα), ποτάμια, κύριους αυτοκινητόδρομους και επιφανειακούς δρόμους. Θα έγραφα ένα σενάριο όπου δημιουργώ μια παρουσία διαμόρφωσης, αλλάζω καταστάσεις επιπέδου κατάλληλα χρησιμοποιώντας τη συνάρτηση setItemState () και καθορισμένες σταθερές και ορίζω χρώματα με βάση τον τρόπο που θα ήθελα να εμφανίζονται τα επίπεδα μου χρησιμοποιώντας το setValue (). Το προκύπτον αρχείο διαμόρφωσης που αποθηκεύεται μπορεί να αντιγραφεί στο φάκελο configs και να φορτωθεί από τον χρήστη.
Ένα παράδειγμα σεναρίου βρίσκεται στην παραπάνω εικόνα. Η δεύτερη εικόνα είναι ένα δείγμα της εμφάνισης των συναρτήσεων βοηθού, και επειδή είναι βασικά όλες πανομοιότυπες, με διαφορετικές σταθερές, συμπεριέλαβα μόνο μια εικόνα ενός παραδείγματος.
Βήμα 6: Τομείς βελτίωσης
Αφού προβληματίστηκα για την εφαρμογή του λογισμικού μου, εντόπισα αρκετούς τομείς που θα ήταν χρήσιμες βελτιώσεις για τους χρήστες ενέργειας.
- Δυναμική απόδοση επιπέδου. Προς το παρόν, έχω μια προκαθορισμένη λίστα επιπέδων που θα αποδίδονται, αυτό είναι όλο. Μέρος της αιτιολόγησης ήταν η δυσκολία προσδιορισμού του εάν ένα στρώμα πρέπει να είναι μια γραμμή ή ένα γέμισμα. Ως αποτέλεσμα, σχεδόν με κάθε αρχείο OSM που ανοίγετε, θα σας υποδεχτούν μια σειρά προειδοποιήσεων σχετικά με τα επίπεδα που δεν θα αποδίδονται. Συχνά αυτά είναι τόσο ελάχιστα που δεν είναι θέμα, αλλά σίγουρα θα λείπουν κρίσιμα στρώματα. Η απόδοση δυναμικού επιπέδου θα εξαλείψει αυτές τις ανησυχίες.
- Εκχώρηση δυναμικού επιπέδου. Αυτό συμβαδίζει με το #1. εάν θέλετε απόδοση δυναμικού επιπέδου, χρειάζεστε ανάθεση δυναμικού επιπέδου (δηλ. προσδιορισμός στρώματος πλήρωσης έναντι επιπέδου γραμμής). Αυτό θα μπορούσε λογικά να επιτευχθεί, όπως έμαθα, γιατί οι τρόποι των οποίων ο πρώτος και ο τελευταίος κόμβος είναι οι ίδιοι θα είναι κλειστές διαδρομές και επομένως θα γεμίζουν.
- Ομάδες χρωμάτων. Ένας τυποποιημένος χάρτης έχει συχνά πολλά επίπεδα που έχουν το ίδιο στυλ και η δυνατότητα στον χρήστη να τροποποιήσει το στυλ μιας ομάδας ταυτόχρονα θα μειώσει σημαντικά τον χρόνο που αφιερώνει ο χρήστης στην επεξεργασία των επιπέδων ένα προς ένα.
Βήμα 7: Κλείσιμο σκέψεων
Σας ευχαριστώ όλους που αφιερώσατε χρόνο για να διαβάσετε το Instructable μου. Αυτό το έργο αντιπροσωπεύει το αποκορύφωμα πολλών ωρών έρευνας, σχεδιασμού, προγραμματισμού και εντοπισμού σφαλμάτων. Ελπίζω ότι μπόρεσα να σας δώσω ένα πλατφόρμα εκκίνησης από το οποίο μπορείτε να δημιουργήσετε το δικό σας έργο ή να βασιστείτε σε αυτά που έχω ήδη γράψει. Ελπίζω επίσης ότι οι ελλείψεις και οι συμβουλές μου παρέχουν πολλά σημεία που πρέπει να λάβετε υπόψη στο σχεδιασμό σας. Εάν είστε λιγότερο διατεθειμένοι να προγραμματίσετε και περισσότερο να δημιουργήσετε έργα τέχνης, θα ήθελα πολύ να δω τι κάνετε στα σχόλια! Οι πιθανότητες είναι ατελείωτες!
Ιδιαίτερες ευχαριστίες στους συντελεστές του OpenStreetMap! Τέτοια έργα δεν θα ήταν δυνατά χωρίς τις σημαντικές προσπάθειές τους.
Παρακαλώ ενημερώστε με αν έχετε οποιεσδήποτε ερωτήσεις στα σχόλια!
Δευτέρα στην πρόκληση Χαρτών
Συνιστάται:
Δημιουργήστε προσαρμοσμένους χάρτες για το Garmin GPS σας: 8 βήματα (με εικόνες)
Δημιουργήστε προσαρμοσμένους χάρτες για το Garmin GPS σας: Εάν διαθέτετε Garmin GPS σχεδιασμένο για πεζοπορία και άλλες υπαίθριες δραστηριότητες (συμπεριλαμβανομένων των σειρών GPSMAP, eTrex, Colorado, Dakota, Oregon και Montana, μεταξύ άλλων), δεν χρειάζεται να συμβιβαστείτε με τους χάρτες γυμνών οστών που ήρθαν προφορτωμένοι σε αυτό. ΜΙ
Πώς να δημιουργήσετε μια ασπίδα Arduino πολύ εύκολα (χρησιμοποιώντας EasyEDA): 4 βήματα
Πώς να δημιουργήσετε μια ασπίδα Arduino πολύ εύκολη (χρησιμοποιώντας το EasyEDA): Σε αυτό το Instructable θα σας διδάξω πώς να δημιουργήσετε ένα Arduino Uno Shield πολύ εύκολα. Δεν θα μπω σε πολλές λεπτομέρειες, αλλά συμπεριέλαβα ένα βίντεο όπου πηγαίνετε λίγο περισσότερο σε βάθος για τον τρόπο χρήσης του λογισμικού. Χρησιμοποιώ την εφαρμογή ιστού EasyEDA αφού
Δημιουργήστε ένα βιβλίο χαρτών χρησιμοποιώντας τους Χάρτες Google: 17 βήματα (με εικόνες)
Δημιουργήστε ένα βιβλίο χαρτών χρησιμοποιώντας τους Χάρτες Google: Τις προάλλες έψαχνα στο βιβλιοπωλείο για έναν Street Guide για το DuPage County, IL, καθώς η κοπέλα μου ζει εκεί και χρειάζεται έναν λεπτομερή χάρτη δρόμου. Δυστυχώς, το μόνο που είχαν κοντά ήταν ένα για το County County (όπως αυτό
Πώς να ενσωματώσετε τους Χάρτες Google στον ιστότοπο: 4 βήματα
Πώς να ενσωματώσετε τους Χάρτες Google στον ιστότοπο: Vηφίστε με στο Challenge Maps! Πρόσφατα, δημιούργησα έναν ιστότοπο που χρησιμοποιεί τους Χάρτες Google. Η ενσωμάτωση των Χαρτών Google στον ιστότοπό μου ήταν αρκετά εύκολη και όχι τόσο δύσκολη. Σε αυτό το Instructables, θα σας δείξω πόσο εύκολο είναι να ενσωματώσετε το Googl
Πώς να δημιουργήσετε έναν ακόλουθο γραμμής χρησιμοποιώντας το Arduino: 8 βήματα (με εικόνες)
Πώς να φτιάξετε έναν ακόλουθο γραμμής χρησιμοποιώντας το Arduino: Εάν ξεκινάτε με τη ρομποτική, ένα από τα πρώτα έργα που κάνουν οι αρχάριοι περιλαμβάνουν έναν ακόλουθο γραμμής. Πρόκειται για ένα ειδικό αυτοκίνητο παιχνιδιού με ιδιότητα να τρέχει κατά μήκος μιας γραμμής που συνήθως έχει μαύρο χρώμα και σε αντίθεση με το φόντο. Ας πάρουμε το αστέρι