Visualisation et sauvegarde de la BDortho du littoral

litto2mbtiles — Documentation
Documentation · PWA

litto2mbtiles

Application web progressive d'extraction de tuiles orthophoto le long d'un tronçon littoral quelconque, avec export au format MBTiles.

⚓ Côtes mondiales 🛰 BD ORTHO IGN · OSM 📦 Export MBTiles 📴 Hors-ligne
01

Présentation

litto2mbtiles est une PWA (Progressive Web App) qui permet d'extraire et de télécharger les tuiles d'orthophotographie aérienne couvrant la bande littorale entre deux points quelconques, puis de les conditionner dans un fichier .mbtiles utilisable hors-ligne dans d'autres applications cartographiques.

Elle ne nécessite aucune installation, aucun serveur back-end, et fonctionne entièrement dans le navigateur. Le trait de côte est récupéré dynamiquement depuis OpenStreetMap via l'API Overpass.

🌍
Toute côte mondiale
Fonctionne partout où OSM cartographie un trait de côte.
🔍
Géocodage intégré
Saisie du nom d'une ville ou d'un port — Nominatim résout les coordonnées.
🗂
Format MBTiles
Fichier SQLite standard, compatible QGIS, TileServer GL, OsmAnd…
👁
Visualiseur intégré
Navigation le long du trait de côte directement dans l'application.
⚙️
Paramètres flexibles
Buffer 100–2000 m, zooms 13 à 19, source IGN ou OSM.
📴
PWA installable
Installable sur mobile et desktop, cache applicatif hors-ligne.
02

Flux de travail

1
Extrémités
Nom ou coordonnées
2
Trait de côte
Overpass OSM
3
Paramètres
Buffer · Zooms
4
Téléchargement
Tuiles IGN / OSM
5
Export
.mbtiles

Chaque étape s'effectue dans l'onglet Extraire. La carte de prévisualisation (fond IGN Plan) affiche en temps réel le trait de côte (orange) et la bande buffer (teal), avec les marqueurs de départ (vert) et d'arrivée (rouge).

03

① Définir les extrémités

Deux modes de saisie sont disponibles, sélectionnables via le bouton bascule en haut de la barre latérale.

Par nom de lieu

Saisissez le nom d'une ville, d'un port ou d'un cap dans chacun des deux champs, puis appuyez sur Entrée ou cliquez sur la flèche . Le service Nominatim (OpenStreetMap) résout le nom en coordonnées géographiques, affichées sous le champ.

💡
Nominatim est limité à 1 requête par seconde. Pour des noms ambigus, ajoutez le pays : « Dieppe, France » plutôt que « Dieppe » seul.

Par coordonnées décimales

Basculez en mode Par coordonnées et saisissez la longitude et la latitude en degrés décimaux (WGS84). Exemple pour le Cap de la Hève : longitude 0.0712, latitude 49.5147.

⚠️
Les longitudes à l'ouest de Greenwich sont négatives. En France métropolitaine, toutes les longitudes sont positives sauf la pointe du Cotentin et la Bretagne occidentale.
04

② Charger le trait de côte

Une fois les deux extrémités définies, le bouton Charger le trait de côte (OSM) devient actif. Un clic déclenche trois opérations automatiques :

  1. Requête Overpass
    L'API Overpass est interrogée sur la bounding box des deux points (élargie de 15 % de chaque côté). La balise OSM natural=coastline est utilisée — elle couvre l'ensemble du trait de côte mondial cartographié dans OSM.
  2. Assemblage et chaînage
    Les segments retournés (souvent plusieurs dizaines) sont chaînés par un algorithme glouton qui raccorde les extrémités les plus proches (tolérance 5 m). Le segment le plus long est retenu.
  3. Simplification et clip
    L'algorithme Douglas-Peucker simplifie la polyligne à une précision de 80 m, puis le résultat est clippé aux deux points les plus proches des extrémités saisies. La longueur finale du tronçon est affichée dans les statistiques.

