1. Sélection sur carte
L’utilisateur clique et zoome pour composer une sélection de régions, départements ou communes. Le résultat conserve la logique territoriale de cette sélection.
Une carte SVG de France qui se comporte comme un <select multiple>, avec navigation progressive de la région à la commune. JavaScript natif, sans framework ni dépendance d’exécution.
@synapxlab/geo-select est une carte SVG de France conçue pour se comporter comme un <select multiple>. L’utilisateur navigue de la France vers une région, un département puis une commune selon le niveau de zoom. Les données sont chargées progressivement : le navigateur ne reçoit pas d’emblée le détail des 34 877 communes.
Le composant est écrit en JavaScript natif, sans framework et sans dépendance d’exécution. Le SVG conserve une structure exploitable pour l’interaction et l’accessibilité ; il ne s’agit pas d’un rendu Canvas.
Un champ multiple classique suppose que chaque choix existe déjà sous forme d’option. Ici, un territoire peut ne pas avoir encore été chargé et une sélection peut porter sur un ensemble complet assorti de quelques exceptions. Le modèle de données tient compte de cette réalité.
La carte ci-dessous est chargée directement depuis geoselect.synapx.fr. Tant que ce domaine n’est pas en ligne ou si son script ne répond pas, la page conserve volontairement le message de repli et reste utilisable.
L’utilisateur clique et zoome pour composer une sélection de régions, départements ou communes. Le résultat conserve la logique territoriale de cette sélection.
Avec l’option mode: 'display', la carte montre les zones couvertes sans permettre leur modification. Ce mode convient à la restitution d’une couverture existante.
TerritoryPicker propose un sélecteur en modale avec complétion à la frappe. Il répond aux intégrations qui ont besoin des territoires, mais pas d’une représentation cartographique.
Sélectionner un département ne matérialise pas ses quelque 300 communes en mémoire ni dans la donnée envoyée. Le SDK enregistre une inclusion et ses éventuelles exclusions : « le département 15, sauf la commune d’Aurillac ». Cette représentation reste compacte et décrit l’intention, au lieu de produire une liste à plat.
Un territoire parent peut être inclus en une seule entrée. Les communes retirées deviennent des exceptions explicites, sans expansion préalable de tout le département.
Le code INSEE est l’identifiant canonique d’une commune. Un code postal peut couvrir plusieurs communes et une commune peut avoir plusieurs codes postaux : il s’agit d’une relation plusieurs-à-plusieurs. Employer le code postal comme identifiant géographique rend donc la sélection ambiguë.
<geo-select> est un Custom Element formAssociated fondé sur ElementInternals. Placé dans un formulaire, il participe à new FormData(form), à form.reset(), à form.elements et à la validation required avec le message natif du navigateur. Lors d’une modification, il émet les événements input puis change, sans code supplémentaire côté intégrateur.
<form id="zone-form"> <geo-select name="territoires" required></geo-select> </form>
<geo-select> n’est pas un HTMLSelectElement. Il n’expose ni .options ni .selectedOptions, car un territoire n’est pas nécessairement matérialisé comme un <option> et peut n’avoir jamais été chargé.Chaque territoire interactif porte role="checkbox" et expose son état avec aria-checked. La valeur mixed indique une sélection partielle, par exemple lorsqu’un département est sélectionné mais que certaines communes en sont exclues. La navigation fonctionne au clavier et les changements utiles sont annoncés dans une zone aria-live.
Le configurateur en ligne permet de régler les options, de prévisualiser le résultat en direct et de copier un bloc HTML + JavaScript prêt à intégrer. Il propose trois formats de sortie selon le mode de déploiement retenu.
Un bloc qui référence les ressources hébergées et peut être collé dans une page.
Des chemins adaptés à une copie du SDK et de ses ressources sur votre propre serveur.
Les réglages seuls, dans un format destiné à être repris par votre intégration.
La source géographique peut être constituée des fichiers statiques fournis avec le SDK ou d’une API REST configurée selon un modèle proche de DataTables. L’intégrateur garde ainsi la maîtrise de l’hébergement et de la façon dont les réponses sont adaptées.
| Source | Configuration disponible | Usage |
|---|---|---|
| Fichiers statiques | Jeu de données distribué avec le SDK | Servir directement les niveaux géographiques depuis votre hébergement. |
| API REST | url, type, headers, data, dataSrc, map | Interroger une API choisie par l’intégrateur et adapter sa réponse. |
Une ligne de texte peut être affichée sous le nom de chaque commune et alimentée par une API. Dans un réseau de partenaires, de franchisés ou de distribution, cette annotation peut par exemple indiquer le nom de l’adhérent qui couvre la commune. La géographie sert alors de support à une donnée métier maintenue par l’application.
Affichage clair ou sombre selon l’interface d’accueil.
Le réseau hydrographique peut être affiché lorsque ce repère est utile.
L’épaisseur des frontières et l’intensité des étiquettes sont réglables.
Un marqueur de rayon déplaçable permet de sélectionner les communes alentour.
Les contours et référentiels sont distribués au format TopoJSON. Ce format a été retenu après une mesure comparative face à GeoJSON et à un SVG précompilé. La vue nationale, au niveau le plus dézoomé, pèse 22,7 Ko sur le réseau une fois compressée en Brotli.
| Contenu | Source 2026 | Couverture | Licence |
|---|---|---|---|
| Contours géographiques | IGN Admin Express COG 2026 | France | Licence Ouverte 2.0 — Etalab |
| Référentiel des communes | INSEE COG 2026 — Code Officiel Géographique | France | Licence Ouverte 2.0 — Etalab |
| Réseau hydrographique | BD TOPAGE® 2026 | Métropole uniquement | Licence Ouverte 2.0 — Etalab |
Le code de @synapxlab/geo-select est sous licence MIT.
Les données ne sont pas sous licence MIT. Elles conservent leur Licence Ouverte 2.0 et l’obligation d’attribution aux producteurs, notamment l’IGN et l’INSEE.
Le SDK s’installe à partir des fichiers téléchargés ou depuis son dépôt source. Le code source est disponible sur demande. Copiez la feuille de style, le bundle JavaScript et le répertoire de données sur votre serveur, puis référencez leurs chemins locaux.
<!-- Ressources servies par votre propre site --> <link rel="stylesheet" href="./dist/style.css"> <script src="./dist/geo-select.umd.cjs" defer></script> <div id="territory-map"></div> <script> window.addEventListener('load', function () { if (typeof window.GeoSelect === 'undefined') { return; } var mount = document.getElementById('territory-map'); if (!mount) { return; } new GeoSelect.GeoSelect(mount, { dataProvider: './geo-data', theme: 'light' }); }); </script>
Le SDK est écrit en JavaScript. Des fichiers de déclaration .d.ts sont néanmoins fournis pour typer son intégration dans un projet TypeScript et permettre à l’éditeur de connaître les interfaces exposées.