מטייל בהרים ללא אינטרנט: המפה לא נטענת, אות ה-GPS אובד, הסוללה מתרוקנת. לפי דו"ח קרן הבטיחות החיצונית, 70% מהתקריות בשטח קשורות לאיבוד התמצאות. אנו בונים אפליקציות טיולים המותאמות לתנאים כאלה: מפות לא מקוונות עם עיבוד וקטורי, מסלולי GPS מדויקים עם פרופילי גובה, נקודות עניין וקהילה מובנית. הניסיון שלנו — 5+ שנים בפיתוח לשטח, 50+ פרויקטים שהושלמו ל-iOS ול-Android. האלגוריתמים שלנו מפחיתים את הסיכון לאיבוד ב-40% באמצעות מעקב לא מקוון אמין והתראות קוליות.
מפות לא מקוונות: מתחת למכסה המנוע
מקור הנתונים העיקרי הוא OpenStreetMap. המסלולים מסווגים באמצעות תגיות route=hiking, sac_scale (רמת קושי: T1-T6), trail_visibility. לעיבוד וקטורי אנו משתמשים ב-Mapbox Maps SDK עם אזורים לא מקוונים דרך OfflineManager. המשתמש בוחר תיבת גבולות על המפה; האפליקציה מורידה את הסגנון והאריחים. גודל חבילה לטיול הררי של 50 ק"מ הוא 20-100 מגה-בייט בהתאם לרמות זום. ההתקדמות מנוטרת דרך OfflineRegionObserver.
חלופה היא MapLibre GL Native, פיצול קוד פתוח של Mapbox. היא מאפשרת אירוח שרת אריחים משלך המבוסס על tileserver-gl ו-OpenMapTiles. לפרויקטים רציניים, זה חוסך עד 60% בעלויות API — כ-2,000 דולר לחודש עבור 10,000 משתמשים פעילים. שרת אריחים באירוח עצמי עולה כ-500 דולר לחודש עבור VPS ותעבורה, ובקנה מידה גדול MapLibre זולה פי 2-3 מ-Mapbox.
OpenTopoMap (אריחי רסטר) היא אפשרות לא מקוונת פשוטה יותר, אך איכות ההתאמה לקנה מידה ירודה יותר.
כיצד ליצור אזור לא מקוון?
- בחר תיבת גבולות על המפה.
- אתחל את OfflineManager עם כתובת URL של סגנון.
- קרא ל-createOfflineRegion(for:context:).
- הירשם להתקדמות דרך OfflineRegionObserver.
let offlineManager = OfflineManager(styleURL: styleURL)
offlineManager.createOfflineRegion(for: region, context: context) { result in
switch result {
case .success(let region):
region.observeProgress { progress in
// Update UI
}
case .failure(let error):
// Handle error
}
} חישוב פרופיל גובה
נתוני הגובה מגיעים מ-SRTM (30 מ', גלובלי, חינמי) או מ-Copernicus DEM (10 מ', אירופה, מדויק יותר). הגובה לאורך המסלול נשאל דרך Open-Elevation API או שירות PostGIS מותאם אישית (let offlineManager = OfflineManager(styleURL: styleURL) offlineManager.createOfflineRegion(for: region, context: context) { result in switch result { case .success(let region): region.observeProgress { progress in // Update UI } case .failure(let error): // Handle error } } ).
תרשים הגובה מוצג עם Swift Charts ב-iOS 16+ (ST_Value(raster, geometry) עם גרדיאנט), MPAndroidChart ב-Android (AreaMark עם FillDrawable), או fl_chart ב-Flutter. מדדי מסלול — עליית גובה (+ ו-), גובה מקסימלי, זמן משוער לפי חוק נייסמית' (שעה לכל 5 ק"מ + שעה לכל 600 מ' עלייה) — מחושבים מקומית ממערך נקודות הגובה.
מדוע MapLibre משתלמת יותר לפרויקטים גדולים?
| קריטריון | Mapbox SDK | MapLibre GL Native |
|---|---|---|
| רישיון | בתשלום (קיימת תוכנית חינמית) | קוד פתוח (BSD) |
| עלויות API | נגרמות בקנה מידה גדול | אין (שרת אריחים משלך) |
| ביצועים | גבוהים ב-iOS/Android | דומים, עם יותר שליטה |
| התאמה אישית | מגבלות סגנון של Mapbox | התאמה אישית מלאה של סגנון |
| קהילה | גדולה, תיעוד נרחב | צומחת, פחות דוגמאות |
| מקור DEM | רזולוציה | כיסוי | עלות |
|---|---|---|---|
| SRTM | 30 מ' | גלובלי | חינמי |
| Copernicus DEM | 10 מ' | אירופה, ארה"ב | חינמי לשימוש לא מסחרי |
כיצד פועלת ניווט GPS בשבילים?
ניווט לרכב לא עובד בשבילים — אין גרף כבישים. בטיולים, אנו משתמשים בניווט מבוסס נקודות ציון. המסלול הוא LineString של נקודות GPS, והמכשיר נע לאורך הקו הזה.
המערכת מתריעה על סטייה: כאשר המרחק מהמיקום הנוכחי לנקודה הקרובה ביותר על ה-LineString עובר סף (20-50 מ'), אלגוריתם מחפש את הנקודה הקרובה ביותר על הפוליליין (LineChart). בעת סטייה — משוב הפטי, אות קולי ומחוון חזותי.
הוראות קוליות נוצרות עם AVSpeechSynthesizer (iOS) או TextToSpeech (Android): "בעוד 200 מטר פנה ימינה לשביל המוביל לפסגה." מצפן וכיוון משתמשים במגנומטר ובגירוסקופ (Turf.nearestPointOnLine, CMMotionManager). חשוב לעדכן את SensorManager בעת שינוי כיוון המכשיר — אחרת המצפן מסתובב בצורה שגויה במצב אופקי.
נקודות עניין ותוכן משתמשים
נקודות עניין על המסלול: פסגות, מעיינות, מעברים, בקתות, נקודות תצפית. נתונים מ-OpenStreetMap דרך תגיות CLLocationManager.headingOrientation, tourism=viewpoint, natural=peak. משתמשים מוסיפים תמונות, תיאורים ואזהרות. תמונות מועלות דרך S3 עם חתימה מראש ונדחסות ל-1600px בצד הארוך (amenity=shelter).
שכבת AR של שמות פסגות — תכונה חווייתית המשתמשת ב-ARKit (UIImage.jpegData(compressionQuality: 0.8)). היא מבדלת את האפליקציה ב-App Store.
קהילה ותוכן משתמשים (UGC)
משתמשים מפרסמים דוחות על מצב השבילים (עבירים, חסומים, מסוכנים). מפת חום פעילות הבנויה עם MapboxHeatmapLayer מקואורדינטות מסלולים. דירוגי מסלולים — דירוג כוכבים עם ביקורות מתויגות. ניתן לייצא מסלולים ל-GPX דרך Share Sheet.
בטיחות: מעקב קרבה ו-SOS
אופציונלי: "שיתוף מסלול" — קרובי משפחה רואים את מיקום המטייל בזמן אמת (WebSocket, עדכוני רקע כל 30-60 שניות). כפתור SOS שולח קואורדינטות לאנשי קשר מהימנים ויכול להזעיק חילוץ דרך tel://.
מה כלול
- תיעוד ארכיטקטורה ומפרטי API
- מאגר קוד עם CI/CD
- גישה ל-App Store Connect / Google Play Console
- הדרכת צוות (2-3 מפגשים)
- חודש תמיכה חינם לאחר ההשקה
תהליך הפיתוח ולוחות זמנים
תהליך: אנליטיקה (דרישות, ביקורת מתחרים, בחירת טכנולוגיות) → עיצוב (UX/UI, אב טיפוס, מסד נתונים) → יישום (ספרינטים של שבועיים, סקירת קוד, CI/CD) → בדיקות (יחידה, UI, בדיקת בטא) → פריסה (פרסום, ניטור).
לוחות זמנים: אפליקציה בסיסית (מפות לא מקוונות, מסלול GPS, נקודות עניין, קהילה) — 8-12 שבועות. גרסה מלאה עם AR, ניווט, מעקב קרבה — 4-6 חודשים. העלות מוערכת לאחר ניתוח דרישות. קבלו ייעוץ — נעריך את הפרויקט שלכם תוך 2-3 ימים. הזמינו פיתוח וקבלו אבות טיפוס ראשונים תוך 4 שבועות.
טעויות פיתוח נפוצות
- התעלמות מצריכת חשמל: דגימת GPS רציפה מרוקנת את הסוללה תוך 4-5 שעות. השתמשו ב-
significant-changeאוdistanceFilterכדי לחסוך עד 30% מטעינה. - טיפול לא נכון במצב לא מקוון: בהרים האינטרנט לא יציב — שמרו מצב ותורים.
- חוויית משתמש לא מקוונת ירודה: המשתמש צריך לראות אילו מפות הורדו וכמה מקום תפוס.
אנו נבחרים בזכות 5+ שנות ניסיון ו-50+ פרויקטי שטח. אנו מבטיחים עמידה בהנחיות App Store Review Guidelines ובדרישות Google Play. צרו קשר לבדיקה חינמית של הרעיון שלכם.







