עזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד
-
@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) אתה כותב את האפליקציה שלך?
בהצלחה!
אשמח לשמוע שעזרתי במשהו.
-
עדכון -
למרות שהחישוב עצמו היה מהיר מאוד, היתה בעיה שטעינת האפליקציה בשיאומי מקשים שחוץ מזה שהמעבד שלו חלש גם זמן הקריאה/כתיבה לדיסק שלו מאוד איטית, מה שגרם לכך שבמשך 30 שניות מרגע פתיחת האפליקציה האפליקציה הייתה איטית.בעיה זו נפתרה על ידי מעבר לקידוד של חלק מהנתונים באופן בינארי.
הצלחתי ליצור מסד נתונים של מרחק בין תחנות לכתובות אבל זה האט את האפליקציה, יתכן שהפתרון שהזכרתי ישפיע גם על זה.
אמשיך לעדכן.
שאלה: האם שווה מרחק אמיתי אם הגודל של זה יוסיף עוד 80 mb?
-
עדכון -
למרות שהחישוב עצמו היה מהיר מאוד, היתה בעיה שטעינת האפליקציה בשיאומי מקשים שחוץ מזה שהמעבד שלו חלש גם זמן הקריאה/כתיבה לדיסק שלו מאוד איטית, מה שגרם לכך שבמשך 30 שניות מרגע פתיחת האפליקציה האפליקציה הייתה איטית.בעיה זו נפתרה על ידי מעבר לקידוד של חלק מהנתונים באופן בינארי.
הצלחתי ליצור מסד נתונים של מרחק בין תחנות לכתובות אבל זה האט את האפליקציה, יתכן שהפתרון שהזכרתי ישפיע גם על זה.
אמשיך לעדכן.
שאלה: האם שווה מרחק אמיתי אם הגודל של זה יוסיף עוד 80 mb?
-
@aass קודם כל שאפו על החשיבה והביצוע
מאד חשוב שבאמת יהיה ניווט על ידי כתובת
לגבי הכמות MB
אולי אפשר לעשות שתי קבצים וכל אחד יבחר מה מתאים לו
אם זה לא מסובך מדי..
ד.א.
מתי יעלה העדכון הזה?
היום בלילה אתה גם מעלה עדכון?@מטען-נייד כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
מתי יעלה העדכון הזה?
היום בלילה אתה גם מעלה עדכון?הלילה באופן חד פעמי לא. מכיון שהאפליצקיה לא מושלמת עדיין.
-
עדכון -
למרות שהחישוב עצמו היה מהיר מאוד, היתה בעיה שטעינת האפליקציה בשיאומי מקשים שחוץ מזה שהמעבד שלו חלש גם זמן הקריאה/כתיבה לדיסק שלו מאוד איטית, מה שגרם לכך שבמשך 30 שניות מרגע פתיחת האפליקציה האפליקציה הייתה איטית.בעיה זו נפתרה על ידי מעבר לקידוד של חלק מהנתונים באופן בינארי.
הצלחתי ליצור מסד נתונים של מרחק בין תחנות לכתובות אבל זה האט את האפליקציה, יתכן שהפתרון שהזכרתי ישפיע גם על זה.
אמשיך לעדכן.
שאלה: האם שווה מרחק אמיתי אם הגודל של זה יוסיף עוד 80 mb?
@aass כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
שאלה: האם שווה מרחק אמיתי אם הגודל של זה יוסיף עוד 80 mb?
לענ"ד שווה המרחק ולגבי הזיכרון כמה שייקח ייקח
בדברים כאלו כל עוד אתה בטווח העשרות מ"ב ולא בגי'גות וחצי מהם זה לא שם המשחק -
עדכון -
למרות שהחישוב עצמו היה מהיר מאוד, היתה בעיה שטעינת האפליקציה בשיאומי מקשים שחוץ מזה שהמעבד שלו חלש גם זמן הקריאה/כתיבה לדיסק שלו מאוד איטית, מה שגרם לכך שבמשך 30 שניות מרגע פתיחת האפליקציה האפליקציה הייתה איטית.בעיה זו נפתרה על ידי מעבר לקידוד של חלק מהנתונים באופן בינארי.
הצלחתי ליצור מסד נתונים של מרחק בין תחנות לכתובות אבל זה האט את האפליקציה, יתכן שהפתרון שהזכרתי ישפיע גם על זה.
אמשיך לעדכן.
שאלה: האם שווה מרחק אמיתי אם הגודל של זה יוסיף עוד 80 mb?
@aass כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
למרות שהחישוב עצמו היה מהיר מאוד, היתה בעיה שטעינת האפליקציה בשיאומי מקשים שחוץ מזה שהמעבד שלו חלש גם זמן הקריאה/כתיבה לדיסק שלו מאוד איטית, מה שגרם לכך שבמשך 30 שניות מרגע פתיחת האפליקציה האפליקציה הייתה איטית.
למה זה שונה מאוסמאנד?
@aass כתב בעזרה | אפליקציה אופליין לתחבורה ציבורית כולל לוחות זמנים (תכנון מסלול בפיתוח) - רעיונות לשיפור העיצוב ועוד:
שאלה: האם שווה מרחק אמיתי אם הגודל של זה יוסיף עוד 80 mb?
לדעתי, כן.
-
@aass שאפו על האפליקציה
רציתי להציע רעיון שיאפשר תשלום מנוי מתוך האפליקציה עצמה (אפילו באמצעות גוגל פליי או משהו כזה)
כך שיאפשר לבעלי חנוייות אפליקציות (לדוגמא 'שואו')
להכניס את האפליקציה ולאפשר להוריד אותה לכלל המשתמשים ורק מי שישלם יקבל גישה מלאה לאפליקציה (כמובן תחסום את זה חזק שלא יהיה ניתן לפריצה) -
@aass שאפו על האפליקציה
רציתי להציע רעיון שיאפשר תשלום מנוי מתוך האפליקציה עצמה (אפילו באמצעות גוגל פליי או משהו כזה)
כך שיאפשר לבעלי חנוייות אפליקציות (לדוגמא 'שואו')
להכניס את האפליקציה ולאפשר להוריד אותה לכלל המשתמשים ורק מי שישלם יקבל גישה מלאה לאפליקציה (כמובן תחסום את זה חזק שלא יהיה ניתן לפריצה)@זונדל-גרנד לא כזה מורכב- כבר כיום מי שלא שילם ונכנס לאפליקצייה - יש לו הודעה על כך, עם כתובת מייל.
מה צריך יותר מזה? -
@aass שאפו על האפליקציה
רציתי להציע רעיון שיאפשר תשלום מנוי מתוך האפליקציה עצמה (אפילו באמצעות גוגל פליי או משהו כזה)
כך שיאפשר לבעלי חנוייות אפליקציות (לדוגמא 'שואו')
להכניס את האפליקציה ולאפשר להוריד אותה לכלל המשתמשים ורק מי שישלם יקבל גישה מלאה לאפליקציה (כמובן תחסום את זה חזק שלא יהיה ניתן לפריצה) -
בקרוב!!!
ככל הנראה יתאפשר ניווט וקבלת מסלול בתחבורה ציבורית אופליין!
עובד גם על שיאומי מקשים. זמן להצגת וחישוב מסלולים בשיאומי מקשים - 0.5 שניות בלבד.
פרטים בהמשך.
הכל כולל העיצוב ראשוניים ממש...



