Zum Hauptinhalt springen

Straßenraumaufteilung in einer Online-Karte

· 11 Minuten Lesezeit
Fedora
Geographin und Klimaaktivistin

In meinen Blogposts zum Thema Fernerkundung und einem Vortrag auf dem WebMontag Kiel, habe ich beschrieben, wie sich mit Hilfe von Satellitendaten und maschinellem Lernen Landnutzungen klassifizieren lassen. Im Nachhinein wurde ich mehrmals angesprochen und bin auf Diskussionen aufmerksam geworden, ob sich diese Technik nutzen ließe, Parkplätze und andere räumliche Nutzungen im städtischen Raum zu untersuchen. Diese Anfragen kamen allesamt von Verkehrswendeaktivist*innen, was ich selbst auch bin. In Verbindung mit Vorträgen und Projekten, die (Verkehrs-)Daten sammeln, nutzbar machen oder selbst generieren, ist mir aufgefallen, dass es ein massives Bedürfnis nach Daten gibt, um für eine Verkehrswende zu kämpfen.

Im letzten Blogpost habe ich beschrieben, wie sich 3D-Gebäudemodelle in QGIS visualisieren lassen. Da ich in Verbindung mit dem Thema Fernerkundung auf Parkplätze und räumliche Nutzungen angesprochen wurde, kam ich auf die Idee, dass eine Karte, in der die Aufteilung des Straßenraums - in diesem Fall in Kiel - ein gutes karten- und datenbasiertes Werkzeug im Kampf für eine Verkehrswende sein kann. In Verbindung mit den 3D-Gebäudemodellen lässt sich im besten Fall eine Online-Karte erstellen, mit der sich die Straßenräume in 3D erkunden lassen und sich bspw. untersuchen lässt, wie viel Platz für den motorisierten Individualverkehr und für Rad- und Fußverkehr zur Verfügung steht.

Zu sehen ist eine Visualisierung von Straßenzügen und Gebäuden. Die Gebäude sind graue Blöcke, die Straßen sind bunt, entsprechend der Aufteilung des Straßenraums. Blick auf die Straße Radbruchstraße in Kiel.

Mittels offenen Daten und open-source Software lässt sich eine entsprechende Online-Karte erstellen. In diesem Blogpost zeige ich, welche Daten und welche (Software-)Komponenten benötigt werden, um eine einfache Online-Karte zu erstellen.

Die Karte lässt sich hier aufrufen: https://geodaten-guerilla.net/beta/

Die Karte lässt sich mittels Rechtsklick verschieben. Mit dem Mausrad oder den Navigationsbuttons oben rechts lässt sich in die Karte rein- und rauszommen. Mit Rechtsklick lässt sich der Blickwinkel und die Blickrichtung ändern, sodass eine 3D-Ansicht möglich ist.

Geodaten

Für diese Online-Karte benötigen wir vor allem Geodaten. Zum einen Daten zur Aufteilung des Straßenraums, zum anderen die 3D-Gebäudemodelle inklusive Hintergrundkarte. Diese Online-Karte wird nicht auf Fernerkundungs-/Satellitendaten basieren, da mir hierfür keine ausreichend hoch aufgelösten Daten zur Verfügung stehen und ich bereits am Anfang meiner Recherche davon ausgegangen bin, dass amtliche Stellen entsprechende Daten vorhalten.

Straßenraum

Bevor wir uns mit der Erstellung der Karte auseinandersetzen, benötigen wir zunächst Geodaten zur Straßenraumaufteilung. Die Landeshauptstadt Kiel besitzt zum Glück solche Daten. Diese wollte sie nach einer ersten Mailanfrage nicht herausgeben, aber nach einer Anfrage auf FragDenStaat hat die Stadt Kiel diese zur Verfügung gestellt. Seitdem finden sich die Daten als OpenData mit dem Layernamen "Strassenbestandsflaechen" in den WMS- und WFS-Servern der Stadt.
WMS: https://ims.kiel.de/geodatenextern/services/Stadtplan/StadtplanKielDe/MapServer/WMSServer?request=getcapabilities&service=wms
WFS: https://ims.kiel.de/geodatenextern/services/Stadtplan/LHKielWmsWfs/MapServer/WfsServer?request=getcapabilities&service=wfs

Das besondere an der Stelle ist, dass die Lizenzbedingungen explizit eine Nutzung der Geodaten für OpenStreetMap (OSM) erlauben. Voraussetzung ist eine Nennung der Landeshauptstadt Kiel in der Liste der Beitragenden. Dies ist mittlerweile im OpenStreetMap-Wiki erfolgt. Das bedeutet, dass die Daten nicht nur für dieses Projekt unter den Bedingungen der Lizenz CC BY 4.0, sondern auch für die Erweiterung von OSM-Datenbank genutzt werden können.

