ITSkillsCenter
Développement Web

Tutoriel : Créer des cartes interactives avec Leaflet.js

3 min de lecture

Leaflet.js : la bibliothèque de cartes la plus légère et simple

Leaflet.js est une bibliothèque JavaScript open source de 42 Ko pour créer des cartes interactives. Contrairement à Google Maps (payant au-delà de 28 500 chargements/mois), Leaflet utilise les tuiles gratuites d’OpenStreetMap. Parfait pour afficher la localisation de votre entreprise, vos zones de livraison, ou des données géographiques.

Installation et première carte

<!-- Ajouter dans le <head> -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>

<!-- Le conteneur de la carte -->
<div id="map" style="height: 400px; border-radius: 12px;"></div>
// Créer la carte centrée sur Dakar
const map = L.map('map').setView([14.6928, -17.4467], 13);

// Ajouter les tuiles OpenStreetMap (gratuit)
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  attribution: '© OpenStreetMap contributors'
}).addTo(map);

// Ajouter un marqueur
L.marker([14.6928, -17.4467])
  .addTo(map)
  .bindPopup('<b>ITSkillsCenter</b><br>Dakar, Sénégal')
  .openPopup();

En 10 lignes, vous avez une carte interactive de Dakar avec un marqueur cliquable.

Personnaliser les marqueurs

// Icône personnalisée
const customIcon = L.icon({
  iconUrl: 'marker-icon.png',
  iconSize: [32, 42],
  iconAnchor: [16, 42],  // Point d'ancrage (bas du marqueur)
  popupAnchor: [0, -42]  // Position du popup par rapport au marqueur
});

L.marker([14.6928, -17.4467], { icon: customIcon }).addTo(map);

// Marqueur avec cercle coloré (sans image)
L.circleMarker([14.7167, -17.4677], {
  radius: 10,
  fillColor: '#e94560',
  color: '#fff',
  weight: 2,
  fillOpacity: 0.8
}).addTo(map).bindPopup('Zone de livraison');

Afficher plusieurs points (magasins, agences, etc.)

const lieux = [
  { nom: 'ITSkillsCenter Dakar', lat: 14.6928, lng: -17.4467, type: 'bureau' },
  { nom: 'Agence Thiès', lat: 14.7886, lng: -16.9260, type: 'agence' },
  { nom: 'Point Relais Mbour', lat: 14.4167, lng: -16.9667, type: 'relais' },
  { nom: 'Bureau Saint-Louis', lat: 16.0326, lng: -16.4897, type: 'bureau' }
];

lieux.forEach(lieu => {
  const colors = { bureau: '#4a90d9', agence: '#27ae60', relais: '#f39c12' };
  
  L.circleMarker([lieu.lat, lieu.lng], {
    radius: 8,
    fillColor: colors[lieu.type],
    color: '#fff',
    weight: 2,
    fillOpacity: 0.9
  })
  .addTo(map)
  .bindPopup('<strong>' + lieu.nom + '</strong><br>Type : ' + lieu.type);
});

// Zoomer pour voir tous les marqueurs
const bounds = L.latLngBounds(lieux.map(l => [l.lat, l.lng]));
map.fitBounds(bounds, { padding: [30, 30] });

Dessiner des zones (polygones)

// Zone de livraison autour de Dakar
const zoneLivraison = L.polygon([
  [14.78, -17.52],
  [14.78, -17.38],
  [14.62, -17.38],
  [14.62, -17.52]
], {
  color: '#4a90d9',
  fillColor: '#4a90d9',
  fillOpacity: 0.15,
  weight: 2
}).addTo(map);

zoneLivraison.bindPopup('Zone de livraison gratuite');

Géolocalisation : « Où suis-je ? »

document.getElementById('locateBtn').addEventListener('click', () => {
  map.locate({ setView: true, maxZoom: 16 });
});

map.on('locationfound', (e) => {
  L.marker(e.latlng)
    .addTo(map)
    .bindPopup('Vous êtes ici !')
    .openPopup();
  
  L.circle(e.latlng, { radius: e.accuracy / 2 }).addTo(map);
});

map.on('locationerror', () => {
  alert('Impossible de vous localiser. Vérifiez les permissions de géolocalisation.');
});

Événements : réagir aux clics sur la carte

// Afficher les coordonnées au clic
map.on('click', (e) => {
  const { lat, lng } = e.latlng;
  L.popup()
    .setLatLng(e.latlng)
    .setContent('Coordonnées : ' + lat.toFixed(4) + ', ' + lng.toFixed(4))
    .openOn(map);
});

Exercice

  1. Créez une carte du Sénégal avec les 14 capitales régionales comme marqueurs
  2. Ajoutez un popup avec le nom et la population de chaque ville
  3. Dessinez une zone polygone autour de votre quartier
  4. Ajoutez un bouton de géolocalisation
  5. Bonus : chargez les marqueurs depuis un fichier JSON avec fetch()
#cartes #javascript #leaflet
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 350.000 FCFA
Parlons de Votre Projet
Publicité

Articles Similaires