@aass
אני חייב לשתף, בדיוק ביום רביעי החלטתי לקנות את האפליקציה (אחרי שהשתמשתי בה בבינה״ז ניסן והתלהבתי מאוד מהרעיון ועוד יותר מהביצוע, ואין ספק שמאז השתכללה יותר, ולמרות שאני משתמש בו בנגן ולא בטלפון אז אני לא מממש את כל היכולות (DTMF) פשוט אין מילים), והיו לי כמה נסיעות ביום חמישי ובדיוק חשבתי להציע את הרעיון הזה.
מהנידון האחרון, לדעתי חישוב זמן ההליכה הוא לא ממש קריטי, בפרט שיש אפשרות לפתוח את מיקום התחנה באוסמנד.
וכן לגבי התשלום, לא רואה חיסרון בצורה שזה מתבצע כעת.
שורה תחתונה: קודם כל תודה, וכמובן מומלץ בחום. -
@זונדל-גרנד לא כזה מורכב- כבר כיום מי שלא שילם ונכנס לאפליקצייה - יש לו הודעה על כך, עם כתובת מייל.
מה צריך יותר מזה?@יאיר-דניאל אבל אם אני רוצה להוסיף את זה לחנות עבור כלל המשתמשים במכשיר שאני מייצר?!
-
@יאיר-דניאל אבל אם אני רוצה להוסיף את זה לחנות עבור כלל המשתמשים במכשיר שאני מייצר?!