Le trait de côte apparaît en orange sur la carte de prévisualisation. Si le résultat semble incorrect (gap dans le trait, segment manquant), cela indique une lacune dans la cartographie OSM de la zone.

05

③ Configurer les paramètres

Paramètre Valeur par défaut Description
Source ortho IGN IGN : BD ORTHO 20 cm via la Géoplateforme IGN (data.geopf.fr), France uniquement, accès libre.
OSM : tuiles OpenStreetMap (tile.openstreetmap.org), couverture mondiale, résolution moindre.
Buffer latéral 200 m Largeur de la bande de part et d'autre du trait de côte. Choix : 100 m, 200 m, 500 m, ou valeur libre (50–2000 m). Un buffer plus large augmente fortement le nombre de tuiles aux zooms élevés.
Zoom minimum 15 Niveau de zoom le moins détaillé à inclure. Le zoom 15 correspond à environ 5 m/pixel. Descendre à 13–14 ajoute peu de tuiles (chacun représente une surface 4× plus grande).
Zoom maximum 17 Niveau de détail maximal. Chaque niveau supplémentaire quadruple le nombre de tuiles. Le zoom 17 (~1,2 m/pixel) est un bon compromis. Le zoom 19 (~0,3 m/pixel) convient aux relevés fins mais génère des fichiers très volumineux.

Cliquez ensuite sur Calculer les tuiles pour afficher les statistiques par niveau de zoom, le nombre total et la taille estimée du fichier final.

📐
Estimation indicative : ~25 Ko par tuile JPEG (BD ORTHO IGN). Pour 5 000 tuiles → environ 125 Mo. Vérifiez la taille estimée avant de lancer le téléchargement.
06

④ Télécharger les tuiles

Le bouton Télécharger les tuiles lance le téléchargement en parallèle (3 connexions simultanées). Une sonde préalable vérifie la disponibilité du serveur IGN et détecte d'éventuels blocages CORS.

Indicateurs de progression

La barre de progression et le journal affichent en temps réel : le nombre de tuiles reçues, les tuiles absentes (404 — zones non couvertes, normal), et les erreurs réseau.

Gestion des erreurs réseau

Chaque tuile en erreur est retentée jusqu'à 5 fois avec un délai exponentiel (1,2 s, 2,4 s, 4,8 s…). Les codes 429 (rate-limit) et 503 déclenchent automatiquement ce mécanisme d'attente.

Interruption

Le bouton Interrompre arrête proprement le téléchargement. Les tuiles déjà reçues restent en mémoire et peuvent être exportées.

⚠️
Les tuiles sont conservées uniquement en mémoire vive pendant la session. Fermez l'onglet ou rechargez la page et tout est perdu — exportez le fichier MBTiles avant de quitter.
07

⑤ Exporter en MBTiles

Le bouton Exporter en MBTiles génère un fichier SQLite conforme à la spécification MBTiles 1.3. La génération s'effectue entièrement dans le navigateur via sql.js (SQLite compilé en WebAssembly).

Nommage automatique

Le fichier est nommé automatiquement d'après les deux extrémités et les niveaux de zoom, par exemple :

litto2mbtiles_Le_Havre_Etretat_z15-17.mbtiles

Structure du fichier MBTiles

-- Table métadonnées
SELECT * FROM metadata;
-- name, description, format, bounds, center, minzoom, maxzoom

-- Table tuiles (convention TMS — Y inversé)
SELECT zoom_level, tile_column, tile_row, tile_data
FROM tiles
WHERE zoom_level = 16
LIMIT 5;
🔄
L'axe Y est inversé lors de l'écriture MBTiles (convention TMS : y_tms = 2^z − 1 − y_xyz). Les tuiles sont téléchargées et stockées en mémoire en convention XYZ standard, l'inversion n'intervient qu'à l'export.
08

Visualiseur intégré

