עזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד
-
@יאיר-דניאל אני לא רוצה לטעון מאגר במשקל של 300 mb שזנן העיבוד שלו ארוך הרבה יותר
@aass זה מה שזה שוקל?
החישוב של הדרכים?
כי אני לא מאמין שבאוסמאנד יש קובץ מידע עם מיפוי של זמן ההליכה בכל הארץ... אלא זה סוג של אלגוריתם (אגב, משוכלל מאוד! שמחשב גם עליות וירידות ורמת קושי של הדרך) שמחשב את אורך הדרך בהליכה רגלית. -
@aass זה מה שזה שוקל?
החישוב של הדרכים?
כי אני לא מאמין שבאוסמאנד יש קובץ מידע עם מיפוי של זמן ההליכה בכל הארץ... אלא זה סוג של אלגוריתם (אגב, משוכלל מאוד! שמחשב גם עליות וירידות ורמת קושי של הדרך) שמחשב את אורך הדרך בהליכה רגלית.@יאיר-דניאל כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
זה מה שזה שוקל?
תבדוק... ככה זכור לי. האלגוריתם יחסית דורש הרבה זמן עיבוד, תבדוק על השיאומי מקשים שלך
-
@יאיר-דניאל כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
זה מה שזה שוקל?
תבדוק... ככה זכור לי. האלגוריתם יחסית דורש הרבה זמן עיבוד, תבדוק על השיאומי מקשים שלך
@aass אפליקציית אוסאמנד כולה - כולל מפות ישראל ופלסטינה - שוקלת 297 מ"ב.
בלי המפות זה סה"כ 4.7 מ"ב... כך שכנראה האלגוריתם הזה נמצא בתוך המפות של המדינות - אבל זה מוזר לאלל'ה לבנות את זה בצורה כזו.
למה שזה לא יהיה ישר באפליקצייה עצמה.
אני מנסה כעת לבדוק את זה קצת יותר בעזרת AI מקווה שאגיע למסקנה ברורה יותר. -
@aass אפליקציית אוסאמנד כולה - כולל מפות ישראל ופלסטינה - שוקלת 297 מ"ב.
בלי המפות זה סה"כ 4.7 מ"ב... כך שכנראה האלגוריתם הזה נמצא בתוך המפות של המדינות - אבל זה מוזר לאלל'ה לבנות את זה בצורה כזו.
למה שזה לא יהיה ישר באפליקצייה עצמה.
אני מנסה כעת לבדוק את זה קצת יותר בעזרת AI מקווה שאגיע למסקנה ברורה יותר.@יאיר-דניאל תבדוק כמה זמן לוקח לה לחשב מסלול
-
@יאיר-דניאל תבדוק כמה זמן לוקח לה לחשב מסלול
@aass פחות משניה!
בדקתי בתוך בני ברק לדוגמא - מרבי עקיבא זבוטינסקי לחזון איש עזרא. זה מרחק של 1.78 ק"מ.בכ"א התשובה לשאלתי -
כך שכנראה האלגוריתם הזה נמצא בתוך המפות של המדינות - אבל זה מוזר לאלל'ה לבנות את זה בצורה כזו.
למה שזה לא יהיה ישר באפליקצייה עצמה.נמצאת בספויילר ביתר פירוט.
או בקצרה - האלגוריתם שוקל כלום וחצי, הרעיון הוא שהוא מושך את הנתונים מהמפה עצמה - והוא מחשב לפי נקודות שיש במפה, כמה המרחק בין נקודה א' לנקודה ב'.
לכן הוא עצמו לא שוקל כלום - אבל קובץ המפות שוקל מעל 200 מ"ב. מה שכן עיין בספויילר - לא יודע איך ליישם את זה בקלות ובמדוייק, אבל תוכל להוריד את זה להערכתי למשהו כמו 50 מ"ב או משהו כזה.הדרישה שלך לאפליקציה "קלה" שלא תתפוס יותר מדי שטח אחסון במכשיר היא סופר חשובה.
הנה הסוד לגבי מנועי ניווט באופליין: האלגוריתם עצמו לא שוקל כמעט כלום, מה ששוקל המון אלו הנתונים (המפה ונתוני הטופוגרפיה).
הנה הפירוט שיעזור לך לתכנן את הארכיטקטורה של "מוביטוס" נכון:
-
משקל האלגוריתם עצמו (הקוד)
קוד של אלגוריתם ניווט כמו A-Star שדיברנו עליו קודם הוא קצרצר. אם תכתוב אותו ב-Java, Kotlin, Dart או כל שפה אחרת, הוא ייקח אולי כמה מאות שורות קוד. זה מתרגם לקילובייטים בודדים (KB). מבחינת משקל הקוד נטו – אין לך שום בעיה, הוא קליל ומהיר. -
משקל הנתונים (האתגר האמיתי)
כדי שהאלגוריתם יוכל לחשב מסלול ללא אינטרנט, האפליקציה חייבת להכיל בתוכה את "גרף המפה" (כל הרחובות, הצמתים ואורכם) וכן את נתוני הגובה (כדי לדעת אם יש עליות בדרך לתחנה).
קובץ מפה מלא של מדינה (אפילו קטנה), יחד עם נתוני גובה מדויקים, יכול בקלות לשקול מאות מגה-בייטים (MB). -
איך שומרים על "מוביטוס" קלילה?
אם אתה רוצה להכניס ניווט אופליין רגלי לתחנת האוטובוס מבלי לנפח את האפליקציה, הנה כמה שיטות מקצועיות שכדאי ליישם:
סינון המפה (Pruning Data): המשתמש שלך רק צריך ללכת לתחנת האוטובוס. לכן, אתה ממש לא צריך לשמור במפה שלך את כל הבניינים, החנויות, העצים או הכבישים המהירים (שממילא אסור להולכי רגל ללכת בהם). כשאתה מייבא את המידע מ-OpenStreetMap, עליך לסנן החוצה את כל המידע המיותר ולהשאיר רק מדרכות, שבילים וכבישים עירוניים רלוונטיים. זה יחתוך את משקל קובץ המפה שלך בעשרות אחוזים.
בדיקת מנוע BRouter: במקום להסתכל על OsmAnd (שהיא אפליקציה כבדה שמכילה המון פיצ'רים), כדאי לך להציץ בקוד הפתוח של מנוע בשם BRouter. זהו מנוע ניווט אופליין שמיועד ספציפית להליכה ואופניים. קבצי המידע שלו (Routing Data) עברו דחיסה חכמה מאוד והם שוקלים מעט מאוד יחסית למתחרים.
הורדת אזורים (Bounding Box): במקום להכריח את המשתמש להוריד את מפת כל הארץ מראש, תן לו אפשרות להוריד רק את העיר או האזור שבו הוא גר. קובץ ניווט אופליין של עיר בודדת ישקול מגה-בייטים ספורים בלבד.
התפשרות על רזולוציית גובה: נתוני טופוגרפיה מוסיפים המון משקל. אם אתה מחליט שחשוב לך לחשב עליות, תשתמש בקבצי גובה ברזולוציה נמוכה. ההבדל בין דיוק של 30 מטר לדיוק של 90 מטר הוא עצום במשקל הקובץ, אבל המשתמש בקושי ירגיש את זה כשהוא הולך לתחנה.
-
-
@יאיר-דניאל תבדוק כמה זמן לוקח לה לחשב מסלול
-
כרגע חישוב מרחק הליכה מבוסס על מרחק אווירי, פתרון שכמובן רחוק מלהיות מושלם .
יש טעם בכזה ניווט כאשר זה המצב?@aass כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
יש טעם בכזה ניווט כאשר זה המצב?
אני חושב שכן
כי אחרי הכל זה הליכה רגלית בשונה מרכב שהוא צריך לחשב גם כבישים חד צדדים וגם מדרגות וכו‘ ברגל אפשר לעשות את כל זה -
@aass פחות משניה!
בדקתי בתוך בני ברק לדוגמא - מרבי עקיבא זבוטינסקי לחזון איש עזרא. זה מרחק של 1.78 ק"מ.בכ"א התשובה לשאלתי -
כך שכנראה האלגוריתם הזה נמצא בתוך המפות של המדינות - אבל זה מוזר לאלל'ה לבנות את זה בצורה כזו.
למה שזה לא יהיה ישר באפליקצייה עצמה.נמצאת בספויילר ביתר פירוט.
או בקצרה - האלגוריתם שוקל כלום וחצי, הרעיון הוא שהוא מושך את הנתונים מהמפה עצמה - והוא מחשב לפי נקודות שיש במפה, כמה המרחק בין נקודה א' לנקודה ב'.
לכן הוא עצמו לא שוקל כלום - אבל קובץ המפות שוקל מעל 200 מ"ב. מה שכן עיין בספויילר - לא יודע איך ליישם את זה בקלות ובמדוייק, אבל תוכל להוריד את זה להערכתי למשהו כמו 50 מ"ב או משהו כזה.הדרישה שלך לאפליקציה "קלה" שלא תתפוס יותר מדי שטח אחסון במכשיר היא סופר חשובה.
הנה הסוד לגבי מנועי ניווט באופליין: האלגוריתם עצמו לא שוקל כמעט כלום, מה ששוקל המון אלו הנתונים (המפה ונתוני הטופוגרפיה).
הנה הפירוט שיעזור לך לתכנן את הארכיטקטורה של "מוביטוס" נכון:
-
משקל האלגוריתם עצמו (הקוד)
קוד של אלגוריתם ניווט כמו A-Star שדיברנו עליו קודם הוא קצרצר. אם תכתוב אותו ב-Java, Kotlin, Dart או כל שפה אחרת, הוא ייקח אולי כמה מאות שורות קוד. זה מתרגם לקילובייטים בודדים (KB). מבחינת משקל הקוד נטו – אין לך שום בעיה, הוא קליל ומהיר. -
משקל הנתונים (האתגר האמיתי)
כדי שהאלגוריתם יוכל לחשב מסלול ללא אינטרנט, האפליקציה חייבת להכיל בתוכה את "גרף המפה" (כל הרחובות, הצמתים ואורכם) וכן את נתוני הגובה (כדי לדעת אם יש עליות בדרך לתחנה).
קובץ מפה מלא של מדינה (אפילו קטנה), יחד עם נתוני גובה מדויקים, יכול בקלות לשקול מאות מגה-בייטים (MB). -
איך שומרים על "מוביטוס" קלילה?
אם אתה רוצה להכניס ניווט אופליין רגלי לתחנת האוטובוס מבלי לנפח את האפליקציה, הנה כמה שיטות מקצועיות שכדאי ליישם:
סינון המפה (Pruning Data): המשתמש שלך רק צריך ללכת לתחנת האוטובוס. לכן, אתה ממש לא צריך לשמור במפה שלך את כל הבניינים, החנויות, העצים או הכבישים המהירים (שממילא אסור להולכי רגל ללכת בהם). כשאתה מייבא את המידע מ-OpenStreetMap, עליך לסנן החוצה את כל המידע המיותר ולהשאיר רק מדרכות, שבילים וכבישים עירוניים רלוונטיים. זה יחתוך את משקל קובץ המפה שלך בעשרות אחוזים.
בדיקת מנוע BRouter: במקום להסתכל על OsmAnd (שהיא אפליקציה כבדה שמכילה המון פיצ'רים), כדאי לך להציץ בקוד הפתוח של מנוע בשם BRouter. זהו מנוע ניווט אופליין שמיועד ספציפית להליכה ואופניים. קבצי המידע שלו (Routing Data) עברו דחיסה חכמה מאוד והם שוקלים מעט מאוד יחסית למתחרים.
הורדת אזורים (Bounding Box): במקום להכריח את המשתמש להוריד את מפת כל הארץ מראש, תן לו אפשרות להוריד רק את העיר או האזור שבו הוא גר. קובץ ניווט אופליין של עיר בודדת ישקול מגה-בייטים ספורים בלבד.
התפשרות על רזולוציית גובה: נתוני טופוגרפיה מוסיפים המון משקל. אם אתה מחליט שחשוב לך לחשב עליות, תשתמש בקבצי גובה ברזולוציה נמוכה. ההבדל בין דיוק של 30 מטר לדיוק של 90 מטר הוא עצום במשקל הקובץ, אבל המשתמש בקושי ירגיש את זה כשהוא הולך לתחנה.
@יאיר-דניאל כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
פחות משניה!
תחשב את זה שצריך למדוד זמן בין נקודת המוצא לכל התחנות שבסביבה שלה, בין תחנת היעד לנקודת היעד ולפעמים גם בין תחנות באמצע הדרך
-
-
@יאיר-דניאל כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
פחות משניה!
תחשב את זה שצריך למדוד זמן בין נקודת המוצא לכל התחנות שבסביבה שלה, בין תחנת היעד לנקודת היעד ולפעמים גם בין תחנות באמצע הדרך
@aass יצרתי לך מפה מסוננת שכוללת רק את הכבישים עצמם - בלי בניינים וכו'
מצורף - שוקל יחד 45 מ"ב. במקום 118 מ"ב!מקווה שזה עובד טוב.
תחלץ את שניהם יחד - זה קובץ מפוצל.
moovitus-all-roads-map.osm.part1.rar
moovitus-all-roads-map.osm.part2.rarאני מנסה כעת להקטין את זה יותר.
אגב האלגוריתם עצמו - זה הקובץ הזה:
הראשון זה הקוד שקובע חוקים לגבי מרחקים - כמה זמן ומאמץ הן לוקחים בהליכה.
routing.xmlהשני זה האלגוריתם עצמו:
CMakeLists.txtאגב, עיין בספויילר - זה חשוב!
חשוב שתדע שלשלוף רק את אלגוריתם הניווט מתוך הקוד של OsmAnd ולהכניס אותו לאפליקציה שלך זו משימה כמעט בלתי אפשרית. הקוד שלהם מסובך מאוד ותלוי בפורמט מפות סגור משלהם שנקרא OBF.
אם אתה רוצה להכניס מנוע חישוב זמנים לאפליקציה שלך בצורה חלקה, רוב המפתחים משתמשים בספריות קוד פתוח ייעודיות לניווט שנועדו בדיוק לזה – לקרוא את קובץ ה-PBF המוקטן שיצרנו קודם ולחשב מסלול.
הנה השתיים המובילות והמומלצות ביותר לתחום הזה:
GraphHopper: ספרייה חזקה מאוד, מבוססת Java, שקלה מאוד להטמעה באפליקציות אנדרואיד ומעולה לניווט אופליין רגלי.
BRouter: מנוע קליל שנוצר ספציפית לניווט אופליין להולכי רגל ורוכבי אופניים (יחסוך לך המון משקל באפליקציה).
באיזו סביבת פיתוח או שפת תכנות (למשל Android Studio/Java, Flutter, או React Native) אתה כותב את האפליקציה שלך?
בהצלחה!
אשמח לשמוע שעזרתי במשהו.

