Skip to content

Commit 083cdee

Browse files
committed
chore(roads): drop de-autobahn-meldungen feed (Alert-C only, redundant)
The nationwide Autobahn GmbH BAB Verkehrsmeldungen offer (Mobilithek 110000000003091005) turned out to locate every situation purely via Alert-C / TMC location codes — the live payload carries 0 coordinates and 0 OpenLR references, so the datex2 situations parser skips every record and the feed produces no mappable events. It is also redundant with the existing autobahn.de public-API feed, which already supplies coordinate-located BAB warnings and closures. Remove the feed, its DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID setup/env/doc entries (regenerated via gen:credentials), and its test. Also record in the de-by-autobahn comment why the Bayern flow feed cannot be geolocated (no Verortung offer on Mobilithek; site ids are a patchwork of legacy VRZ-internal schemes with no public coordinate table).
1 parent 47483d4 commit 083cdee

6 files changed

Lines changed: 17 additions & 128 deletions

File tree

.env.example

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,6 @@ DE_NW_AUTOBAHN_LOSLANE_VERORTUNG_SUBSCRIPTION_ID=
202202
DE_BW_AUTOBAHN_LOS_SUBSCRIPTION_ID=
203203
DE_BW_AUTOBAHN_LOS_VERORTUNG_SUBSCRIPTION_ID=
204204

205-
# Autobahn GmbH BAB traffic messages (nationwide, incl. delays & closures)
206-
# Mobilithek registration: https://mobilithek.info/registration-request
207-
# This ONE certificate authenticates every German region feed — set it once, then add each region's subscription id. (The NRW state network is published under 'LVZ.NRW', not 'Straßen.NRW'.)
208-
DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID=
209-
210205
# Vejdirektoratet (Denmark)
211206
# Danish data exchanger — dataset 416: https://du-portal-ui.dataudveksler.app.vd.dk/data/416/overview
212207
# CC-BY-4.0; attribution "Vejdirektoratet." Access is via a service account, not a plain API key — confirm from the dataset page whether its credential is a header/query token or an OAuth2 client-credentials pair.

docs/road-feed-credentials.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
| Autobahn GmbH BAB traffic data (Bayern, per lane) | `MOBILITHEK_CERT`, `MOBILITHEK_KEY`, `DE_BY_AUTOBAHN_SUBSCRIPTION_ID` | GeoNutzV | [Mobilithek registration](https://mobilithek.info/registration-request) |
3232
| Autobahn GmbH BAB Verkehrslage LoS (Nordrhein-Westfalen, per lane) | `MOBILITHEK_CERT`, `MOBILITHEK_KEY`, `DE_NW_AUTOBAHN_LOSLANE_SUBSCRIPTION_ID`, `DE_NW_AUTOBAHN_LOSLANE_VERORTUNG_SUBSCRIPTION_ID` | GeoNutzV | [Mobilithek registration](https://mobilithek.info/registration-request) |
3333
| Autobahn GmbH BAB Verkehrslage LoS (NL Südwest, Baden-Württemberg) | `MOBILITHEK_CERT`, `MOBILITHEK_KEY`, `DE_BW_AUTOBAHN_LOS_SUBSCRIPTION_ID`, `DE_BW_AUTOBAHN_LOS_VERORTUNG_SUBSCRIPTION_ID` | GeoNutzV | [Mobilithek registration](https://mobilithek.info/registration-request) |
34-
| Autobahn GmbH BAB traffic messages (nationwide, incl. delays & closures) | `MOBILITHEK_CERT`, `MOBILITHEK_KEY`, `DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID` | GeoNutzV | [Mobilithek registration](https://mobilithek.info/registration-request) |
3534
| Vejdirektoratet (Denmark) | `DK_VEJDIREKTORATET_API_KEY` | CC-BY-4.0 | [Danish data exchanger — dataset 416](https://du-portal-ui.dataudveksler.app.vd.dk/data/416/overview) |
3635
| Tark Tee (Estonia) | `EE_TARKTEE_API_KEY` | CC-BY-4.0 | [Register at Tark Tee](https://tarktee.transpordiamet.ee/#/en/datex-registration) |
3736
| National Highways NTIS (England) | `GB_NATIONALHIGHWAYS_API_KEY` | OGL-UK-3.0 | [National Highways developer portal](https://developer.data.nationalhighways.co.uk/signin) |

packages/roads/atlas/roads.json5

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1638,55 +1638,6 @@
16381638
},
16391639
"id": "de-bw-autobahn-los"
16401640
},
1641-
{
1642-
"name": "Autobahn GmbH BAB traffic messages (nationwide, incl. delays & closures)",
1643-
"format": "datex2",
1644-
"operator": "autobahn",
1645-
"stream": "meldungen",
1646-
"url": "https://mobilithek.info:8443/mobilithek/api/v1.0/subscription/${DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID}/clientPullService?subscriptionID=${DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID}",
1647-
"expandEnv": "DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID",
1648-
"auth": {
1649-
"kind": "mtls",
1650-
"certEnvVar": "MOBILITHEK_CERT",
1651-
"keyEnvVar": "MOBILITHEK_KEY"
1652-
},
1653-
"requestHeaders": {
1654-
"Accept-Encoding": "gzip"
1655-
},
1656-
"requiredEnv": [
1657-
"DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID"
1658-
],
1659-
"cadenceSec": 300,
1660-
"freshnessWindowSec": 900,
1661-
"license": "GeoNutzV",
1662-
"licenseUrl": "https://www.gesetze-im-internet.de/geonutzv/",
1663-
"attribution": "Quelle: Die Autobahn GmbH des Bundes",
1664-
"country": "DE",
1665-
"privacyUrl": "https://www.autobahn.de/datenschutz",
1666-
"setup": {
1667-
"MOBILITHEK_CERT": {
1668-
"url": "https://mobilithek.info/registration-request",
1669-
"urlLabel": "Mobilithek registration",
1670-
"steps": [
1671-
"Register your organisation at mobilithek.info/registration-request; leave 'Organisation relevant gemäß MDV/PBefG' unchecked.",
1672-
"Subscribe to the region offer(s) you want (each region's offer IDs are listed in its subscription-id field below).",
1673-
"Create a machine account at mobilithek.info/organisation/machine-accounts and upload your own certificate (generate it with the openssl command shown in the certificate field below, no SMS needed). Paste the certificate PEM here and its private key in the next field."
1674-
],
1675-
"notes": "This ONE certificate authenticates every German region feed — set it once, then add each region's subscription id. (The NRW state network is published under 'LVZ.NRW', not 'Straßen.NRW'.)",
1676-
"title": "Mobilithek — client certificate (PEM)",
1677-
"description": "PEM contents of the machine-account client certificate (mutual TLS). ONE certificate authenticates every German region feed below — set it once, then just add each region's subscription id. Recommended: generate your own keypair with `openssl req -x509 -newkey rsa:4096 -nodes -days 825 -keyout mobilithek.key.pem -out mobilithek.cert.pem -subj \"/CN=openmapx-mobilithek\"`, upload mobilithek.cert.pem under the machine account's 'Zertifikat hochladen' tab (no SMS needed), then paste mobilithek.cert.pem here and mobilithek.key.pem in the next field. Alternative: convert an issued .p12 with `openssl pkcs12 -in m.p12 -clcerts -nokeys | openssl x509` (cert) and `openssl pkcs12 -in m.p12 -nocerts -nodes | openssl rsa` (key)."
1678-
},
1679-
"MOBILITHEK_KEY": {
1680-
"title": "Mobilithek — client private key (PEM)",
1681-
"description": "PEM contents of the certificate's private key, with no passphrase (generate with openssl -nodes, or strip an issued .p12 key with openssl rsa). Stays with us — never uploaded to Mobilithek. Shared by every German region feed."
1682-
},
1683-
"DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID": {
1684-
"title": "Autobahn nationwide BAB Verkehrsmeldungen — Mobilithek subscription id",
1685-
"description": "Numeric subscription id for Mobilithek offer 110000000003091005 (Verkehrsmeldungen mit Verlustzeiten und Sperrungen auf BAB, nationwide). Shared MOBILITHEK_CERT/KEY. GeoNutzV. NOTE: overlaps the existing autobahn.de feed — validate for redundancy before enabling."
1686-
}
1687-
},
1688-
"id": "de-autobahn-meldungen"
1689-
},
16901641
{
16911642
"name": "Vejdirektoratet (Denmark)",
16921643
"format": "datex2",

packages/roads/feeds/roads/de.json5

Lines changed: 15 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,11 +1072,21 @@
10721072
},
10731073
{
10741074
// Autobahn GmbH BAB detector speed (v), per-lane, Bayern. MeasuredDataPublication.
1075-
// The live payload carries NO inline geometry — it references an external
1076-
// MeasurementSiteTable, and no Bayern Verortung offer was granted, so its sites
1077-
// cannot be geolocated yet (the flow parses but every site is skipped for lack
1078-
// of geometry). A Bayern Verortung/site-table offer must be subscribed and wired
1079-
// as a siteTable for this feed to produce mappable data.
1075+
// The live payload (2155 sites) carries NO inline geometry — it references an external
1076+
// MeasurementSiteTable (id "D2-C2VBA-LVE-Table"), so every site is skipped for lack of
1077+
// geometry and the feed produces no mappable data. This feed is NOT geolocatable from
1078+
// any public source today (researched 2026-07-24):
1079+
// - No companion Verortung offer on Mobilithek: Die Autobahn GmbH publishes paired
1080+
// dynamic+Verortung offers only for NL Nord (HH/SH), VZD (Hessen), NRW, NL Südwest
1081+
// (BW); Bayern is the legacy VRZ München/Nürnberg system with no reference file.
1082+
// - Offline id→coordinate join is not viable: the site ids are a patchwork of ~5
1083+
// legacy VRZ-internal schemes (mq.mq92-310-deg_h, mq.mq_9_akneuf_0, mq.dzmq_a7_...,
1084+
// mq.mq_93_196780, only ~3% the clean "mq.aNNN_station_dir" ASB form) with no
1085+
// public dataset keyed by them; the Bayern VRZ operator (Bayerische Straßenbauver-
1086+
// waltung ZVM) and BayernInfo publish no BAB-detector location/Stammdaten file.
1087+
// The only realistic fix is to request a Verortung/MeasurementSiteTable offer from Die
1088+
// Autobahn GmbH. Until then this feed stays credentialed-but-dormant (skips the swap
1089+
// each cycle, never crashes). Consider removing it if the offer is not forthcoming.
10801090
subdivision: "by",
10811091
operator: "autobahn",
10821092
name: "Autobahn GmbH BAB traffic data (Bayern, per lane)",
@@ -1226,50 +1236,4 @@
12261236
},
12271237
},
12281238
},
1229-
{
1230-
// Autobahn GmbH nationwide BAB Verkehrsmeldungen (situations incl. Verlustzeiten
1231-
// and Sperrungen), all Bundesländer. DATEX II SituationPublication — parsed by
1232-
// the shared datex2 situations parser like every state incident feed. GeoNutzV
1233-
// (per the offer's MDM-publication documentation, §4.2). Mobilithek mtls
1234-
// client-pull, shared MOBILITHEK_CERT/KEY. Disabled by default until validated
1235-
// AND confirmed to add content over the existing autobahn (autobahn.de) feed.
1236-
operator: "autobahn",
1237-
stream: "meldungen",
1238-
name: "Autobahn GmbH BAB traffic messages (nationwide, incl. delays & closures)",
1239-
format: "datex2",
1240-
url: "https://mobilithek.info:8443/mobilithek/api/v1.0/subscription/${DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID}/clientPullService?subscriptionID=${DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID}",
1241-
expandEnv: "DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID",
1242-
auth: { kind: "mtls", certEnvVar: "MOBILITHEK_CERT", keyEnvVar: "MOBILITHEK_KEY" },
1243-
requiredEnv: ["DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID"],
1244-
requestHeaders: { "Accept-Encoding": "gzip" },
1245-
cadenceSec: 300,
1246-
freshnessWindowSec: 900,
1247-
license: "GeoNutzV",
1248-
licenseUrl: "https://www.gesetze-im-internet.de/geonutzv/",
1249-
attribution: "Quelle: Die Autobahn GmbH des Bundes",
1250-
country: "DE",
1251-
privacyUrl: "https://www.autobahn.de/datenschutz",
1252-
setup: {
1253-
MOBILITHEK_CERT: {
1254-
title: "Mobilithek — client certificate (PEM)",
1255-
description: "PEM contents of the machine-account client certificate (mutual TLS). ONE certificate authenticates every German region feed below — set it once, then just add each region's subscription id. Recommended: generate your own keypair with `openssl req -x509 -newkey rsa:4096 -nodes -days 825 -keyout mobilithek.key.pem -out mobilithek.cert.pem -subj \"/CN=openmapx-mobilithek\"`, upload mobilithek.cert.pem under the machine account's 'Zertifikat hochladen' tab (no SMS needed), then paste mobilithek.cert.pem here and mobilithek.key.pem in the next field. Alternative: convert an issued .p12 with `openssl pkcs12 -in m.p12 -clcerts -nokeys | openssl x509` (cert) and `openssl pkcs12 -in m.p12 -nocerts -nodes | openssl rsa` (key).",
1256-
url: "https://mobilithek.info/registration-request",
1257-
urlLabel: "Mobilithek registration",
1258-
steps: [
1259-
"Register your organisation at mobilithek.info/registration-request; leave 'Organisation relevant gemäß MDV/PBefG' unchecked.",
1260-
"Subscribe to the region offer(s) you want (each region's offer IDs are listed in its subscription-id field below).",
1261-
"Create a machine account at mobilithek.info/organisation/machine-accounts and upload your own certificate (generate it with the openssl command shown in the certificate field below, no SMS needed). Paste the certificate PEM here and its private key in the next field.",
1262-
],
1263-
notes: "This ONE certificate authenticates every German region feed — set it once, then add each region's subscription id. (The NRW state network is published under 'LVZ.NRW', not 'Straßen.NRW'.)",
1264-
},
1265-
MOBILITHEK_KEY: {
1266-
title: "Mobilithek — client private key (PEM)",
1267-
description: "PEM contents of the certificate's private key, with no passphrase (generate with openssl -nodes, or strip an issued .p12 key with openssl rsa). Stays with us — never uploaded to Mobilithek. Shared by every German region feed.",
1268-
},
1269-
DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID: {
1270-
title: "Autobahn nationwide BAB Verkehrsmeldungen — Mobilithek subscription id",
1271-
description: "Numeric subscription id for Mobilithek offer 110000000003091005 (Verkehrsmeldungen mit Verlustzeiten und Sperrungen auf BAB, nationwide). Shared MOBILITHEK_CERT/KEY. GeoNutzV. NOTE: overlaps the existing autobahn.de feed — validate for redundancy before enabling.",
1272-
},
1273-
},
1274-
},
12751239
]

packages/roads/src/__tests__/feeds.test.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -421,25 +421,11 @@ describe("FEED_SOURCES", () => {
421421
expect(new Set(ids).size).toBe(ids.length);
422422
});
423423

424-
it("loads every feed from the data files (all 70 migrated)", () => {
425-
expect(FEED_SOURCES.length).toBe(70);
424+
it("loads every feed from the data files (all 69 migrated)", () => {
425+
expect(FEED_SOURCES.length).toBe(69);
426426
expect(new Set(FEED_SOURCES.map((f) => f.id)).size).toBe(FEED_SOURCES.length);
427427
});
428428

429-
it("includes the nationwide Autobahn GmbH BAB Verkehrsmeldungen event feed (datex2, events, GeoNutzV, disabled)", () => {
430-
const f = FEED_SOURCES.find((s) => s.id === "de-autobahn-meldungen");
431-
expect(f).toBeDefined();
432-
expect(f!.format).toBe("datex2");
433-
expect(f!.produces).toBeUndefined(); // events is the default path
434-
expect(f!.license).toBe("GeoNutzV");
435-
expect(f!.country).toBe("DE");
436-
expect(f!.auth).toEqual({
437-
kind: "mtls",
438-
certEnvVar: "MOBILITHEK_CERT",
439-
keyEnvVar: "MOBILITHEK_KEY",
440-
});
441-
});
442-
443429
it("includes the seven Autobahn GmbH BAB flow feeds, all datex2 flow, GeoNutzV, mtls", () => {
444430
const ids = [
445431
"de-hh-autobahn-nord",

services/ingest/service.json

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -340,12 +340,6 @@
340340
"description": "Numeric subscription id for Mobilithek offer 110000000003218001. Shared MOBILITHEK_CERT/KEY.",
341341
"x-openmapx-secret": true
342342
},
343-
"DE_AUTOBAHN_MELDUNGEN_SUBSCRIPTION_ID": {
344-
"type": "string",
345-
"title": "Autobahn nationwide BAB Verkehrsmeldungen — Mobilithek subscription id",
346-
"description": "Numeric subscription id for Mobilithek offer 110000000003091005 (Verkehrsmeldungen mit Verlustzeiten und Sperrungen auf BAB, nationwide). Shared MOBILITHEK_CERT/KEY. GeoNutzV. NOTE: overlaps the existing autobahn.de feed — validate for redundancy before enabling.",
347-
"x-openmapx-secret": true
348-
},
349343
"DK_VEJDIREKTORATET_API_KEY": {
350344
"type": "string",
351345
"title": "Vejdirektoratet key (Denmark)",

0 commit comments

Comments
 (0)