L'onglet Visualiser (ou le bouton Ouvrir dans le visualiseur) affiche les tuiles téléchargées sur une carte interactive MapLibre GL. Les tuiles sont servies depuis la mémoire vive via un protocole personnalisé (litto2://) sans aucune requête réseau supplémentaire.

Navigation le long du trait de côte

La barre du bas propose quatre boutons de navigation et un curseur continu :

ContrôleAction
⏮ DébutSauter au point de départ
◀ PrécédentWaypoint précédent (−1 km)
▶ SuivantWaypoint suivant (+1 km)
⏭ FinSauter au point d'arrivée
CurseurPosition libre le long du tronçon

La carte se centre automatiquement sur chaque waypoint au zoom zMax − 1 avec une transition animée.

09

Utiliser le fichier MBTiles

Le fichier .mbtiles généré est un SQLite standard compatible avec de nombreux outils :

  • QGIS Couche → Ajouter → Raster → sélectionner le .mbtiles ✓ natif
  • TileServer GL tileserver-gl fichier.mbtiles — serveur local HTTP ✓ natif
  • MapLibre GL JS Via plugin maplibre-gl-mbtiles ou TileServer GL plugin
  • Leaflet Plugin leaflet-mbtiles plugin
  • OsmAnd Import direct en tant que carte hors-ligne ✓ natif
  • MB-Util Convertit en dossier {z}/{x}/{y}.jpg ✓ natif
  • GeoServer Module GWC — publication en flux WMTS module
10

Déploiement

L'application est déployée sur GitHub Pages à l'adresse :

https://BernardHoyez.github.io/PWA/litto2mbtiles/

La structure de fichiers attendue dans le dépôt est :

PWA/
└── litto2mbtiles/
    ├── index.html
    ├── app.js
    ├── style.css
    ├── sw.js           # Service Worker (cache app shell)
    ├── manifest.json   # Manifeste PWA
    └── icons/
        ├── icon192.png
        └── icon512.png

Installation comme PWA

Sur mobile (Android/iOS) et desktop (Chrome/Edge), le navigateur propose d'installer l'application via le menu ou une bannière. Une fois installée, elle se comporte comme une application native avec accès hors-ligne au cache applicatif.

🔒
Le Service Worker et les fonctions PWA nécessitent HTTPS — GitHub Pages le fournit nativement. En local, utilisez localhost ou un proxy HTTPS.
11

Limites & conseils pratiques

Mémoire navigateur

Les tuiles sont stockées en RAM. Pour de grandes zones (zoom 17–18 sur plusieurs dizaines de km), la consommation mémoire peut dépasser 500 Mo. Préférez un navigateur desktop et fermez les autres onglets.

Qualité du trait de côte OSM

La précision du résultat dépend de la cartographie OSM locale. En France métropolitaine la couverture est excellente. Dans d'autres régions, des lacunes peuvent apparaître (trait discontinu, segments en mer).

Couverture BD ORTHO IGN

La BD ORTHO IGN couvre uniquement la France métropolitaine et les DOM. Pour les côtes étrangères, utilisez la source OSM dans les paramètres. La résolution 20 cm est disponible aux zooms 17–19 ; aux zooms inférieurs, la résolution effective est moindre.

Conditions d'utilisation

BD ORTHO IGN via Géoplateforme : licence ouverte Étalab 2.0, usage libre y compris commercial. Tuiles OSM : licence ODbL — attribution OpenStreetMap requise.

Taille estimée des fichiers

TronçonBufferZoomsTuiles est.Taille est.
30 km200 m15–17~7 000~175 Mo
30 km200 m15–16~1 800~45 Mo
30 km500 m15–17~18 000~450 Mo
10 km200 m15–18~9 000~225 Mo

Commentaires

Posts les plus consultés de ce blog

La BD ALTI dans QGIS

App Inventor : Zone de texte, comment introduire du texte

Générer un fond MBtiles pour OruxMaps avec QGIS