תוכן עניינים:

כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap: 7 שלבים (עם תמונות)
כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap: 7 שלבים (עם תמונות)

וִידֵאוֹ: כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap: 7 שלבים (עם תמונות)

וִידֵאוֹ: כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap: 7 שלבים (עם תמונות)
וִידֵאוֹ: Полный курс по Next js - Изучи Nextjs за 2 часа! | React SSR +таймкоды 2024, נוֹבֶמבֶּר
Anonim
כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap
כיצד ליצור מפות מסוגננות בהתאמה אישית באמצעות OpenStreetMap

במדריך זה אתאר תהליך שבו תוכל ליצור מפות מסוגננות משלך בהתאמה אישית. מפה מסוגננת היא מפה שבה המשתמש יכול לציין אילו שכבות נתונים מדומיינות, וכן להגדיר את הסגנון שבו כל שכבה מדמיינת. ראשית אתאר את התהליך שבאמצעותו תוכל לכתוב תוכנה לעיצוב מפות, ואחריה דוגמה של תוכנת פייתון שכתבתי לביצוע משימה זו.

הסרטון הבא מדגיש כיצד אני יוצר באופן אישי מפות מסוגננות, אך ממשיך לקרוא לפרטים האינטימיים. אני מאוד מתרגש לראות מה הקהילה יוצרת!

מה המוטיבציה שלי מאחורי הפרויקט הזה?

למען האמת, התחלתי את הפרויקט הזה כי חשבתי שיהיה כיף לעשות אותו. הרעיון הזה השתולל במוחי בשנה האחרונה, ולבסוף לקחתי את הזמן הדרוש לי להגשמתו. לאחר יום של אבות טיפוס עם קצת סקריפטים בסיסיים, הצלחתי לייצר תוצאות מבטיחות ביותר - כל כך מבטיחות שידעתי שאני צריך לתכנת את התסריטים שלי כך שאחרים יוכלו ליצור יצירות משלהם בקלות.

המוטיבציה שלי בכתיבת ההנחיה נובעת מהעובדה שמצאתי מידע מינימלי ביותר כיצד ליצור מפות מסוגננות משלך מאפס. אני מקווה לחלוק את מה שלמדתי עם הקהילה.

משאבים/קישורים:

  • OpenStreetMap
  • OpenStreetMap Legalese
  • מאגר Github

אספקה

  • הפצת פייתון (השתמשתי באנקונדה ופייתון 3.6)
  • PyQt5 (לתלות GUI)

שלב 1: הגדרת התהליך I: הורדת קובץ OSM

הגדרת התהליך I: הורדת קובץ OSM
הגדרת התהליך I: הורדת קובץ OSM

כאשר התחלתי בפרוייקט זה, השאלה הבולטת ביותר הייתה "היכן אוכל להשיג נתוני מפה". באופן טבעי, כפי שהיית מצפה, חשבתי מיד על מפות Google. לאחר מחקר משמעותי גיליתי שגוגל ממש לא רוצה שאנשים ישחקו עם הנתונים שלהם, במובן יצירתי או אחר. למעשה, הם אוסרים במפורש גרידת אתרים ממפות Google.

למרבה המזל, הייאוש שלי היה קצר מועד לאחר שגיליתי את OpenStreetMap (OSM). OSM הוא פרויקט שיתופי הכולל אנשים מכל רחבי העולם התורמים נתונים. OSM מאפשרת שימוש מפורש בנתונים שלהם בשם תוכנת קוד פתוח. ככזה, ביקור בדף האינטרנט של OSM הוא המקום בו מתחיל מסע סגנונות המפות.

לאחר ההגעה לאתר OSM, לחץ על הכרטיסייה "ייצוא" כדי להציג את כלי ייצוא המפות. כעת, התקרב כדי לצפות באזור שבו אתה מעוניין לאסוף נתוני מפות. בחר בקישור "בחר ידנית אזור אחר", שיעלה קופסה על המסך שלך. צור והנח את הקופסה הזו על אזור העניין. לאחר שהיית מרוצה, לחץ על כפתור "ייצוא" כדי להוריד את קובץ הנתונים של OSM שלך.

הערה מס '1: אם האזור שבחרת מכיל יותר מדי נתונים, תקבל שגיאה שבחרת יותר מדי צמתים. אם זה קורה לך, לחץ על כפתור "מעבר ה- API" כדי להוריד את הקובץ הגדול שלך.

הערה מס '2: אם קובץ ה- OSM שהורדת גדול מ- 30MB, תוכנית Python שכתבתי תאט באופן ניכר. אם אתה נחוש להשתמש באזור גדול, שקול לכתוב סקריפט כדי לזרוק נתונים מיותרים שאתה לא מתכנן לצייר.

שלב 2: הגדרת התהליך II: הבנת הנתונים

הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים
הגדרת תהליך II: הבנת הנתונים

"יש לי את הנתונים … מה עכשיו?"

