[Mise à jour le 11/6/2025]
“Leaflet est la bibliothèque JavaScript open source leader pour les cartes interactives mobiles. Avec un poids d'environ 42 Ko , elle offre toutes les fonctionnalités de cartographie dont la plupart des développeurs ont besoin.
Leaflet a été conçu dans un souci de simplicité , de performance et de convivialité . Elle fonctionne efficacement sur les principales plateformes de bureau et mobiles, peut être étendue grâce à de nombreux plug-ins , dispose d'une API élégante, facile à utiliser et bien documentée, ainsi que d'un code source simple et lisible.” source Leaflet
Principe retenu
Matériels
Bibliothèques JavaScript
La création de la carte est guidée dans la suite de ce document. Le code sera placé dans les fichiers suivants : outilleaflet.html, geolocalisation.js et lireval0et1.php.
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script> <script src="scripts/jquery-x.x.x.min.js"></script><!-- Remplacer x.x.x par la version de la bibliothèque utilisée dans le projet --> <script type="text/javascript" src="scripts/geolocalisation.js"></script>
<style> #map { width: /*A compléter*/; height: /*A compléter*/; } </style>
$(document).ready(function () { // L'ensemble du code doit être placé ici });
let initLatitude = /* A compléter */; let initLongitude = /* A compléter */;
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: '© <a href="https://osm.org/copyright">OpenStreetMap</a> contributors' }).addTo(map);
// Exemple : mapbox propose des tuiles plus complètes (nécessite un jeton que l'on peut obtenir sur le site) /*L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', { attribution: 'Map data © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>', maxZoom: 19, id: 'mapbox/streets-v11', tileSize: 512, zoomOffset: -1, accessToken: '' }).addTo(map);*/
function chargerCoordonnees() { let latitude; let longitude; $.ajax({ url: 'scripts/lireval0et1.php', type: 'get', dataType: 'json', success: function (data) { $.each(data, function (entryIndex, entry) { // Pour les tests, on souhaite 0 < val0 < 1000 => 47.07970 < latitude < 47.01328 // Calculer la valeur de a et de b et les remplacer ci-dessous latitude = a * parseFloat(entry.val0) + b; // Pour les tests, on souhaite 0 < val1 < 1000 => 2.199468 < longitude < 2.409102 // Calculer la valeur de c et de d et les remplacer ci-dessous longitude = c * parseFloat(entry.val1) + d; // Afficher les valeurs numériques $('#latitude').html(/*A compléter*/); $('#longitude').html(/*(A compléter*/); // Afficher un marqueur sur la carte (objet map) map.flyTo([latitude, longitude], zoom, { animate: true, duration: 2 // en secondes }); marker = L.marker([latitude, longitude]).addTo(map); }) }, timeout: delaiError, error: function () { // pour aller plus loin } }); } loadCoordinates(); // premier appel de la fonction setInterval(function () { // appel de la fonction toutes les delaiMesure ms loadCoordinates() }, delaiMesure);
<?php // URL à modifier en fonction de l'@IP et du programme de la carte Arduino $service_url = "http://192.168.231.51/lire/vals0et1"; // URL à modifier $curl = curl_init($service_url); // Envoi cURL à la carte Arduino curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_exec($curl); curl_close($curl); ?>