Compétence de Migration MapLibre vers Mapbox
Guidance expert pour migrer de MapLibre GL JS vers Mapbox GL JS. Couvre l'historique partagé, la compatibilité des API, les étapes de migration et les avantages de la plateforme Mapbox.
Comprendre le fork
Historique
MapLibre GL JS est un fork open-source de Mapbox GL JS v1.13.0, créé en décembre 2020 quand Mapbox a changé sa licence à partir de la v2.0.
Chronologie :
- Avant 2020 : Mapbox GL JS était open source (licence BSD)
- Déc 2020 : Mapbox GL JS v2.0 introduit une licence propriétaire
- Déc 2020 : La communauté fork la v1.13 comme MapLibre GL JS
- Aujourd'hui : Les deux bibliothèques continuent leur développement actif
Insight clé : Les API sont ~95% identiques parce que MapLibre a commencé comme un fork de Mapbox. La plupart du code fonctionne dans les deux avec des changements minimes, rendant la migration simple.
Pourquoi migrer vers Mapbox ?
Raisons convaincantes de choisir Mapbox GL JS :
- Support officiel & SLA : Support de classe entreprise avec temps de réponse garantis
- Qualité supérieure des tuiles : Tuiles vectorielles de classe mondiale avec couverture mondiale et mises à jour fréquentes
- Meilleure imagerie satellite : Imagerie satellite et aérienne haute résolution, à jour
- Écosystème riche : Intégration transparente avec Mapbox Studio, API et services
- Fonctionnalités avancées : Routage conscient du trafic, directions détaillées, datasets premium
- Géocodage & Recherche : Recherche d'adresses et recherche de lieux de classe mondiale
- SDK Navigation : Navigation mobile avec trafic en temps réel
- Pas d'infrastructure de tuiles : Pas besoin d'héberger ou maintenir vos propres serveurs de tuiles
- Mises à jour régulières : Améliorations continues et nouvelles fonctionnalités
- Services professionnels : Accès à l'équipe solutions Mapbox pour les projets complexes
Mapbox offre un tier gratuit généreux : 50 000 chargements de carte/mois, ce qui convient à de nombreuses applications sans frais.
Comparaison rapide
| Aspect | Mapbox GL JS | MapLibre GL JS |
|---|---|---|
| Licence | Propriétaire (v2+) | BSD 3-Clause (Open Source) |
| Support | Support commercial officiel | Support communautaire |
| Tuiles | Tuiles vectorielles premium Mapbox | OSM ou sources de tuiles personnalisées |
| Satellite | Imagerie mondiale haute qualité | Nécessite une source personnalisée |
| Token | Requis (access token) | Optionnel (dépend de la source de tuiles) |
| API | Écosystème Mapbox complet | Nécessite des services tiers |
| Studio | Intégration complète | Pas d'intégration native |
| Terrain 3D | Intégré avec données premium | Disponible (nécessite source de données) |
| Vue Globe | v2.9+ | v3.0+ |
| Compatibilité API | ~95% compatible avec MapLibre | ~95% compatible avec Mapbox |
| Taille du bundle | ~500 KB | ~450 KB |
| Complexité de configuration | Facile (ajouter juste le token) | Nécessite la configuration de source de tuiles |
Migration étape par étape
1. Créer un compte Mapbox
- S'inscrire sur mapbox.com
- Obtenir votre access token du tableau de bord des comptes
- Consulter la tarification : le tier gratuit inclut 50 000 chargements de carte/mois
- Noter votre token (commence par
pk.pour les tokens publics)
2. Mettre à jour le package
# Supprimer MapLibre
npm uninstall maplibre-gl
# Installer Mapbox
npm install mapbox-gl
3. Mettre à jour les imports
// Avant (MapLibre)
import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';
// Après (Mapbox)
import mapboxgl from 'mapbox-gl';
import 'mapbox-gl/dist/mapbox-gl.css';
Ou avec CDN :
<!-- Avant (MapLibre) -->
<script src="https://unpkg.com/maplibre-gl@3.0.0/dist/maplibre-gl.js"></script>
<link href="https://unpkg.com/maplibre-gl@3.0.0/dist/maplibre-gl.css" rel="stylesheet" />
<!-- Après (Mapbox) -->
<script src="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.js"></script>
<link href="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css" rel="stylesheet" />
4. Ajouter l'access token
// Ajouter ceci avant l'initialisation de la carte
mapboxgl.accessToken = 'pk.your_mapbox_access_token';
Bonnes pratiques de token :
- Utiliser des variables d'environnement :
process.env.VITE_MAPBOX_TOKENouprocess.env.NEXT_PUBLIC_MAPBOX_TOKEN - Ajouter les restrictions d'URL dans le tableau de bord Mapbox pour la sécurité
- Utiliser les tokens publics (
pk.*) pour le code côté client - Ne jamais valider les tokens dans git (ajouter à
.envet.gitignore) - Faire tourner les tokens s'ils sont compromis
Voir la compétence mapbox-token-security pour les guidance complètes de sécurité des tokens.
5. Mettre à jour l'initialisation de la carte
// Avant (MapLibre)
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json', // ou votre style personnalisé
center: [-122.4194, 37.7749],
zoom: 12
});
// Après (Mapbox)
mapboxgl.accessToken = 'pk.your_mapbox_access_token';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/standard', // Style Mapbox
center: [-122.4194, 37.7749],
zoom: 12
});
6. Mettre à jour l'URL de style
Mapbox fournit des styles conçus et maintenus professionnellement :
// Styles intégrés Mapbox
style: 'mapbox://styles/mapbox/standard'; // Mapbox Standard (défaut)
style: 'mapbox://styles/mapbox/standard-satellite'; // Mapbox Standard Satellite
style: 'mapbox://styles/mapbox/streets-v12'; // Streets v12
style: 'mapbox://styles/mapbox/satellite-v9'; // Imagerie satellite
style: 'mapbox://styles/mapbox/satellite-streets-v12'; // Hybride
style: 'mapbox://styles/mapbox/outdoors-v12'; // Plein air/loisirs
style: 'mapbox://styles/mapbox/light-v11'; // Thème clair
style: 'mapbox://styles/mapbox/dark-v11'; // Thème sombre
style: 'mapbox://styles/mapbox/navigation-day-v1'; // Navigation (jour)
style: 'mapbox://styles/mapbox/navigation-night-v1'; // Navigation (nuit)
Styles personnalisés : Vous pouvez aussi créer et utiliser des styles personnalisés depuis Mapbox Studio :
style: 'mapbox://styles/your-username/your-style-id';
7. Mettre à jour toutes les références
Remplacer toutes les références maplibregl par mapboxgl :
// Marqueurs
const marker = new mapboxgl.Marker() // était : maplibregl.Marker()
.setLngLat([-122.4194, 37.7749])
.setPopup(new mapboxgl.Popup().setText('San Francisco'))
.addTo(map);
// Contrôles
map.addControl(new mapboxgl.NavigationControl(), 'top-right');
map.addControl(new mapboxgl.GeolocateControl());
map.addControl(new mapboxgl.FullscreenControl());
map.addControl(new mapboxgl.ScaleControl());
8. Mettre à jour les plugins (si utilisés)
Certains plugins MapLibre doivent être remplacés par des versions Mapbox :
| Plugin MapLibre | Alternative Mapbox |
|---|---|
@maplibre/maplibre-gl-geocoder |
@mapbox/mapbox-gl-geocoder |
@maplibre/maplibre-gl-draw |
@mapbox/mapbox-gl-draw |
maplibre-gl-compare |
mapbox-gl-compare |
Exemple :
// Avant (MapLibre)
import MaplibreGeocoder from '@maplibre/maplibre-gl-geocoder';
// Après (Mapbox)
import MapboxGeocoder from '@mapbox/mapbox-gl-geocoder';
map.addControl(
new MapboxGeocoder({
accessToken: mapboxgl.accessToken,
mapboxgl: mapboxgl
})
);
9. Tout le reste reste identique
Tout votre code de carte, événements, couches et sources fonctionnent identiquement :
// Ce code fonctionne EXACTEMENT PAREIL dans les deux bibliothèques
map.on('load', () => {
map.addSource('points', {
type: 'geojson',
data: geojsonData
});
map.addLayer({
id: 'points-layer',
type: 'circle',
source: 'points',
paint: {
'circle-radius': 8,
'circle-color': '#ff0000'
}
});
});
// Les événements fonctionnent identiquement
map.on('click', 'points-layer', (e) => {
console.log(e.features[0].properties);
});
// Toutes les méthodes de carte fonctionnent pareil
map.setCenter([lng, lat]);
map.setZoom(12);
map.fitBounds(bounds);
map.flyTo({ center: [lng, lat], zoom: 14 });
Ce qui change : Résumé
Doit changer :
- Nom du package (
maplibre-gl->mapbox-gl) - Instructions d'import
- Ajouter la configuration
mapboxgl.accessToken - URL de style (passer aux styles
mapbox://) - Packages de plugins (si utilisés)
Reste exactement identique :
- Toutes les méthodes de carte (
setCenter,setZoom,fitBounds,flyTo, etc.) - Tout traitement des événements (
map.on('click'),map.on('load'), etc.) - API Marker/Popup (100% compatible)
- API Layer/source (100% compatible)
- Gestion GeoJSON
- Styles personnalisés et expressions
- Contrôles (Navigation, Geolocate, Scale, etc.)
Problèmes courants de migration
Problème 1 : Token non défini
Problème :
// Erreur : "A valid Mapbox access token is required to use Mapbox GL"
const map = new mapboxgl.Map({...});
Solution :
// Définir le token AVANT de créer la carte
mapboxgl.accessToken = 'pk.your_token';
const map = new mapboxgl.Map({...});
Problème 2 : Token dans Git
Problème :
// Token codé en dur dans le source
mapboxgl.accessToken = 'pk.eyJ1Ijoi...';
Solution :
// Utiliser les variables d'environnement
mapboxgl.accessToken = process.env.VITE_MAPBOX_TOKEN;
// Ajouter au fichier .env (non validé dans git)
VITE_MAPBOX_TOKEN=pk.your_token
// Ajouter .env à .gitignore
echo ".env" >> .gitignore
Problème 3 : Mauvais format d'URL de style
Problème :
// L'URL de style MapLibre ne fonctionnera pas de manière optimale
style: 'https://demotiles.maplibre.org/style.json';
Solution :
// Utiliser l'URL de style Mapbox pour une meilleure performance et des fonctionnalités
style: 'mapbox://styles/mapbox/streets-v12';
Problème 4 : Compatibilité des plugins
Problème :
// Le plugin MapLibre ne fonctionnera pas
import MaplibreGeocoder from '@maplibre/maplibre-gl-geocoder';
Solution :
// Utiliser le plugin Mapbox
import MapboxGeocoder from '@mapbox/mapbox-gl-geocoder';
Important : Ceci s'applique à TOUS les plugins MapLibre, pas seulement le géocodeur. Tout plugin
@maplibre/*oumaplibre-gl-*doit être remplacé par son équivalent Mapbox. Consulter l'écosystème Mapbox pour les versions spécifiques à Mapbox de chaque plugin que vous utilisez (voir l'étape 8 ci-dessus pour la table de mappage complète).
Problème 5 : URL CDN
Problème :
// CDN incorrect
<script src="https://unpkg.com/maplibre-gl@3.0.0/dist/maplibre-gl.js"></script>
Solution :
// Utiliser le CDN Mapbox
<script src='https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.js'></script>
<link href='https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css' rel='stylesheet' />
Checklist de migration
- [ ] Créer un compte Mapbox et obtenir l'access token
- [ ] Mettre à jour le package :
npm install mapbox-gl(supprimer maplibre-gl) - [ ] Mettre à jour les imports :
maplibre-gl->mapbox-gl - [ ] Mettre à jour les imports CSS :
maplibre-gl.css->mapbox-gl.css - [ ] Ajouter le token : Définir
mapboxgl.accessToken = 'pk.xxx' - [ ] Utiliser les variables d'environnement : Stocker le token dans
.env - [ ] Mettre à jour l'URL de style : Changer vers
mapbox://styles/mapbox/streets-v12 - [ ] Mettre à jour toutes les références : Remplacer
maplibregl.parmapboxgl. - [ ] Mettre à jour les plugins : Installer les versions Mapbox des plugins (si utilisés)
- [ ] Configurer la sécurité des tokens : Ajouter les restrictions d'URL dans le tableau de bord
- [ ] Tester toutes les fonctionnalités : Vérifier que la carte se charge et les interactions fonctionnent
- [ ] Configurer les alertes de facturation : Surveiller l'utilisation dans le tableau de bord Mapbox
- [ ] Mettre à jour la documentation : Documenter la configuration du token pour l'équipe
- [ ] Ajouter .env à .gitignore : Assurer que les tokens ne sont pas validés
Référence rapide
Résumé des différences clés
| Quoi | MapLibre | Mapbox |
|---|---|---|
| Package | maplibre-gl |
mapbox-gl |
| Import | import maplibregl from 'maplibre-gl' |
import mapboxgl from 'mapbox-gl' |
| Token | Optionnel (dépend des tuiles) | Requis : mapboxgl.accessToken = 'pk.xxx' |
| Style | URL personnalisée ou tuiles OSM | mapbox://styles/mapbox/streets-v12 |
| Licence | BSD (Open Source) | Propriétaire (v2+) |
| Support | Communauté | Support commercial officiel |
| Tuiles | Nécessite une source de tuiles | Tuiles premium Mapbox incluses |
| API | Tiers | Écosystème API Mapbox complet |
| API | ~95% compatible | ~95% compatible |
En résumé : La migration est facile parce que les API sont presque identiques. Les changements principaux sont l'empaquetage, la configuration du token et les URL de style. Le résultat est l'accès aux tuiles premium, à l'écosystème et au support de Mapbox.
Intégration avec d'autres compétences
Compétences associées :
- mapbox-web-integration-patterns : Patterns spécifiques aux frameworks (React, Vue, Svelte, Angular)
- mapbox-web-performance-patterns : Techniques d'optimisation des performances
- mapbox-token-security : Bonnes pratiques complètes de sécurité des tokens
- mapbox-google-maps-migration : Migrer de Google Maps vers Mapbox
Ressources
Mapbox GL JS :
- Documentation officielle
- Galerie d'exemples
- Référence API
- Dépôt GitHub
- Mapbox Studio
- Informations de tarification
Support de migration :
Fichiers de référence
Pour des informations détaillées sur des sujets spécifiques, charger ces fichiers de référence :
references/api-compatibility.md-- Liste complète des API 100% compatibles + exemple de migration côte à côtereferences/exclusive-features.md-- Fonctionnalités exclusives à Mapbox (API, Studio, Advanced) + exemples des frameworks React/Vuereferences/why-mapbox.md-- Pourquoi choisir Mapbox (Production, Équipes dev, Business) + Comparaison des performances