התחל בפתיחת קובץ OSM שהורדת לתוכנת עריכת הטקסט האהובה עליך. תחילה תבחין שמדובר בקובץ XML, וזה נהדר! XML מספיק קל לניתוח. תחילת הקובץ שלך אמורה להיראות כמעט זהה לתמונה הראשונה של שלב זה - יפורטו כמה מטא נתונים בסיסיים וגבולות גיאוגרפיים.

בעת גלילת הקובץ, תבחין בשלושה רכיבי נתונים המשמשים לאורך כל הזמן:

  1. צמתים
  2. דרכים
  3. מערכות יחסים

אלמנט הנתונים הבסיסי ביותר, צומת פשוט מכיל מזהה ייחודי, קו רוחב ואורך. כמובן, ישנם מטא נתונים נוספים, אך אנו יכולים לבטל אותם בבטחה.

דרכים הן אוספים של צמתים. ניתן לעבד דרך כצורה סגורה או כקו פתוח. הדרכים מורכבות מאוסף של צמתים המזוהים על ידי המזהה הייחודי שלהם. הם מתויגים במפתחות המגדירים את קבוצת הנתונים שאליה הם שייכים. לדוגמה, הדרך המופיעה בתמונה השלישית למעלה שייכת לקבוצת הנתונים "מקום" ותת -הקבוצה שלה, "אי". במילים אחרות, דרך מסוימת זו שייכת לשכבת "האי" מתחת לקבוצת "המקום". לדרכים יש גם מזהים ייחודיים.

לבסוף, יחסים הם אוספים של דרכים. קשר יכול לייצג צורה מורכבת עם חורים או עם אזורים מרובים. לקשרים יהיה גם מזהה ייחודי ויתויגו באופן דומה לדרכים.

תוכל לקרוא עוד על רכיבי נתונים אלה מתוך ויקי OSM:

  • צמתים
  • דרכים
  • מערכות יחסים

שלב 3: הגדרת תהליך III: עיכול הנתונים

הגדרת תהליך III: עיכול הנתונים
הגדרת תהליך III: עיכול הנתונים

כעת אמורה להיות לך הבנה שטחית לפחות של רכיבי הנתונים המרכיבים קובץ OSM. בשלב זה, אנו מעוניינים לקרוא את נתוני OSM באמצעות שפת הבחירה שלך. אמנם שלב זה הוא ממוקד פייתון, אך אם אינך מעוניין להשתמש בפייתון, עדיין עליך לקרוא חלק זה מכיוון שהוא מכיל כמה טיפים וטריקים.

חבילת xml כלולה כברירת מחדל ברוב הפצות ה- Python הסטנדרטיות. אנו נשתמש בחבילה זו כדי לנתח בקלות רבה את קובץ OSM שלנו כפי שמוצג בתמונה הראשונה. בלולאה אחת עבור לולאה, אתה יכול לעבד את הטיפול בנתוני OSM עבור כל רכיב נתונים מסוים.

בשורה האחרונה של התמונה, תבחין שאני בודק את תג 'גבולות'. שלב זה חשוב ביותר בתרגום ערכי הרוחב והאורך לפיקסלים על המסך. אני ממליץ בחום להריץ המרה זו בזמן טעינת קובץ OSM, מכיוון שההמרה ההמונית של נתונים היא עתירת תהליכים.

אפרופו המרת קווי רוחב ואורך לקואורדינטות מסך, הנה קישור לפונקציית החישוב שכתבתי. סביר להניח שתבחין במשהו קצת מוזר בהמרת קו הרוחב לקואורדינטות מסך. יש צעד נוסף מעורב בהשוואה לאורך! כפי שמתברר, נתוני OSM מעוצבים בשיטת הקרנת Pseudo-Mercator. למרבה המזל, ל- OSM יש כאן תיעוד פנטסטי על נושא זה, והם מספקים את פונקציות המרת קו הרוחב למספר לא מבוטל של שפות. מדהים!

הערה: בקוד שלי, קואורדינטת המסך (0, 0) היא הפינה השמאלית העליונה של המסך.

שלב 4: יישום מעצב מפות Python

יישום מעצב מפות Python
יישום מעצב מפות Python
יישום מפת סטייליסט Python
יישום מפת סטייליסט Python
יישום מעצב מפות Python
יישום מעצב מפות Python

עד לנקודה זו, דנתי בקובץ הנתונים של OSM - מה זה, איך לקרוא אותו ומה לעשות עם זה. כעת אדון בתוכנה שכתבתי כדי להתמודד עם ויזואליזציה של מפות סגנוניות (ריפו GitHub מסופק במבוא).

היישום הספציפי שלי מתמקד בבקרת משתמשים על צינור העיבוד. באופן ספציפי, אני מאפשר למשתמש לבחור את השכבות שהוא רוצה שיהיו גלויות ואיך הוא רוצה שהשכבה הזו תדמיין. כפי שציינתי בקצרה קודם, ישנם שני סוגים של אלמנטים שניתנו: פריטי מילוי ופריטים. מילוי מוגדר רק על ידי צבע, בעוד קווים מוגדרים לפי צבע, רוחב קו, סגנון קו, סגנון כובע קו וסגנון צירוף קווים.

