La directive UE 2010/40/UE impose à chaque État membre de gérer un point d'accès national (NAP) publiant en temps réel des données de trafic, de sécurité et de mobilité multimodale au format DATEX II. Sur le papier : un standard, 27 publieurs, une intégration.
En pratique, chaque NAP livre un profil DATEX II différent, sur un transport différent, derrière une authentification différente, à une cadence différente. « Conforme à DATEX II » est une case que chaque État membre coche à sa façon.
C'est ce que nous avons rencontré en construisant NAPSPAN, une API unifiée sur l'UE 27 + UK + AELE. Voici l'architecture qui nous permet de traiter 30 flux DATEX II incompatibles comme s'ils n'en faisaient qu'un.
La spec, puis la réalité
DATEX II est un standard européen mature, maintenu par datex2.eu et coordonné par NAPCORE. Chaque règlement délégué le désigne comme format d'échange obligatoire :
- (UE) 2022/670 — RTTI : événements en temps réel, vitesses, conditions routières
- (UE) n° 886/2013 — SRTI : accès libre et gratuit aux alertes de sécurité
- (UE) n° 885/2013 — SSTP : aires de stationnement sécurisées pour PL
- (UE) 2017/1926 — MMTIS : informations de voyage multimodales
- AFIR article 20 — télémétrie en direct des bornes de recharge VE
La spécification est donc claire. La mise en œuvre l'est beaucoup moins.
Là où les NAPs divergent vraiment
« Conforme à DATEX II » cache au moins cinq axes de divergence :
1. Profil
Chaque État membre publie un profil national — un sous-ensemble contraint du modèle DATEX II. Le profil allemand (German Traffic Data Profile) définit les incidents, chantiers et flux sur Autobahn et Bundesstraßen. transport.data.gouv.fr en France utilise d'autres sous-éléments. Le NDW néerlandais publie une taxonomie d'événements plus serrée. Le NAP TDT britannique enveloppe DATEX dans des conteneurs propres au TIH. Le répertoire des profils DATEX II les liste tous — même schéma racine, forme différente par pays.
2. Version
DATEX II v2.3 et v3.x cohabitent dans la nature. Certains NAPs publient les deux. Certains sont en pleine migration. Les espaces de noms XML diffèrent. Quelques éléments ont été renommés entre versions.
3. Transport
DATEX II est un format de payload, pas un transport. Les NAPs le diffusent via :
- Pull HTTPS — vous récupérez un document XML à intervalles réguliers
- Push HTTPS (abonnement) — vous enregistrez un endpoint et le NAP vous envoie des POST
- SOAP-over-HTTPS — pull avec enveloppe SOAP
- Interfaces télématiques nationales — protocoles d'échange propres à chaque pays, superposés à HTTP
- WFS / GeoJSON — quelques flux complémentaires de villes
4. Authentification
La matrice est large :
- Aucune — les flux SRTI de sécurité doivent être libres et ouverts
- Consommateur enregistré (sans clé) — le NAP reconnaît votre accès enregistré
- Bearer / clé API — jeton standard dans un en-tête
- Certificat client TLS — poignées de main TLS mutuelles
- OAuth2 — quelques portails opérateurs
5. Cadence et fraîcheur
Certaines publications se rafraîchissent toutes les 30 secondes (flux d'autoroute). D'autres tous les soirs (calendriers de chantiers planifiés). Certaines sont derrière un CDN qui ment sur la fraîcheur via des en-têtes Last-Modified obsolètes. Le backoff adaptatif compte.
Le zoo des formats
Le résultat de ces cinq axes : le même incident — un accident sur autoroute, par exemple — arrive sous une forme totalement différente selon le NAP. L'un le livre en XML, l'autre en JSON-LD ; l'un en DATEX II v2.3, l'autre en v3.x ; chacun emballe la charge utile dans sa propre enveloppe et nous parvient via un transport différent, derrière une authentification différente. Même règlement, même standard — deux flux jamais identiques.
Le travail ne consiste donc pas à lire DATEX II une fois. Il consiste à lire 30 dialectes de DATEX II et à les faire concorder.
L'architecture
La solution est la même approche que côté nord-américain : chaque NAP est pris en charge par son propre adaptateur autonome, tous produisant la même sortie normalisée. Qu'un NAP soit récupéré en XML, interrogé en JSON-LD ou extrait d'un conteneur propre à un pays, l'adaptateur masque chacune de ces différences. Il prend une configuration de source (quel flux, quels identifiants, quel pays, quelle version de profil) et renvoie des événements et features normalisés.
Le scheduler ne sait ni ne se soucie de quel profil, version ou transport DATEX II chaque NAP utilise. Il demande à un adaptateur de récupérer les données et reçoit des événements et features normalisés — rien d'autre ne filtre.
Le modèle normalisé
Tout aboutit à un modèle cohérent, quelle que soit la provenance :
Événements — incidents bornés dans le temps (accidents, chantiers, fermetures, météo) avec gravité, localisation, routes affectées, horaires prévus vs réels et statut de cycle de vie. Les champs propres à chaque source que porte un NAP sont conservés aux côtés des champs normalisés — rien ne se perd à la traduction.
Features — tout le reste : caméras, panneaux VMS, stations météo, parkings, bornes de recharge, segments de route PL, hauteurs libres de ponts. Ils partagent tous une forme générique assortie d'un détail propre au type, si bien qu'ajouter un nouveau type de point d'intérêt est un changement de configuration, pas une migration de schéma.
Les parties difficiles
1. Mappage des champs de profil
Chaque profil national place la même information canonique — le nom de la route, la direction, la localisation — à un endroit différent, souvent imbriquée sur plusieurs niveaux et nommée autrement. Chaque adaptateur sait où son profil range chaque champ qui nous intéresse. Là où un profil ne porte tout simplement pas une donnée, le champ reste vide — nous ne synthétisons pas de données absentes.
2. Suivi du cycle de vie
Le même incident est republié à répétition à mesure qu'il évolue, et chaque NAP signale les mises à jour différemment — certains au moindre changement, d'autres seulement aux mises à jour substantielles. Nous suivons comment chaque enregistrement change au fil du temps, de sorte qu'une mise à jour soit reconnue comme le même événement qui mûrit, et non comme un nouveau. Cet historique est ce qui alimente les analytiques transfrontalières comme les percentiles de temps de dégagement et la fiabilité de corridor.
3. Systèmes de référence des coordonnées
La plupart des NAPs publient en WGS84 (EPSG:4326). Quelques flux d'États allemands publient en ETRS89 / zones UTM. Quelques flux urbains utilisent le système cadastral local. PostGIS gère la transformation, mais chaque adaptateur doit savoir ce qu'il reçoit.
4. Limitation de débit à grande échelle
30 NAPs, chacun avec plusieurs types de ressources (events, VMS, parkings, recharge, météo), polled toutes les 30 sec à 5 min. Le scheduler utilise des sémaphores par serveur avec des limites de concurrence et des intervalles minimum entre requêtes. Des disjoncteurs reculent en cas d'échecs répétés. Le backoff adaptatif augmente l'intervalle de poll quand un NAP est lent ou en erreur — sans cela, un seul NAP lent peut tirer la fraîcheur de toute une région vers le bas.
5. Un seul modèle pour chaque type de feature
Le modèle de feature générique paie à chaque fois qu'un nouveau type de données arrive. Quand les données AFIR de recharge sont arrivées côté UE, elles se sont insérées dans le même modèle que les caméras et les parkings sans remaniement structurel — simplement un type de feature de plus parmi les autres.
L'API
Une fois la normalisation faite, l'API est simple :
Incidents actifs en Allemagne :
curl "https://api.napspan.com/api/v1/events?country=DE&type=incident&status=active" \
-H "X-API-Key: your_key"
{
"data": [
{
"id": "de_mobilithek_4711",
"country": "DE",
"type": "incident",
"severity": "major",
"title": "Verkehrsunfall A7 Richtung Hamburg",
"affected_roads": ["A7"],
"direction": "Hamburg",
"lanes_affected": "2 of 3 lanes closed",
"latitude": 53.5511,
"longitude": 9.9937,
"start_time": "2026-05-01T08:15:00Z",
"estimated_end_time": "2026-05-01T12:00:00Z"
}
],
"total": 142,
"limit": 100,
"offset": 0,
"has_more": true
}
Caméras de trafic aux Pays-Bas en GeoJSON :
curl "https://api.napspan.com/api/v1/features/geojson?type=cameras&country=NL" \
-H "X-API-Key: your_key"
La réponse s'injecte directement dans Leaflet, Mapbox ou tout outil compatible GeoJSON.
Requête de corridor transfrontalier (Berlin–Amsterdam) :
curl "https://api.napspan.com/api/v1/events/corridor?\
from_lat=52.52&from_lng=13.40&\
to_lat=52.37&to_lng=4.90&buffer_km=5" \
-H "X-API-Key: your_key"
Un appel, deux NAPs (Mobilithek + NDW), une seule structure de réponse.
Ce que contiennent les données
Une fois normalisé, le jeu de données comprend :
- Événements RTTI en temps réel — incidents, chantiers, flux de trafic
- Alertes SRTI de sécurité (libres et ouvertes selon 886/2013)
- Contenus VMS des panneaux à messages variables
- Données SSTP de stationnement PL sécurisé avec disponibilité
- Statut des points de recharge selon l'AFIR article 20
- Caméras de trafic avec URL d'image (lorsque le NAP les expose)
- Mesures de stations météo de type RWIS
- Métadonnées de corridor du réseau central RTE-T
- Hauteurs libres de ponts et restrictions de poids par État membre
Pile technique
- Go — routeur chi, pgx v5, slog, encoding/xml + parsers DATEX maison
- PostgreSQL + PostGIS — requêtes spatiales, génération GeoJSON, intersection de corridors
- Redis — cache de réponses, cache de détails de feature (nil-safe, optionnel)
- Vue 3 + Leaflet — carte de trafic en direct
Essayez
L'API est en ligne avec une formule gratuite (sans carte bancaire) :
- Carte en direct — explorer les données visuellement
- Documentation API — référence complète des endpoints
- Portail développeur — s'inscrire et obtenir une clé API
Si vous construisez quoi que ce soit sur les données de mobilité européennes — logistique, routage de flotte, navigation, tableaux de bord urbains — nous serions ravis de savoir quels NAPs et quels profils DATEX II sont prioritaires pour vous. Le plus dur n'est pas le parsing ; c'est de savoir quel État membre publie quelles données sur quel transport derrière quelle authentification. Après 30 NAPs, nous avons une assez bonne carte de cela.
Prêt à essayer NAPSPAN ?
Essai gratuit de 14 jours. Sans carte bancaire. UE 27 + UK + AELE, normalisé.
Obtenir une clé API gratuite Explorer la carte