Bonjour,
Je travaille actuellement pour un agence gouvernementale Française dont je ne citerai pas le nom et j'ai obtenu récemment une clé me permettant d'accéder à un grand nombre d'API IGN et notamment celle de l'API "Vecteur tuilé".
➡️URL racine de l'API en question : https://wxs.ign.fr/CLE/geoportail/tms/1.0.0/
Je souhaite m'en servir afin d'afficher des fonds de carte en utilisant la librairie JavaScript Leaflet : https://leafletjs.com/
Ce que je sais d'après la documentation (enfin crois savoir) :
- Les tuiles vectorielles renvoyées par IGN sont au format générique "Map Box Vector Tiles" sous Licence Créative Commons.
- Elles sont dans un format "protocol buffer" initié par Google (du json en plus light)
- Les tuiles retournées sont donc sous la forme https://wxs.ign.fr/CLE/geoportail/tm....IGN/z/x/y.pbf
- Pour "afficher" les cartes vectorielles, il faut 2 choses :
- Une extension Leaflet permettant de décoder et d’afficher le "pbf" de style Mapbox
- Un "Style" permettant l’affichage des cartes, qui est basé sur le nom des attributs dans le protobuffer
✅ Pour les styles au format Mapbox ils sont disponibles ici : https://geoservices.ign.fr/documenta...eur-tuile.html
❌ Pour la librairie Leaflet, c'est là où je coince. En effet, j'ai plusieurs pistes mais qui ne sont pas abouties :1️⃣ Une extension de Leaflet existe pour afficher des "Vector Grid" avec des tuiles au format pbf : https://github.com/Leaflet/Leaflet.VectorGrid
Voici un extrait du code que j'ai adapté pour pouvoir afficher le fond de carte IGN :
Cependant, le style json renvoyé par IGN au format Mapbox ne convient pas à Leaflet qui attend un format OpenMapTiles : https://openmaptiles.org/docs/website/leaflet/
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 const plan = await fetch(`https://wxs.ign.fr/${ignKey}/static/vectorTiles/styles/PLAN.IGN/standard.json`); const planJson = await plan.json(); const ignUrl = "https://wxs.ign.fr/{key}/geoportail/tms/1.0.0/PLAN.IGN/{z}/{x}/{y}.pbf"; const ignVectorTileOptions = { rendererFactory: L.canvas.tile, attribution: 'Map data © <a href="https://www.ign.fr/">IGN</a> contributors, ©' + ' <a href="https://www.mapbox.com/about/maps/">MapBox</a>', vectorTileLayerStyles: planJson, key: ignKey }; const pePbfLayer = L.vectorGrid.protobuf(ignUrl, ignVectorTileOptions); export default pePbfLayer;
Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 { water:{// Apply these options to the "water" layer... fill: true, weight: 1, fillColor: '#06cccc', color: '#06cccc', fillOpacity: 0.2, opacity: 0.4, }, transportation: { // Apply these options to the "transportation" layer... weight: 0.5, color: '#f2b648', fillOpacity: 0.2, opacity: 0.4, }, // And so on, until every layer in https://openmaptiles.org/schema/ has a style // aeroway: // boundary: // building: // housenumber: // landcover: // landuse: // park: // place: // poi: // transportation: // transportation_name: // water: // water_name: // waterway: };2️⃣ Il y une extension de Leaflet créé par Mapbox que je pourrais utiliser : https://github.com/mapbox/mapbox-gl-leaflet
Ici, j'ai aussi une début d'affichage avec des styles appliqués mais j'ai des erreurs 404 sur les sprites
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 const ignMapboxLayer = L.mapboxGL({ accessToken: 'pk.token', style: 'https://wxs.ign.fr/CLE/static/vectorTiles/styles/PLAN.IGN/standard.json' }); export default ignMapboxLayer;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 GET https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/sprite/PlanIgn@2x.png 404 (Not Found) e {status: 404, url: "https://wxs.ign.fr/static/vectorTiles/styles/PLAN.IGN/sprite/PlanIgn@2x.png", name: "e", message: "Not Found"}
❓ Dernier point, j'ai une question concernant les metadata : https://wxs.ign.fr/choisirgeoportail.../metadata.json
Comment et à quel moment je peux les utiliser pour augmenter l'expérience utilisateur dans l'affichage des cartes sur Leaflet ?
Si l'état actuel de Leaflet ne permet d'afficher les cartes, je me propose de l'implémenter en open-source sur mon compte Github: https://github.com/gaetanBloch
Je vous remercie du temps que vous avez pris pour lire ce message.
Très cordialement,
Gaëtan Bloch
Partager