Accueil / Blog / Métier / 2014 / Stocker un MBTiles volumineux sur une carte SD

Stocker un MBTiles volumineux sur une carte SD

Par Mathieu Leplatre publié 14/01/2014, édité le 27/01/2016
Stocker un MBTiles volumineux sur une carte SD

MBTiles, par MapBox

Dans le cadre du développement d'une application mobile pour le recensement des espèces au sein du Parc National des Écrins, nous avions pour objectif de stocker les fonds de carte SCAN et ORTHO pour un usage en mode déconnecté.

Nous avons choisi de stocker les fonds tuilés au format MBTiles, et de les stocker sur le support amovible du téléphone (Carte SD).

Les niveaux de zooms attendus et la zone du parc à couvrir représentaient environ 22 Go. Or, le système de fichiers par défaut des cartes SD limite la taille des fichiers à 4 Go.

Nous ne pouvions pas changer le système de fichiers (ex: exFat), car ce n'était pas supporté sans rooter les terminaux. Nous avons donc opté pour un découpage des fichiers MBTiles.

Découper un fichier MBTiles

On découpe un gros fichier MBTiles en plusieurs petits. Le client cartographique du téléphone devra être modifié pour lire le fond de carte depuis plusieurs petits fichiers au lieu d'un seul volumineux.

Le découper par zone, comme par secteur ou vallée, pourrait s'avérer relativement complexe, aussi bien pour la préparation que pour la lecture. Quel fichier dois-je lire quand je visualise une étendue qui est à cheval sur deux zones ? De même pour un découpage rectangulaire (nord, sud, est, ouest...).

Nous avons donc choisi de découper le fichier en colonnes. 

Non, pas un fichier par colonne, sinon on en aurait des centaines ! La position (x, y) de chaque tuile (celle qu'on voit dans l'url lorsque celle-ci sont téléchargées) détermine le fichier MBTiles qui va la stocker à partir d'une règle toute simple : on prend le premier chiffre de la valeur du y.

Cette méthode idiote découpera le MBTiles en dix fichiers, de 0 à 9, correspondant à des colonnes abstraites. On aurait pu découper en colonnes par bande juxtaposées, mais cela nous aurait obligé à calculer beaucoup de choses, en fonction des y minimum et maximum.

De cette façon, c'est très simple à fabriquer et, côté client, celui qui consomme les tuiles, on sait immédiat dans quel fichier les tuiles doivent être lues :

  • z/12/8.png → fichier 1
  • z/7/5.png → fichier 7

Comme on découpe en 10 fichiers qui peuvent peser chacun 4 Go maximum, cela nous donne la possibilité de stocker jusqu'à 40 Go de fond carto sur une carte SD !

Le script qui découpe une pyramide en tuiles en 10 fichiers MBTiles distincts est en ligne. Le code client dépend de la bibliothèque mobile que vous utiliserez (Cordova, RouteMe, OSMdroid, Mapbox, ...), n'hésitez pas à nous poser des questions !

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
À Makina, la JS fatigue n'existe pas... 01/04/2019

...car la passion l'emporte

Ionic 2 : les nouveautés (retours de l'AngularConnect) Ionic 2 : les nouveautés (retours de l'AngularConnect) 23/10/2015

Des changements radicaux et bienvenus par rapport à la version 1 d'Ionic.

Bien comprendre les Progressive Web Apps Bien comprendre les Progressive Web Apps 20/06/2016

On va beaucoup en parler, voilà de quoi suivre les discussions.

Construire une application hybride mobile et desktop avec Cordova et Electron Construire une application hybride mobile et desktop avec Cordova et Electron 23/06/2016

Comment concevoir une application déployable sur n'importe quel support ?

LeafletJS et les popovers / modales d'Ionic LeafletJS et les popovers / modales d'Ionic 26/06/2015

Une solution rapide et efficace au problème de compatibilité entre les cartes #leafletjs et les ...