Da die Straßenbestandsflächen via WMS-/WFS-Server zur Verfügung stehen, können wir diese später direkt in unsere Online-Karte einbinden. Ich gehe allerdings noch den Umweg, für den Datensatz einen eigenen Style in QGIS zu erstellen und mittels meinem selbstbetriebenen QGIS-Server in die Karte als WMS einzubinden. Der Style ist oben im Screenshot sehen. Der komplette Datensatz mit dem von mir erstellten Style lässt sich unter Downloads als GeoPackage herunterladen.

Datenqualität

Bei der Betrachtung der Daten zur Straßenraumaufteilung und dem Vergleich mit der Realität fällt auf, dass die Daten nur darstellen, als was die jeweiligen Flächen offiziell ausgewiesen/"gewidmet" sind. Wenn bspw. am Straßenrand geparkt werden darf, aber nicht explizit an dieser Straße Parkflächen ausgewiesen sind, dann findet sich in den Daten nur eine Fahrbahn, aber keine Parkflächen an dieser Stelle. Ein anderes Beispiel sind Fahrradstraßen, in denen auch Kfz-Verlehr zugelassen ist. Diese sind auch nur als Fahrbahnen ausgewiesen. Die Daten sollten also mit Vorsicht behandelt werden, geben aber dennoch gut die Verhältnisse wieder, welcher Verkehrsträger in welchem Ausmaß Platz erhält.

Hintergrundkarte

Zusätzlich benötigen wir für die Online-Karte noch eine Hintergrundkarte und 3D-Gebäudemodelle. Die 3D-Gebäudemodelle bringen unsere einfache Karte zunächst in die dritte Dimension. Im letzten Blogpost habe ich bereits beschrieben, wie sich 3D-Gebäudemodelle in QGIS visualisieren lassen, zunächst werden wir diese Gebäudemodelle aber nicht nutzen. Mit der basemap.de existiert ein Projekt, mit dem sich amtliche Geodaten als Hintergrundkarten, inklusive 3D-Gebäudemodelle, in Online-Karten einbinden lassen. Leider sind die Gebäude nur im LoD1-Format vorhanden, wodurch diese nur als Blöcke visualisiert werden. Aber für unsere einfache Karte reicht dies zunächst aus.

Es wird zwar eine Beta mit LoD2-Gebäuden von basemap.de angeboten, in dieser fehlen allerdings die Gebäude in Schleswig-Holstein.

Zuletzt sei noch erwähnt, dass sich die basemap.de als VectorTiles in Karten einbinden lässt. Das erlaubt uns, den Style anzupassen. Im Fall der basemap.de sind die die Gebäudemodelle leicht durchsichtig, was in meinen Augen irritierend sein kann. Mit Maputnik gibt es einen open-source Editor, der eine Anpassung des Styles ermöglicht. Dafür muss mensch oben in der Leiste auf "Open" klicken. Obere Steuerungsleiste von Maputnik Darauffhin öffnet sich ein Fenster, in dem sich der Link zum Style der basemap.de eingeben lässt. Der Style, den wir anpassen wollen hat folgenden Link: https://sgx.geodatenzentrum.de/gdz_basemapde_vektor/styles/bm_web_col.json

Zu sehen ist der Open-Dialog von Maputnik. Onem lässt sich eine Datei mittels Upload-Button hochlagen, darunter ist ein Feld, in dem sich ein Link zu einem Style laden lässt. Darunter ist eine Galerie mit vorgefertigten Styles, die sich auswählen lassen, zu finden.

Wenn der Style geladen ist, erscheint links ein umfangreiches Menü, den Style anzupassen. Rechts in der Kartenansicht lassen sich die Auswirkungen der Anpassungen beobachten.

Links sind viele Schaltflächen zu sehen, mit denen sich der Style von VectorTiles bearbeiten lässt. Rechts ist eine Karte zu sehen, in dem Gebäude als Blöcke dargestellt werden.

Ist der Style fertig angepasst, muss nur noch auf Export und dann auf Download Style geklickt werden. Als Ergebnis erhalten wir eine json-Datei, die sich dann in die Karte einbinden lässt. Meine angepasste json-Datei für die basemap.de ist hier zu finden: https://geodaten-guerilla.net/downloads/Strassenraumaufteilung-Kiel/basemap_de/basemap-de-angepasster-style-3d-gebaeude.json. In diesem Style sind die 3D-Gebäudemodelle nicht mehr durchsichtig.

Kartenanwendung

Da wir die nun alle Daten beisammen haben, wird es Zeit, die Kartenanwendung zu bauen. Um Online-Karten zu erstellen, gibt es open-source Bibliotheken wie OpenLayers, Leaflet oder MapLibre. Ich habe mich in diesem Fall für MapLibre entschieden.

Für MapLibre gibt es eine Dokumentation, die auch verschiedene Code-Beispiele enthält.

