Accueil / Blog / Métier / 2014 / Construire un MBTiles le long d'un itinéraire

Construire un MBTiles le long d'un itinéraire

Par Mathieu Leplatre publié 10/04/2014, édité le 12/11/2015
Avec Landez, la zone couverte d'un fichier MBTiles peut suivre une ligne!
Construire un MBTiles le long d'un itinéraire

Lorsque l'on crée un fichier MBTiles, avec Tilemill par exemple, la zone couverte est rectangulaire (bounding box).

Dans cet article, nous allons utiliser Landez pour construire un MBTiles dont la zone couverte suit un itinéraire de randonnée.

Initialement, Landez a été développé pour construire des fonds de carte à la demande, avec pour objectif de permettre à des touristes d'avoir un carnet de voyage disponible hors connexion. Il s'agissait donc de couvrir la zone autour de chaque escale.

Pour un itinéraire, nous pouvons procéder de la même façon ! Pour chaque point de l'itinéraire, nous allons ajouter une zone de couverture large pour les niveaux de zoom faibles, et réduite pour les niveaux de zoom élevés.

from landez import MBTilesBuilder

# Un rayon pour les zooms faibles, l'autre
# pour les zooms élevés.
RADIUS_LARGE = 0.01 # ~1 km
RADIUS_SMALL = 0.05  # ~500 m

# Niveaux de zooms pour le monde entier
GLOBAL_ZOOMS = range(8)
# Niveaux de zooms pour les rayons larges
LOW_ZOOMS = range(8, 13)
# Niveaux de zooms pour les rayons réduits
HIGH_ZOOMS = range(13, 17)

mbtiles = MBTilesBuilder()

# On couvre le monde entier aux zooms faibles
mbtiles.add_coverage(bbox=(-180, -90, 180, 90),
                     zoomlevels=GLOBAL_ZOOMS)

# Itère sur les coordonnées qui consistuent
# l'itinéraire
coords = Trek.geometry.coords

for (lng, lat) in coords:
    # Construit les emprises à partir des rayons
    large = (lng - RADIUS_LARGE, lat - RADIUS_LARGE,
             lng + RADIUS_LARGE, lat + RADIUS_LARGE)
    small = (lng - RADIUS_SMALL, lat - RADIUS_SMALL,
             lng + RADIUS_SMALL, lat + RADIUS_SMALL)

    # Ajoute ces emprises au MBTiles à construire
    mbtiles.add_coverage(bbox=large, zoomlevels=LOW_ZOOMS)
    mbtiles.add_coverage(bbox=small, zoomlevels=HIGH_ZOOMS)

# Télécharger et packager !
mbtiles.run()

Aussi simple que ça !

Nous allons mettre ce fonctionnement en place pour le développement de l'application mobile de Geotrek, qui permettra de consulter les itinéraires et les fonds en mode déconnecté.

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Geotrek, une expérience exemplaire de projet innovant partagé par les structures publiques Geotrek, une expérience exemplaire de projet innovant partagé par les structures publiques 14/12/2020

L'APIE, la mission Appui au patrimoine immatériel de l'État sur le site du Ministère de ...

Eco-conception Geotrek 26/06/2019

Makina Corpus a bénéficié d'un accompagnement à l'éco-conception pour l'application Geotrek. ...

Optimisation de la production de tuiles vectorielles de fond de carte OpenStreetMap pour un service à la demande : Makina Maps Optimisation de la production de tuiles vectorielles de fond de carte OpenStreetMap pour un service à la demande : Makina Maps 04/02/2020

Frédéric Rodrigo, expert OpenStreetMap, présente Makina Maps, une solution permettant de servir ...

Extraction d'objets pour la cartographie par deep-learning : création d'une vérité terrain Extraction d'objets pour la cartographie par deep-learning : création d'une vérité terrain 20/05/2020

Cette série d'articles parle de cartographie par deep-learning à partir d'images aériennes ou ...

Extraction d'objets pour la cartographie par deep-learning : choix du modèle Extraction d'objets pour la cartographie par deep-learning : choix du modèle 04/06/2020

Deuxième article de la série sur la cartographie par deep-learning à partir d'images aériennes ...