@synapxlab/geo-select, la sélection géographique native

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.

  • Sélection sémantique include/exclude
  • Codes INSEE comme identifiants canoniques
  • Élément de formulaire formAssociated
  • Données françaises auto-hébergées
SVG 0 dépendance MIT TypeScript .d.ts
geo-select.js → France / Cantal / Aurillac
// Une sélection compacte, pas 300 communes new GeoSelect.GeoSelect(mount, { dataProvider: './geo-data', theme: 'light' }); // Département 15, sauf Aurillac // Identifiants : codes INSEE

Une carte qui produit une sélection

@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.

France
Région
Département
Commune

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é.

Démonstration vivante

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.

La démonstration est hébergée sur geoselect.synapx.fr. Le service n’est pas encore en ligne au moment de la rédaction de cette page. Vous pouvez ouvrir son adresse pour vérifier sa disponibilité. Accéder à geoselect.synapx.fr

Trois usages distincts

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.

2. Affichage en lecture seule

Avec l’option mode: 'display', la carte montre les zones couvertes sans permettre leur modification. Ce mode convient à la restitution d’une couverture existante.

3. Sélection sans carte

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.

Une sélection sémantique, fondée sur les codes INSEE

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.

Include / exclude

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.

Code INSEE, pas code postal

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ë.

Un élément de formulaire natif

<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>
Limite assumée : <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é.

États accessibles et navigation au clavier

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.

Configurer, prévisualiser, copier

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.

CDN

Un bloc qui référence les ressources hébergées et peut être collé dans une page.

Fichiers locaux

Des chemins adaptés à une copie du SDK et de ses ressources sur votre propre serveur.

Configuration JSON

Les réglages seuls, dans un format destiné à être repris par votre intégration.

Fichiers statiques ou API REST

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.

SourceConfiguration disponibleUsage
Fichiers statiquesJeu de données distribué avec le SDKServir directement les niveaux géographiques depuis votre hébergement.
API RESTurl, type, headers, data, dataSrc, mapInterroger une API choisie par l’intégrateur et adapter sa réponse.

Ajouter une information métier à chaque commune

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.

Options d’affichage

Thème

Affichage clair ou sombre selon l’interface d’accueil.

Hydrographie

Le réseau hydrographique peut être affiché lorsque ce repère est utile.

Lecture cartographique

L’épaisseur des frontières et l’intensité des étiquettes sont réglables.

Sélection par rayon

Un marqueur de rayon déplaçable permet de sélectionner les communes alentour.

Données françaises, licences distinctes

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.

34 877 communes
550 fichiers
7,8 Mo compressés au total
22,7 Ko vue nationale en Brotli
ContenuSource 2026CouvertureLicence
Contours géographiquesIGN Admin Express COG 2026FranceLicence Ouverte 2.0 — Etalab
Référentiel des communesINSEE COG 2026 — Code Officiel GéographiqueFranceLicence Ouverte 2.0 — Etalab
Réseau hydrographiqueBD TOPAGE® 2026Métropole uniquementLicence Ouverte 2.0 — Etalab

Code du SDK

Le code de @synapxlab/geo-select est sous licence MIT.

Données géographiques

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.

Deux objets juridiques distincts : la licence MIT couvre le code du composant, pas les jeux de données qu’il distribue. Réutiliser le SDK ne dispense pas de conserver les mentions d’attribution attachées aux données.
Hébergement maîtrisé : la distribution et la démonstration sont entièrement hébergées chez SynapxLab. L’intégrateur peut aussi servir les fichiers depuis son propre serveur. Le composant ne charge aucun fond de carte distant, n’appelle aucun service cartographique tiers et ne demande aucune clé d’API. À l’exécution, il ne communique qu’avec le serveur qui l’héberge ou avec l’API REST configurée par l’intégrateur.

Installation par fichiers locaux ou depuis les sources

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>

Types TypeScript fournis

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.