Eine Erfahrung, die ich in der Arbeit mit verschiedenen, auf MapLibre basierenden Tools gemacht habe, ist, dass es sinnvoll ist, möglichst alle Daten, die mensch einbinden will, auf externe Dienste auszulagern und nicht als geojson-Datei einzubinden. Denn bei großen Dateigrößen dauert das Laden der Karte sehr lange oder die Karte wird gar nicht erst geladen.

Die Karte initialisieren wir einfach mit dem folgenden Code. Dieser basiert auf dem Dokumentations-Beispiel zur Einbindung von WMS-Services.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Straßenraumaufteilung in Kiel</title>
<meta property="og:description" content="Add an external Web Map Service raster layer to the map using addSource's tiles option." />
<meta charset='utf-8'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel='stylesheet' href='https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css' />
<script src='https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js'></script>
<style>
body { margin: 0; padding: 0; }
html, body, #map { height: 100%; }
</style>
</head>
<body>
<div>
<a href="https://maplibre.org/">MapLibre</a> <b>|</b> © GeoBasis-DE / <a href="https://www.bkg.bund.de">BKG</a> 2024 <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> (Style angepasst) | Landeshauptstadt Kiel CC-BY-4.0 <b>|</b> <a href="https://geodaten-guerilla.net/impressum">Impressum</a> | <a href="https://geodaten-guerilla.net/datenschutzerklaerung">Datenschutz</a>
</div>
<div id="map"></div>
<script>
const map = new maplibregl.Map({
container: 'map',
style: 'https://geowebdienste.geodaten-guerilla.net/downloads/basemap-de-angepasster-style-3d-gebaeude.json',
zoom: 13,
center: [10.131885, 54.315275], // Zentriert auf Kiel
attributionControl: false,
maxPitch: 85,
});

map.addControl(new maplibregl.NavigationControl());

map.on('load', () => {
map.addSource('wms-test-source', {
'type': 'raster',
// use the tiles option to specify a WMS tile source URL
// https://maplibre.org/maplibre-style-spec/sources/
'tiles': [
'https://geowebdienste.geodaten-guerilla.net/qgisserver?MAP=/opt/owsprojects/strassenbestandsflaechen-wms/strassenbestandsflaechen-wms.qgs&bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&transparent=true&width=256&height=256&layers=strassenbestandsflaechen'
],
'tileSize': 256,
});
map.addLayer(
{
'id': 'wms-test-layer',
'type': 'raster',
'source': 'wms-test-source',
'paint': {}
},
);
});
</script>
</body>
</html>

In der Zeile style ist die Hintergrundkarte mit dem angepassten Style eingebunden.

const map = new maplibregl.Map({
container: 'map',
style: 'https://geowebdienste.geodaten-guerilla.net/downloads/basemap-de-angepasster-style-3d-gebaeude.json',
zoom: 13,
center: [10.131885, 54.315275], // Zentriert auf Kiel
attributionControl: false,
maxPitch: 85,
});

Mittels map.addControl werden Navigationsbuttons angezeigt.

map.addControl(new maplibregl.NavigationControl());

Die Quellenangaben werden erstmal mit einem einfachen div angezeigt. MapLibre bietet eine eigene Funktion an, Quellenangaben anzuzeigen, diese verwenden wir aber erstmal nicht.

<div>
<a href="https://maplibre.org/">MapLibre</a> <b>|</b> © GeoBasis-DE / <a href="https://www.bkg.bund.de">BKG</a> 2024 <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> (Style angepasst) | Landeshauptstadt Kiel CC-BY-4.0 <b>|</b> <a href="https://geodaten-guerilla.net/impressum">Impressum</a> | <a href="https://geodaten-guerilla.net/datenschutzerklaerung">Datenschutz</a>
</div>

Die Straßenraumaufteilung wird über den WMS-Server eingebunden, der meinen eigenen Style enthält.

    map.on('load', () => {
map.addSource('wms-test-source', {
'type': 'raster',
// use the tiles option to specify a WMS tile source URL
// https://maplibre.org/maplibre-style-spec/sources/
'tiles': [
'https://geowebdienste.geodaten-guerilla.net/qgisserver?MAP=/opt/owsprojects/strassenbestandsflaechen-wms/strassenbestandsflaechen-wms.qgs&bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&transparent=true&width=256&height=256&layers=strassenbestandsflaechen'
],
'tileSize': 256,
});
map.addLayer(
{
'id': 'wms-test-layer',
'type': 'raster',
'source': 'wms-test-source',
'paint': {}
},
);
});

Mit diesem einfachen Code-Schnipsel haben wir mit MapLibre eine funktionierende, einfache Kartenanwendung gebaut, in der sich die Straßenraumaufteilung in einer 3D-Umgebung untersuchen lässt.

Tileserver

