mapsTester la carte ↗
POUR VOS SITES WEB

Une carte, votre infrastructure.

Carte vectorielle et géocodage pour la Belgique, la France métropolitaine, les Pays-Bas européens, l’Allemagne et le Luxembourg.

Points d’accès

RessourceAdresse
Style françaishttps://maps.agifly.cloud/styles/fr.json
Autres langues/styles/nl.json · /styles/de.json · /styles/en.json
Styles Protomaps/styles/{light|dark|white|grayscale|black}/fr.json (aussi nl, de, en)
Galerie Maputnik/styles/gallery/{americana|dark-matter|basic|toner|bright|liberty|positron|colorful}/fr.json
Catalogue et versions de la galerie/style-catalog.json · /gallery-manifest.json
Localisation IP approximative/api/location/ip — IP du visiteur, ville, pays, latitude, longitude
Version des tuiles/manifest.json
Adresse → coordonnées/api/search?q=Grand-Place%2C%20Bruxelles&language=fr
Coordonnées → adresse/api/reverse?lat=50.846714&lon=4.352515&language=fr
État de Nominatim/api/status

Carte MapLibre

Installez les dépendances dans le projet du site et compilez-les avec son outil de build. Hébergez les modules et le worker MapLibre dans les assets du site.

npm install maplibre-gl@6.10.0 pmtiles@4.5.0
import * as maplibregl from 'maplibre-gl';
import { Protocol } from 'pmtiles';
import 'maplibre-gl/dist/maplibre-gl.css';

const protocol = new Protocol();
maplibregl.addProtocol('pmtiles', protocol.tile);

const map = new maplibregl.Map({
  container: 'map', // cet élément doit avoir une hauteur CSS
  style: 'https://maps.agifly.cloud/styles/fr.json',
  center: [4.352515, 50.846714], // longitude, latitude
  zoom: 8,
  minZoom: 0,
  maxZoom: 24
});

map.addControl(new maplibregl.NavigationControl());

new maplibregl.Marker()
  .setLngLat([4.352515, 50.846714])
  .addTo(map);

Rechercher une adresse et centrer la carte

const query = new URLSearchParams({
  q: 'Grand-Place, Bruxelles',
  language: 'fr'
});
const response = await fetch(
  `https://maps.agifly.cloud/api/search?${query}`
);
if (!response.ok) throw new Error(`Géocodage : ${response.status}`);
const places = await response.json();
if (places.length) {
  const center = [Number(places[0].lon), Number(places[0].lat)];
  map.flyTo({ center, zoom: 16 });
  new maplibregl.Marker().setLngLat(center).addTo(map);
}

Galerie et aperçus des styles

Le sélecteur propose 15 fonds utilisables : Agifly, les cinq styles Protomaps, Americana, Dark Matter, MapTiler Basic, Toner, OSM Bright, OSM Liberty, Positron, VersaTiles Colorful et un fond vide. Chaque fond affiche un aperçu rendu à Bruxelles avec les mêmes tuiles que la carte.

Les styles issus de la galerie Maputnik utilisent leur schéma de tuiles d’origine : OpenMapTiles ou Shortbread. Ces archives sont également hébergées sur le serveur maps et leur actualisation est vérifiée les 1er et 15 du mois. Le détail natif dépend de la source (actuellement 14 pour la galerie, 15 pour Protomaps), avec un zoom d’affichage jusqu’à 24. La date OSM de la source sélectionnée apparaît sous les outils ; une nouvelle vérification n’implique pas qu’un fournisseur ait publié des données plus récentes.

Les polices sont harmonisées avec les Noto Sans locales. Les couches de relief externes d’Americana et Liberty sont omises. Americana utilise ses icônes statiques et des références routières textuelles. Les attributions des styles sont conservées ; consultez les sources et licences.

Localiser le visiteur

Le module demande la position au chargement ou au clic. Le navigateur exige HTTPS et l’autorisation du visiteur ; un refus doit laisser la recherche manuelle disponible. Si la position précise est indisponible ou expire, le module tente une fois la précision standard. Activer les services de localisation ne garantit pas que le navigateur, notamment un navigateur intégré, puisse obtenir une position. Utilisez la page HTTPS dans Safari ou Chrome pour tester ; le fichier HTML local n’est pas le site déployé.

import { createUserLocation } from 'https://maps.agifly.cloud/geolocation.js';
const locator = createUserLocation({
  onStatus: ({ message }) => { statusElement.textContent = message; }
});
async function locate(automatic = false) {
  const position = await locator.locate({ automatic });
  if (!position) return;
  map.flyTo({ center: [position.longitude, position.latitude], zoom: 15 });
  // /api/reverse permet ensuite de retrouver l’adresse avec Nominatim.
}
locationButton.addEventListener('click', () => locate());
locate(true);
// Lors d’une sélection manuelle, annulez le résultat automatique en attente :
// locator.cancel();

Pour une estimation sans autorisation de localisation :

const response = await fetch('https://maps.agifly.cloud/api/location/ip');
if (!response.ok) throw new Error(`Localisation IP : ${response.status}`);
const position = await response.json();
map.flyTo({ center: [position.longitude, position.latitude], zoom: 10 });

La base DB-IP City Lite est hébergée localement et actualisée chaque mois. Une IP indique une zone approximative du réseau, pas une adresse précise ; un VPN ou réseau mobile peut la déplacer. L’API utilise uniquement l’IP de connexion du visiteur. Un appel depuis votre backend localiserait votre serveur.

Sur toute page utilisant ces résultats, conservez l’attribution IP Geolocation by DB-IP (CC BY 4.0).

Domaines autorisés

Les ressources cartographiques et API acceptent uniquement les origines HTTPS exactes : maps.agifly.cloud, agifly.be, www.agifly.be, eggo.be, www.eggo.be et wp.eggo.agifly.cloud. Les autres origines reçoivent HTTP 403. Sans Origin, un Referer provenant d’un de ces sites est requis. Les iframes du démonstrateur sont bloquées sur les autres sites.

La page de test reste publique. Ce contrôle bloque les intégrations de navigateurs non autorisées ; il ne constitue pas une authentification privée, car un client serveur peut falsifier ces en-têtes. Pour une intégration autorisée, ne supprimez pas le Referer ; utilisez strict-origin-when-cross-origin. Les ressources publiques consultables peuvent être copiées.

Comportement du service

Le site eggo.be peut maintenant utiliser ces ressources. Son code WordPress doit être adapté pour remplacer les appels Google Maps et conserver ses marqueurs de showrooms.