Par Titouan B., stagiaire de troisième. Novembre 2017
- Vous devez créer une page web en y intégrant une carte dynamique en utilisant la librairie javascript Leaflet.
- Vous utiliserez un fond de carte (basemap) OpenStreetMap, et vous y superposerez des données provenant de Rando Ecrins.
- Il sera possible de cliquer sur une donnée pour en afficher les informations.
Leaflet, librairie javascript cartographique
Documentation officielle de Leaflet
Documentation pour afficher un Geojson/Json dans la carte
Limite du territoire du Parc national des Ecrins
POIs (Points d'intérêt patrimoniaux)
Basemap OSM : http://{s}.tile.osm.org/{z}/{x}/{y}.png
Basemap Open Topo Map (OSM avec relief) : http://a.tile.opentopomap.org/{z}/{x}/{y}.png
Initialisation / Créer une page HTML classique et y charger Leaflet dans la balise <head> :
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.2.0/leaflet.js"> </script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.2.0/leaflet.css">
Ajouter la librairie javascript jQuery pour pouvoir utiliser sa fonction getjson (dans la balise <head>) :
<script> src="https://code.jquery.com/jquery-3.2.1.js" integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE=" crossorigin="anonymous"> </script>
Intégrer la carte dans la page web à l'intérieur de la balise <body> :
<div id="map" style="height: 95vh;"></div>
Reste alors à ajouter le code javascript pour déclarer et configurer la carte et y ajouter les données.
Cette partie doit être intégrée dans une balise <script>.
1ère partie Javascript / Déclarer et configurer la carte :
// CONFIGURATION DE LA CARTE //
// Déclarer la carte, son zoom et son centrage
var map = L.map('map').setView([44.75, 6.45], 10);
// Charger un fond de carte OSM dans la carte
L.tileLayer('http://a.tile.opentopomap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors | Design : © <a href="http://opentopomap.org/">OpenTopoMap</a> (CC-BY-SA)'
}).addTo(map);
2ème partie Javascript / Ajouter le contour du territoire :
// Charger les limites du territoire à partir d'un fichier
$.getJSON('data/2017-11-territoire-pne.json', function(geojson) {
var territory = L.geoJSON(geojson);
territory.addTo(map);
});
3ème partie Javascript / Ajouter les POIs et leurs noms et description :
// Fonction pour boucler sur les objets du fichier de données des POIs pour gérer leur styler
// et afficher leurs attributs dans une tooltip
function featurePoi(feature, layer) {
layer.bindPopup("<b>"+feature.properties.name+"</b>"+"<br>"+feature.properties.description);
};
// Charger les POIs à partir de l'API de Rando Ecrins
$.getJSON('http://rando1.ecrins-parcnational.com/fr/files/api/trek/939205/pois.geojson', function(geojson){
var pois = L.geoJSON(geojson, {
onEachFeature: featurePoi
});
pois.addTo(map);
});
4ème partie Javascript / Ajouter les randonnées et leurs noms :
// Fonction pour boucler sur les objets du fichier de données des randos pour gérer leur styler
// et afficher leurs attributs dans une tooltip
function featureTrek(feature, layer) {
layer.bindPopup("<b>"+feature.properties.name+"</b>"+"<br>"+"<br>"+feature.properties.duration_pretty+"<br>"+feature.properties.difficulty.label+"<br>"+feature.properties.departure+"<br>"+feature.properties.arrival+"<br>"+"<br>"+feature.properties.description);
};
// Charger les randos à partir de l'API de Rando Ecrins
$.getJSON('http://rando1.ecrins-parcnational.com/fr/files/api/trek/trek.geojson', function(geojson){
var trek = L.geoJSON(geojson, {
onEachFeature: featureTrek,
color: 'red'
});
trek.addTo(map);
});