Opérations

Mode hors-ligne

Navigation complète sans réseau. Les données carte + routing sont téléchargeables par commune (~60-100 MB). Critique pour les zones à couverture réseau instable en Afrique de l'Ouest.

Pourquoi le mode hors-ligne

Couverture réseau

Beaucoup de zones en CI ont une couverture 4G/3G intermittente. Un chauffeur VTC ne peut pas perdre sa navigation dans un tunnel ou une zone morte.

Coût data

Les tuiles carte consomment des données mobiles à chaque session. Le téléchargement offline une seule fois réduit la consommation de 95%.

Fiabilité

Les coupures de courant impactent les tours cellulaires. L'app doit fonctionner même si le réseau tombe pendant une course.

Ce qui est téléchargé

ComposantFormatTailleRôle
Tuiles carteMBTiles (SQLite)30-50 MB par communeAffichage de la carte (rues, bâtiments, POI)
Tuiles routingValhalla tiles20-40 MB par communeCalcul d'itinéraire local
Style carteJSON + sprites + fonts~5 MBRendu visuel de la carte
Clips audio TTSMP3~200 KB par itinéraireInstructions vocales pré-synthétisées

Total par commune : 60-100 MB. Abidjan (9 communes) ≈ 600 MB.

Télécharger les données offline

TypeScriptSDK — Téléchargement offline
// Télécharger les tuiles pour Cocodyawait client.offline.downloadRegion({ name: 'cocody', bounds: { north: 5.38, south: 5.32, east: -3.96, west: -4.02, }, minZoom: 10, maxZoom: 16, includeRouting: true, includeStyle: true, onProgress: (pct) => { progressBar.value = pct // 0.0 → 1.0 }, }) // Vérifier les régions téléchargéesconst regions = await client.offline.listRegions() // [{ name: "cocody", size_mb: 72, updated: "2026-04-15" }]

Navigation hors-ligne

Quand le réseau est absent, le SDK bascule automatiquement sur les données locales :

  GPS fix                 SDK Navigation                 Données
     │                          │                          │
     │  position update         │                          │
     │ ─────────────────►       │                          │
     │                          │  réseau dispo ?          │
     │                          │  ── NON ──────►          │
     │                          │                          │
     │                          │  routing local           │
     │                          │  (Valhalla tiles)  ◄─── tuiles locales
     │                          │                          │
     │                          │  carte locale            │
     │                          │  (MBTiles) ◄─────────── tuiles locales
     │                          │                          │
     │                          │  voix locale             │
     │                          │  (clips pré-cachés) ◄── MP3 locaux
     │                          │                          │
     │  ◄── navigation OK       │                          │
     │                          │                          │
Pré-cache TTS : quand le réseau est disponible au démarrage de la navigation, le SDK appelle l'endpoint batch TTS pour pré-synthétiser tous les clips audio de l'itinéraire. Ces clips sont stockés localement et servent même si le réseau tombe pendant le trajet.

Format MBTiles

Les tuiles offline sont packagées en MBTiles — un format SQLite standardisé qui contient toutes les tuiles vectorielles pour une région donnée.

Structure MBTiles

TerminalContenu du fichier SQLite
# Table metadata : infos sur la région name = "cocody" format = "pbf" bounds = "-4.02,5.32,-3.96,5.38" minzoom = 10 maxzoom = 16 # Table tiles : les tuiles vectorielles# zoom_level | tile_column | tile_row | tile_data (pbf compressé)

MapLibre GL Native (Android/iOS) supporte nativement MBTiles comme source de tuiles. Le SDK AfriMap configure automatiquement la source quand des tuiles offline sont disponibles.

Stockage sur appareil

Android

  • Stockage : fichiers app internes
  • Format : MBTiles + Valhalla tiles + MP3
  • Gestion : OfflineManager du SDK
  • Nettoyage automatique des régions inutilisées (> 30j)

iOS

  • Stockage : Documents + Application Support
  • Format : identique Android
  • Gestion : OfflineManager du SDK
  • Marqué isExcludedFromBackup pour iCloud

Mise à jour des données

Les données OSM évoluent. Planifiez des mises à jour mensuelles :

TypeScriptVérifier et mettre à jour
// Vérifier si une mise à jour est disponibleconst regions = await client.offline.listRegions() for (const region of regions) { const update = await client.offline.checkUpdate(region.name) if (update.available) { await client.offline.downloadRegion({ name: region.name, // ...mêmes paramètres — écrase l'ancienne version }) } }