Auch wenn wir jetzt eine funktionierende Kartenanwendung haben, in der Daten mittels WMS eingebunden werden, möchte ich noch die Installation und Verwendung eines Tileservers erklären. Es ist nämlich sinnvoll, alle Daten extern mit Services wie WMS oder VectorTiles einzubinden, da es bei großen Datenmengen, die als Dateien direkt in die Kartenanwendung eingebunden werden, dauern kann, bis die Kartenanwendung vollständig lädt. Außerdem kann eine flüssige Bedienung der Kartenanwendung dabei unmöglich werden. VectorTiles haben den Vorteil, dass das Datenformat für die schnelle Übertragung über das Internet optimiert ist.

Es gibt verschiedene open-source Software-Lösungen für Tileserver. Ich habe mich für mbtileserver entschieden, da es sehr einfach zu installieren und zu betreiben ist.

mbtileserver

Nach der Installation von mbtileserver lässt sich dieser mit einem einfachen Befehl im Ordner, wo es installiert wurde, starten: ./mbtileserver -d /path/to/mbtiles --enable-fs-watch --root-url /tileserver --generate-ids.
Mit diesem Befehl beobachtet mbtileserver Veränderungen im Ablageordner, ist via /tileserver aufrufbar und, um die Ordnerstruktur nicht nach außen zu leaken, wird die URL IDs statt den Dateipfad enthalten.

Wenn mbtileserver gestartet ist, lässt sich im Browser unter url/tileserver eine JSON-Ansicht aufrufen, in der sich alle VectorTiles, die mbtileserver zur Verfügung stellen kann, auffinden lassen.

Es ist die JSON-Ansicht von Firefox zu sehen. In der Mitte ist eine URL markiert, die zu der Detailansicht des VectorTile führt.

Wenn mensch auf die URL klickt, erscheint eine Detailansicht des Vectortiles mit seinen Eigenschaften, Layern und Attributen.

mbtileserver-detailansicht.png

In dieser Detailansicht ist der Link unter tiles → 0 der entscheidende. Diesen können wir nutzen, um die VectorTiles in QGIS oder unserer Kartenanwendung einzubinden. Allerdings werden wir dann noch keinen Style in der Karte für die VectorTiles haben. Aber auch hierfür können wir Maputnik nutzen, um einen Style zu erstellen. Die Detailansicht von mbtiles können wir nämlich einfach als JSON-Datei herunterladen (strg+s drücken) und in Maputnik hochladen.

Konvertierung zu mbtiles

Damit mbtileserver oder andere Tileserver VectorTiles zur Verfügung stellen können, müssen die entsprechenden Geodaten zunächst in das mbtiles-Dateiformat konvertiert werden. Hierfür gibt es mehrere open-source Tools:

  • QGIS - Als weit verbreitetes open-source GIS beherrscht QGIS die Funktion, Geodaten in mbtiles zu konvertieren. Laut meiner Erfahrung braucht QGIS allerdings sehr lange bei großen Datenmengen dafür. Darum empfehle ich es an der Stelle nicht.
  • GDAL - Auch GDAL besitzt eine entsprechende Konvertierungsfunktion. Diese lässt sich mittels ogr2ogr -f MBTILES target.mbtiles source.gpkg -dsco MAXZOOM=10 nutzen.
  • tippecanoe - Hierbei handelt es sich um einen gepflegten Fork der gleichnamigen Mapbox-Anwendung. tippecanoe erstellt die mbtiles aus GeoJSON-Dateien.

Ich habe mich am Ende für tippecanoe entschieden, da ich das Konvertierungsergebnis als am besten empfand. Genutzt habe ich folgendenen Befehl zum Konvertieren:
tippecanoe --force -Z 12 -zg -o strassenbestandsflaechen.mbtiles --extend-zooms-if-still-dropping *.geojson

  • The -zg option will make Tippecanoe choose a maximum zoom level that should be high enough to reflect the precision of the original data.
  • -f or --force: Delete the mbtiles file if it already exists instead of giving an error
  • -Z zoom or --minimum-zoom= zoom: Minzoom: the lowest zoom level for which tiles are generated (default 0)

Die genutzten Parameter sind im tippecanoe-Repository dokumentiert. Wichtig an der Stelle zu wissen ist, dass tippecanoe EPSG:4326 bei den Eingangsdaten erwartet.

Fazit

Mit der nun fertigen Online-Karte haben wir eine zwar erstmal einfache Karte, aber mit ihr können wir für die ganze Stadt Kiel visualisieren, wie die Straßenräume aufgeteilt sind. Damit wird es möglich, datenbasiert die politischen Diskussionen zu führen, wie der Raum in der Stadt aufgeteilt ist und aufgeteilt werden sollte. Damit steht uns ein weiteres Werkzeug im Kampf für die Verkehrswende zur Verfügung.