כשהמשתמש מבצע שינויים בסגנונות השכבה ובנראות, השינויים משתקפים ביישומון המפה מימין. לאחר שמשתמש שינה את מראה המפה לשביעות רצונו, הוא יכול להתאים את מימד המפה המרבי ולשמור את המפה כתמונה במחשב שלו. בשמירת תמונה יישמר גם קובץ תצורה של משתמשים. זה מבטיח שמשתמש יכול לזכור ולהשתמש מחדש בתצורה שבה השתמש כדי ליצור תמונה מסוימת בכל עת.

שלב 5: יישום חסרון + פתרון

חסרון ביישום + פתרון
חסרון ביישום + פתרון
חסרון ביישום + פתרון
חסרון ביישום + פתרון

כשהתחלתי לסגנן מפה באופן ידני, גיליתי שזה תהליך די מייגע. הצעה למשתמש שליטה מקסימלית יכולה להיות פשוט מכריעה בגלל ריבוי ה"כפתורים "הזמינים. עם זאת, יש פתרון פשוט, הכולל מעט סקריפטים נוספים.

התחלתי לזהות באילו שכבות אני מתעניין במיוחד. לצורך ההנחיה הזו, נניח שאני מתעניין ביותר בבניינים (כולם), בנהרות, בכבישים ראשיים וברחובות פנימיים. הייתי כותב סקריפט שבו אני יוצר מופע של תצורה, מחליף מצבי שכבה כראוי באמצעות הפונקציה setItemState () וקבועים מוגדרים, וקובע צבעים על סמך האופן שבו הייתי רוצה שהשכבות שלי יופיעו באמצעות setValue (). ניתן להעתיק את קובץ התצורה המתקבל שנשמר לתיקיית הקונפיגס ולהעלות אותו על ידי המשתמש.

סקריפט לדוגמה נמצא בתמונה למעלה. התמונה השנייה היא דוגמה כיצד ייראו פונקציות העוזר, ומכיוון שכולם בעצם זהים, רק עם קבועים משתנים, כללתי רק תמונה של דוגמה אחת.

שלב 6: תחומי שיפור

אזורים לשיפור
אזורים לשיפור

לאחר שהרהרתי ביישום התוכנה שלי, זיהיתי מספר תחומים שיהיו שיפורים מועילים עבור משתמשי כוח.

  1. עיבוד שכבות דינמי. נכון לעכשיו, יש לי רשימה מוגדרת מראש של שכבות שיוצגו, זהו. חלק מההצדקה היה הקושי לקבוע אם שכבה צריכה להיות קו או מילוי. כתוצאה מכך, כמעט בכל קובץ OSM שתפתח, תתקבל בברכה שלל אזהרות על שכבות שלא יוצגו. לעתים קרובות אלה כל כך מינימליים שזה לא בעיה, אבל כנראה שיהיו חסרים שכבות קריטיות. עיבוד שכבות דינמי יבטל חששות אלה.
  2. הקצאת שכבה דינאמית. זה הולך יד ביד עם מס '1; אם אתה רוצה עיבוד שכבה דינמית, אתה צריך הקצאת שכבה דינאמית (כלומר, זיהוי שכבת מילוי לעומת שכבת קו). ניתן היה להשיג זאת באופן סביר, כפי שלמדתי, מכיוון שדרכים שהצומת הראשון והאחרון שלהן זהים יהיו נתיבים סגורים ולכן יתמלאו.
  3. קבוצות צבע. מפה מסוגננת מכילה לעתים קרובות מספר שכבות בעלות סגנון זהה, ומאפשר למשתמש לשנות את סגנון הקבוצה במקביל, יקטין מאוד את זמן השימוש של המשתמש בעריכת שכבות אחת-אחת.

שלב 7: סגירת מחשבות

סגירת מחשבות
סגירת מחשבות
סגירת מחשבות
סגירת מחשבות
סגירת מחשבות
סגירת מחשבות

תודה לכולם על שהקדשת מזמנך לקרוא את המדריך שלי. פרויקט זה מייצג את שיאם של שעות רבות של מחקר, עיצוב, תכנות וניפוי באגים. אני מקווה שהצלחתי לספק משטח שיגור שממנו תוכל לבנות פרויקט משלך או לבנות על מה שכבר כתבתי. אני גם מקווה שהחסרונות והטיפים שלי מספקים הרבה נקודות שיש לקחת בחשבון בעיצוב שלך. אם אתה פחות נוטה לתכנות ויותר נוטה ליצור יצירות אמנות, אשמח לראות מה אתה כותב בתגובות! האפשרויות אינסופיות!

תודה מיוחדת לתורמי OpenStreetMap! פרויקטים כאלה לא היו מתאפשרים ללא מאמציהם המשמעותיים.

אנא יידע אותי אם יש לך שאלות בתגובות!

אתגר מפות
אתגר מפות
אתגר מפות
אתגר מפות

מקום שני באתגר המפות

מוּמלָץ: