Data Source: LGLN (Landesamt für Geoinformation und Landesvermessung Niedersachsen) Purpose: More precise street name matching than OSM for salt criterion and street_type criterion
ALKIS (Amtliches Liegenschaftskatasterinformationssystem) provides official cadastral data from German land registry offices. For the BlueGreenCity-KI project, ALKIS data is used as a more precise alternative to OpenStreetMap for street name matching.
| Aspect | OSM | ALKIS |
|---|---|---|
| Source | Crowdsourced | Official land registry |
| Authority | Community | Government (LGLN) |
| Update frequency | Variable | Regular official updates |
| Street names | User-contributed | Official cadastral names |
| Geometries | Simplified | Precise cadastral polygons |
| Consistency | Variable | Standardized |
The pipeline automatically loads and processes ALKIS data via load_alkis_roads() in bluegreencity_ki/adapters/osgeo_backend/vector.py. No manual import is required.
Since the 2026-04 road-loader refactor, ALKIS is no longer enriched by a second live OSM fetch inside the ALKIS loader. Instead, the pipeline first resolves OSM roads centrally and then passes that OSM hierarchy into load_alkis_roads().
URL: https://opendata.lgln.niedersachsen.de/doorman/noauth/alkis_wfs_nas?Service=WFS&Request=GetCapabilities
AX_TatsaechlicheNutzung from WFS for the study area extentfunktion = 5110, 5112)AX_LagebezeichnungohneHausnummer - Location without house numberAX_LagebezeichnungmitHausnummer - Location with house numbersjoin_nearestdata/cache/alkis/alkis_roads_hannover.gpkg)URL: https://strassennamen.s3.eu-de.cloud-object-storage.appdomain.cloud/nds_strassennamen.zip
The ALKIS data is cached locally to avoid repeated WFS calls. OSM hierarchy data is cached separately in data/cache/osm/ and reused by the ALKIS loader:
The ALKIS data model connects parcels (Flurstücke) to street names through location references:
┌─────────────────┐ zeigtAuf ┌──────────────────────────────┐
│ AX_Flurstueck │──────────────────>│ AX_LagebezeichnungohneHausNr │
│ (Geometry) │ │ (Location Reference) │
└─────────────────┘ weistAuf └──────────────────────────────┘
│ │
│ │ lagebez_schl
v v
┌─────────────────┐ ┌──────────────────────────────┐
│ Traffic parcel │ │ Street Names CSV │
│ geometries │ │ (Official names) │
└─────────────────┘ └──────────────────────────────┘
The location key is a 13-digit identifier composed of:
| Component | Digits | Example | Description |
|---|---|---|---|
| Land | 2 | 03 | Federal state (Niedersachsen) |
| Regierungsbezirk | 1 | 2 | Administrative district |
| Kreis | 2 | 41 | County |
| Gemeinde | 3 | 001 | Municipality |
| Lage | 5 | 00001 | Location ID |
Example: 03241001 = Hannover Stadt
The pipeline automatically loads and processes ALKIS data via load_alkis_roads() in bluegreencity_ki/adapters/osgeo_backend/vector.py. No manual import is required.
Since the 2026-04 road-loader refactor, ALKIS is no longer enriched by a second live OSM fetch inside the ALKIS loader. Instead, the pipeline first resolves OSM roads centrally and then passes that OSM hierarchy into load_alkis_roads().
funktion = 5110, 5112)zeigtAuf -> AX_LagebezeichnungOhneHausnummer (WFS)lagebez_schl -> Street Names CSV (official names)sjoin_nearestdata/cache/alkis/alkis_roads_hannover.gpkgThe ALKIS data is cached locally to avoid repeated WFS calls. OSM hierarchy data is cached separately in data/cache/osm/ and reused by the ALKIS loader:
data/cache/alkis/alkis_roads_hannover.gpkg
Delete this file to force a fresh download on the next pipeline run.
# Download and import ALKIS street names to PostGIS
python scripts/import_alkis_streets.py
# Filter for Hannover only
python scripts/import_alkis_streets.py --gemeinde "03241001"
# Parse aha Winterdienst PDF to CSV
python scripts/parse_winterdienst_pdf.py
# Output: data/derived/salt/winterdienst_strassenverzeichnis_2026.csv
The salt criterion uses ALKIS road polygons + aha Winterdienst CSV for street-name-based matching:
inputs:
salt:
winterdienst_csv: "./data/derived/salt/winterdienst_strassenverzeichnis_2026.csv"
winterdienst_name_field: "strassenname"
winterdienst_class_field: "winterdienst"
priority_field: "winterdienst"
salt_join:
max_distance: 50.0
How it works:
load_alkis_roads() provides road polygons with street_name columnsjoin_nearestSee: Salt Criterion
The street_type criterion uses ALKIS road polygons with OSM highway classification (Strategy 0, preferred):
inputs:
roads:
source: "osm"
allowed: ["motorway", "trunk", "primary", "secondary", "tertiary", "residential"]
osm_join:
max_distance: 10.0
How it works:
load_alkis_roads() provides road polygons with highway column from that resolved OSM hierarchysjoin_nearestThe aha Winterdienst PDF is automatically parsed by scripts/parse_winterdienst_pdf.py to produce a CSV:
data/derived/salt/winterdienst_strassenverzeichnis_2026.csv
Format: Semicolon-delimited, UTF-8, 3,187 street entries
str_nr;strassenname;zusatz;rkl;winterdienst
03340;Windausstraße;von Großer Kolonnenweg bis ...;R5;W2
03057;Windmühlenstraße;von Zufahrt Parkgarage bis Georg...;R1;W1
03750;Windröschenweg;von Höltjebaumstraße bis Wendep...;R6;W0
The salt criterion handles the joining automatically:
funktion 5110 (Straßenverkehr) and 5112 (Straße) are includedCreated: 2026-03-06 Last Updated: 2026-04-02 Status: Implemented ✅