Objectif à atteindre
- Intégrer une carte interactive Leaflet dans Angular à l’aide de la bibliothèque
ngx-leaflet.
Installation d’un nouveau projet
Étape 1 : Créer le projet Angular
- Créez un nouveau projet Angular nommé
mac_donald:
ng new mac_donald --style=scss --skip-tests=truePendant la création :
Quand la question apparaît :
Do you want to enable Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering)? (y/N)Tapez N et appuyez sur Entrée.
Cela permettra de travailler uniquement sur une application Angular côté client, parfaitement adaptée aux objectifs pédagogiques du TP
Déplacez vous dans votre nouveau projet
cd mac_donald
ng serveÉtape 2 : Installer Leaflet et ngx-leaflet
- Installer les dépendances nécessaires :
npm install leaflet @bluehalo/ngx-leaflet
npm i --save-dev @types/leafletInclure les styles CSS de Leaflet :
Dans le fichier angular.json, ajoutez le chemin vers les styles de Leaflet dans la section styles :
"styles": [
"src/styles.scss",
"node_modules/leaflet/dist/leaflet.css"
]Configuration des icônes de marqueurs
Leaflet utilise des images pour les marqueurs, qui doivent être accessibles par l’application. Dans le fichier angular.json, ajoutez le chemin vers les images de Leaflet dans la section assets :
"assets": [
{
"glob": "**/*",
"input": "public"
},
"src/assets",
{
"glob": "**/*",
"input": "node_modules/leaflet/dist/images/",
"output": "./assets/"
}
],Étape 2 : Créer un composant pour la carte
Générer un composant nommé map :
ng generate component mapConfigurer le composant MapComponent :
Modifier map.component.ts :
Importez les modules nécessaires pour configurer une carte avec ngx-leaflet :
import { Component } from '@angular/core';
import { LeafletModule } from '@bluehalo/ngx-leaflet';
import * as L from 'leaflet';
@Component({
selector: 'app-map',
standalone: true, // Si Angular standalone est utilisé
imports: [
LeafletModule // Import du module Leaflet
],
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss'],
})
export class MapComponent {
options = {
layers: [
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© OpenStreetMap contributors',
}),
],
zoom: 13,
center: L.latLng(48.8566, 2.3522), // Paris
};
}Explications :
tileLayer: Charge les tuiles de carte OpenStreetMap.latLng: Définit les coordonnées centrales de la carte.
Modifier map.component.html :
Utilisez la directive [leaflet] pour afficher la carte :
<div style="height: 400px;" leaflet [leafletOptions]="options"></div>Modifier map.component.scss :
Ajoutez un style pour la carte :
div[leaflet] {
width: 100%;
height: 100%;
border: 1px solid #ccc;
}Étape 3 : Ajouter le composant au projet
- Importer le module
LeafletModuledans le projet :
Ouvrezsrc/app/app.module.tset ajoutez :
import { Component } from '@angular/core';
import {MapComponent} from './map/map.component';
@Component({
selector: 'app-root',
imports: [
MapComponent
],
templateUrl: './app.component.html',
styleUrl: './app.component.scss'
})
export class AppComponent {
title = 'mac_donald';
}Afficher le composant MapComponent :
Ouvrez src/app/app.component.html et ajoutez :
<app-map></app-map>Étape 4 : Ajouter des marqueurs sur la carte
Nous allons enrichir la carte créée précédemment en ajoutant des marqueurs dynamiques et des popups personnalisées.
Modifier map.component.ts pour inclure une liste de marqueurs
Ajoutez une propriété pour gérer les marqueurs dans le composant et affichez-les sur la carte :
import { Component, OnInit } from '@angular/core';
import { LeafletModule } from '@bluehalo/ngx-leaflet'; // Import du module Leaflet
import * as L from 'leaflet';
@Component({
selector: 'app-map',
standalone: true,
imports: [
LeafletModule // Import nécessaire pour activer les directives ngx-leaflet
],
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss'],
})
export class MapComponent implements OnInit {
options = {
layers: [
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© OpenStreetMap contributors',
}),
],
zoom: 13,
center: L.latLng(48.8566, 2.3522), // Paris
};
// Liste des marqueurs
markers: L.Marker[] = [];
// Ajouter des marqueurs initiaux
ngOnInit(): void {
this.addMarker(48.8566, 2.3522, 'Bienvenue à Paris !');
this.addMarker(48.8584, 2.2945, 'Tour Eiffel');
this.addMarker(48.8606, 2.3376, 'Musée du Louvre');
}
// Méthode pour ajouter un marqueur
addMarker(lat: number, lng: number, popupText: string): void {
const marker = L.marker([lat, lng], {
icon: L.icon({
iconSize: [25, 41],
iconAnchor: [13, 41],
iconUrl: 'assets/marker-icon.png',
shadowUrl: 'assets/marker-shadow.png',
}),
}).bindPopup(popupText);
this.markers.push(marker);
}
}
Modifier map.component.html pour afficher les marqueurs
Mettez à jour le fichier HTML pour inclure les marqueurs dans la carte :
<div style="height: 100%; display: flex; flex-direction: column;">
<div leaflet [leafletOptions]="options" [leafletLayers]="markers" style="height: 400px;"></div>
</div>Tester l’application
Redémarrez le serveur Angular si nécessaire :
ng serveAccédez à http://localhost:4200 pour voir la carte interactive avec un marqueur centré sur Paris.
Explications supplémentaires :
LeafletModule:- Fournit des directives Angular pour manipuler facilement les éléments Leaflet, comme les cartes et les couches.
- Options de personnalisation :
- Vous pouvez modifier les coordonnées dans
latLngpour centrer la carte sur d’autres lieux. - Ajoutez plusieurs marqueurs avec des icônes personnalisées pour enrichir l’expérience utilisateur.
- Vous pouvez modifier les coordonnées dans
Résultat attendu :
- Une carte interactive Leaflet s’affiche avec :
- Une vue centrée sur Paris.
Félicitations !
Vous avez intégré une carte Leaflet dans Angular avec la bibliothèque ngx-leaflet, simplifiant l’utilisation des cartes interactives. Vous pouvez maintenant ajouter plus de fonctionnalités comme des couches supplémentaires, des polygones, ou des interactions avancées ! 🎉
