תוכן עניינים:
- אספקה
- שלב 1: הגדרת התהליך I: הורדת קובץ OSM
- שלב 2: הגדרת התהליך II: הבנת הנתונים
- שלב 3: הגדרת תהליך III: עיכול הנתונים
- שלב 4: יישום מעצב מפות Python
- שלב 5: יישום חסרון + פתרון
- שלב 6: תחומי שיפור
- שלב 7: סגירת מחשבות
וִידֵאוֹ: כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap: 7 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:13
במדריך זה אתאר תהליך שבו תוכל ליצור מפות מסוגננות משלך בהתאמה אישית. מפה מסוגננת היא מפה שבה המשתמש יכול לציין אילו שכבות נתונים מדומיינות, וכן להגדיר את הסגנון שבו כל שכבה מדמיינת. ראשית אתאר את התהליך שבאמצעותו תוכל לכתוב תוכנה לעיצוב מפות, ואחריה דוגמה של תוכנת פייתון שכתבתי לביצוע משימה זו.
הסרטון הבא מדגיש כיצד אני יוצר באופן אישי מפות מסוגננות, אך ממשיך לקרוא לפרטים האינטימיים. אני מאוד מתרגש לראות מה הקהילה יוצרת!
מה המוטיבציה שלי מאחורי הפרויקט הזה?
למען האמת, התחלתי את הפרויקט הזה כי חשבתי שיהיה כיף לעשות אותו. הרעיון הזה השתולל במוחי בשנה האחרונה, ולבסוף לקחתי את הזמן הדרוש לי להגשמתו. לאחר יום של אבות טיפוס עם קצת סקריפטים בסיסיים, הצלחתי לייצר תוצאות מבטיחות ביותר - כל כך מבטיחות שידעתי שאני צריך לתכנת את התסריטים שלי כך שאחרים יוכלו ליצור יצירות משלהם בקלות.
המוטיבציה שלי בכתיבת ההנחיה נובעת מהעובדה שמצאתי מידע מינימלי ביותר כיצד ליצור מפות מסוגננות משלך מאפס. אני מקווה לחלוק את מה שלמדתי עם הקהילה.
משאבים/קישורים:
- OpenStreetMap
- OpenStreetMap Legalese
- מאגר Github
אספקה
- הפצת פייתון (השתמשתי באנקונדה ופייתון 3.6)
- PyQt5 (לתלות GUI)
שלב 1: הגדרת התהליך I: הורדת קובץ OSM
כאשר התחלתי בפרוייקט זה, השאלה הבולטת ביותר הייתה "היכן אוכל להשיג נתוני מפה". באופן טבעי, כפי שהיית מצפה, חשבתי מיד על מפות Google. לאחר מחקר משמעותי גיליתי שגוגל ממש לא רוצה שאנשים ישחקו עם הנתונים שלהם, במובן יצירתי או אחר. למעשה, הם אוסרים במפורש גרידת אתרים ממפות Google.
למרבה המזל, הייאוש שלי היה קצר מועד לאחר שגיליתי את OpenStreetMap (OSM). OSM הוא פרויקט שיתופי הכולל אנשים מכל רחבי העולם התורמים נתונים. OSM מאפשרת שימוש מפורש בנתונים שלהם בשם תוכנת קוד פתוח. ככזה, ביקור בדף האינטרנט של OSM הוא המקום בו מתחיל מסע סגנונות המפות.
לאחר ההגעה לאתר OSM, לחץ על הכרטיסייה "ייצוא" כדי להציג את כלי ייצוא המפות. כעת, התקרב כדי לצפות באזור שבו אתה מעוניין לאסוף נתוני מפות. בחר בקישור "בחר ידנית אזור אחר", שיעלה קופסה על המסך שלך. צור והנח את הקופסה הזו על אזור העניין. לאחר שהיית מרוצה, לחץ על כפתור "ייצוא" כדי להוריד את קובץ הנתונים של OSM שלך.
הערה מס '1: אם האזור שבחרת מכיל יותר מדי נתונים, תקבל שגיאה שבחרת יותר מדי צמתים. אם זה קורה לך, לחץ על כפתור "מעבר ה- API" כדי להוריד את הקובץ הגדול שלך.
הערה מס '2: אם קובץ ה- OSM שהורדת גדול מ- 30MB, תוכנית Python שכתבתי תאט באופן ניכר. אם אתה נחוש להשתמש באזור גדול, שקול לכתוב סקריפט כדי לזרוק נתונים מיותרים שאתה לא מתכנן לצייר.
שלב 2: הגדרת התהליך II: הבנת הנתונים
"יש לי את הנתונים … מה עכשיו?"
התחל בפתיחת קובץ OSM שהורדת לתוכנת עריכת הטקסט האהובה עליך. תחילה תבחין שמדובר בקובץ XML, וזה נהדר! XML מספיק קל לניתוח. תחילת הקובץ שלך אמורה להיראות כמעט זהה לתמונה הראשונה של שלב זה - יפורטו כמה מטא נתונים בסיסיים וגבולות גיאוגרפיים.
בעת גלילת הקובץ, תבחין בשלושה רכיבי נתונים המשמשים לאורך כל הזמן:
- צמתים
- דרכים
- מערכות יחסים
אלמנט הנתונים הבסיסי ביותר, צומת פשוט מכיל מזהה ייחודי, קו רוחב ואורך. כמובן, ישנם מטא נתונים נוספים, אך אנו יכולים לבטל אותם בבטחה.
דרכים הן אוספים של צמתים. ניתן לעבד דרך כצורה סגורה או כקו פתוח. הדרכים מורכבות מאוסף של צמתים המזוהים על ידי המזהה הייחודי שלהם. הם מתויגים במפתחות המגדירים את קבוצת הנתונים שאליה הם שייכים. לדוגמה, הדרך המופיעה בתמונה השלישית למעלה שייכת לקבוצת הנתונים "מקום" ותת -הקבוצה שלה, "אי". במילים אחרות, דרך מסוימת זו שייכת לשכבת "האי" מתחת לקבוצת "המקום". לדרכים יש גם מזהים ייחודיים.
לבסוף, יחסים הם אוספים של דרכים. קשר יכול לייצג צורה מורכבת עם חורים או עם אזורים מרובים. לקשרים יהיה גם מזהה ייחודי ויתויגו באופן דומה לדרכים.
תוכל לקרוא עוד על רכיבי נתונים אלה מתוך ויקי OSM:
- צמתים
- דרכים
- מערכות יחסים
שלב 3: הגדרת תהליך III: עיכול הנתונים
כעת אמורה להיות לך הבנה שטחית לפחות של רכיבי הנתונים המרכיבים קובץ OSM. בשלב זה, אנו מעוניינים לקרוא את נתוני OSM באמצעות שפת הבחירה שלך. אמנם שלב זה הוא ממוקד פייתון, אך אם אינך מעוניין להשתמש בפייתון, עדיין עליך לקרוא חלק זה מכיוון שהוא מכיל כמה טיפים וטריקים.
חבילת xml כלולה כברירת מחדל ברוב הפצות ה- Python הסטנדרטיות. אנו נשתמש בחבילה זו כדי לנתח בקלות רבה את קובץ OSM שלנו כפי שמוצג בתמונה הראשונה. בלולאה אחת עבור לולאה, אתה יכול לעבד את הטיפול בנתוני OSM עבור כל רכיב נתונים מסוים.
בשורה האחרונה של התמונה, תבחין שאני בודק את תג 'גבולות'. שלב זה חשוב ביותר בתרגום ערכי הרוחב והאורך לפיקסלים על המסך. אני ממליץ בחום להריץ המרה זו בזמן טעינת קובץ OSM, מכיוון שההמרה ההמונית של נתונים היא עתירת תהליכים.
אפרופו המרת קווי רוחב ואורך לקואורדינטות מסך, הנה קישור לפונקציית החישוב שכתבתי. סביר להניח שתבחין במשהו קצת מוזר בהמרת קו הרוחב לקואורדינטות מסך. יש צעד נוסף מעורב בהשוואה לאורך! כפי שמתברר, נתוני OSM מעוצבים בשיטת הקרנת Pseudo-Mercator. למרבה המזל, ל- OSM יש כאן תיעוד פנטסטי על נושא זה, והם מספקים את פונקציות המרת קו הרוחב למספר לא מבוטל של שפות. מדהים!
הערה: בקוד שלי, קואורדינטת המסך (0, 0) היא הפינה השמאלית העליונה של המסך.
שלב 4: יישום מעצב מפות Python
עד לנקודה זו, דנתי בקובץ הנתונים של OSM - מה זה, איך לקרוא אותו ומה לעשות עם זה. כעת אדון בתוכנה שכתבתי כדי להתמודד עם ויזואליזציה של מפות סגנוניות (ריפו GitHub מסופק במבוא).
היישום הספציפי שלי מתמקד בבקרת משתמשים על צינור העיבוד. באופן ספציפי, אני מאפשר למשתמש לבחור את השכבות שהוא רוצה שיהיו גלויות ואיך הוא רוצה שהשכבה הזו תדמיין. כפי שציינתי בקצרה קודם, ישנם שני סוגים של אלמנטים שניתנו: פריטי מילוי ופריטים. מילוי מוגדר רק על ידי צבע, בעוד קווים מוגדרים לפי צבע, רוחב קו, סגנון קו, סגנון כובע קו וסגנון צירוף קווים.
כשהמשתמש מבצע שינויים בסגנונות השכבה ובנראות, השינויים משתקפים ביישומון המפה מימין. לאחר שמשתמש שינה את מראה המפה לשביעות רצונו, הוא יכול להתאים את מימד המפה המרבי ולשמור את המפה כתמונה במחשב שלו. בשמירת תמונה יישמר גם קובץ תצורה של משתמשים. זה מבטיח שמשתמש יכול לזכור ולהשתמש מחדש בתצורה שבה השתמש כדי ליצור תמונה מסוימת בכל עת.
שלב 5: יישום חסרון + פתרון
כשהתחלתי לסגנן מפה באופן ידני, גיליתי שזה תהליך די מייגע. הצעה למשתמש שליטה מקסימלית יכולה להיות פשוט מכריעה בגלל ריבוי ה"כפתורים "הזמינים. עם זאת, יש פתרון פשוט, הכולל מעט סקריפטים נוספים.
התחלתי לזהות באילו שכבות אני מתעניין במיוחד. לצורך ההנחיה הזו, נניח שאני מתעניין ביותר בבניינים (כולם), בנהרות, בכבישים ראשיים וברחובות פנימיים. הייתי כותב סקריפט שבו אני יוצר מופע של תצורה, מחליף מצבי שכבה כראוי באמצעות הפונקציה setItemState () וקבועים מוגדרים, וקובע צבעים על סמך האופן שבו הייתי רוצה שהשכבות שלי יופיעו באמצעות setValue (). ניתן להעתיק את קובץ התצורה המתקבל שנשמר לתיקיית הקונפיגס ולהעלות אותו על ידי המשתמש.
סקריפט לדוגמה נמצא בתמונה למעלה. התמונה השנייה היא דוגמה כיצד ייראו פונקציות העוזר, ומכיוון שכולם בעצם זהים, רק עם קבועים משתנים, כללתי רק תמונה של דוגמה אחת.
שלב 6: תחומי שיפור
לאחר שהרהרתי ביישום התוכנה שלי, זיהיתי מספר תחומים שיהיו שיפורים מועילים עבור משתמשי כוח.
- עיבוד שכבות דינמי. נכון לעכשיו, יש לי רשימה מוגדרת מראש של שכבות שיוצגו, זהו. חלק מההצדקה היה הקושי לקבוע אם שכבה צריכה להיות קו או מילוי. כתוצאה מכך, כמעט בכל קובץ OSM שתפתח, תתקבל בברכה שלל אזהרות על שכבות שלא יוצגו. לעתים קרובות אלה כל כך מינימליים שזה לא בעיה, אבל כנראה שיהיו חסרים שכבות קריטיות. עיבוד שכבות דינמי יבטל חששות אלה.
- הקצאת שכבה דינאמית. זה הולך יד ביד עם מס '1; אם אתה רוצה עיבוד שכבה דינמית, אתה צריך הקצאת שכבה דינאמית (כלומר, זיהוי שכבת מילוי לעומת שכבת קו). ניתן היה להשיג זאת באופן סביר, כפי שלמדתי, מכיוון שדרכים שהצומת הראשון והאחרון שלהן זהים יהיו נתיבים סגורים ולכן יתמלאו.
- קבוצות צבע. מפה מסוגננת מכילה לעתים קרובות מספר שכבות בעלות סגנון זהה, ומאפשר למשתמש לשנות את סגנון הקבוצה במקביל, יקטין מאוד את זמן השימוש של המשתמש בעריכת שכבות אחת-אחת.
שלב 7: סגירת מחשבות
תודה לכולם על שהקדשת מזמנך לקרוא את המדריך שלי. פרויקט זה מייצג את שיאם של שעות רבות של מחקר, עיצוב, תכנות וניפוי באגים. אני מקווה שהצלחתי לספק משטח שיגור שממנו תוכל לבנות פרויקט משלך או לבנות על מה שכבר כתבתי. אני גם מקווה שהחסרונות והטיפים שלי מספקים הרבה נקודות שיש לקחת בחשבון בעיצוב שלך. אם אתה פחות נוטה לתכנות ויותר נוטה ליצור יצירות אמנות, אשמח לראות מה אתה כותב בתגובות! האפשרויות אינסופיות!
תודה מיוחדת לתורמי OpenStreetMap! פרויקטים כאלה לא היו מתאפשרים ללא מאמציהם המשמעותיים.
אנא יידע אותי אם יש לך שאלות בתגובות!
מקום שני באתגר המפות
מוּמלָץ:
צור ספר מפות באמצעות מפות Google: 17 שלבים (עם תמונות)
ערוך ספר מפות באמצעות מפות Google: לפני כמה ימים חיפשתי בחנות הספרים מדריך רחובות למחוז DuPage, IL מכיוון שחברה שלי גרה שם וצריכה מפת רחוב מפורטת. לרוע המזל, היחיד שהיה להם קרוב היה אחד למחוז קוק (כמו זה
למד כיצד לעצב PCB מעוצב בהתאמה אישית עם EasyEDA כלים מקוונים: 12 שלבים (עם תמונות)
למד כיצד לעצב PCB המעוצב בהתאמה אישית בעזרת EasyEDA Online Tools: תמיד רציתי לעצב PCB מותאם אישית, ועם כלים מקוונים ואב טיפוס זול של PCB מעולם לא היה קל יותר מעכשיו! אפשר אפילו להרכיב את רכיבי הר המשטח בזול ובקלות בנפח קטן כדי לחסוך את הסול הקשה
כיצד להכין מד טמפרטורה בהתאמה אישית באמצעות תרשים עמודות ו Atmega328p: 3 שלבים (עם תמונות)
כיצד להכין מד טמפרטורה מותאם אישית DIY באמצעות תרשים עמודות & Atmega328p: בפוסט זה אראה לך כיצד להכין מד טמפרטורה באמצעות תרשים עמודות & Atmega328p. הפוסט יכלול את כל הפרטים כמו תרשים מעגלים, ייצור PCB, קידוד, הרכבה & בדיקה. צירפתי גם סרטון המכיל את כל
הכינו ספסל מבחן Arduino בהתאמה אישית באמצעות גלישת חוטים: 7 שלבים (עם תמונות)
צור ספסל מבחן Arduino מותאם אישית באמצעות גלישת חוטים: מדריך זה יראה לך דרך קלה לחבר Arduino Nano ללוחות פריצת PCB שונים. פרויקט זה בא במהלך החיפוש שלי אחר דרך יעילה אך לא הרסנית לקשר בין מספר מודולים. היו לי חמישה מודולים שרציתי
כיצד להכין אחיזת Joy Con בהתאמה אישית: 7 שלבים (עם תמונות)
איך להכין אחיזה של Joy Joy בהתאמה אישית: שלום, ברוכים הבאים למדריך הראשון שלי! אל תהסס להוסיף כל עצה או ביקורת בונה בהערות, הכל מוערך, אז הגעת לכאן כדי ללמוד כיצד לבצע אחיזת שמחה בהתאמה אישית. כאן אפרט כיצד לבצע כל שלב בנפרד