User:Supaplex030/Anleitung für eine Parkplatzanalyse mit OSM-Daten und QGIS

From OpenStreetMap Wiki
Jump to navigation Jump to search
Parkspuren Richardkiez.png
Visualisierung Parkplatzdichte Heatmap.jpg

Mit einer Parkplatzanalyse habe ich am Beispiel des Berliner Richardkiezes demonstriert, wie OpenStreetMap-Daten zur Zählung und Auswertung von Parkplätzen genutzt werden können. Häufig wissen noch nicht einmal Stadtverwaltungen, wie viele Parkplätze es wo gibt – umso schöner ist es, wenn man sich der Antwort auf diese Frage mit Hilfe von OSM nähern kann.

Die folgende Anleitung beschreibt Schritt für Schritt, wie eine solche Analyse mit OpenStreetMap-Daten und der Software QGIS durchgeführt werden kann. Sie ist so angelegt, dass auch Neueinsteigende damit zurechtkommen sollen. Wer sich schon mit OSM und GIS auskennt, findet eine Kurzfassung am Anfang. (Anmerkung: Der Autor dieser Anleitung hat auch nur QGIS-Grundwissen, daher gibt es an der ein oder anderen Stelle sicher elegantere Wege... Gern bescheid sagen oder hier vermerken.)

Vorraussetzung für diese Parkplatzauswertung ist allerdings, dass Parkplatzdaten in dem Gebiet, in dem die Parkplätze gezählt werden sollen, bereits gut erfasst sind. Das ist bisher (Stand Frühjahr 2020) jedoch leider nur an wenigen Orten der Fall. Eine Parkplatzanalyse kann aber eine gute Gelegenheit sein, diese zu erfassen und in OSM zu ergänzen: Also entweder vor Ort, auf Luftbildern oder bei Mapillary nachzusehen, wie Autos am Straßenrand parken und am besten weitere zum parken geeignete Objekte aufzunehmen. Eine Anleitung dafür kann bei Bedarf nachgereicht werden.

Ob Parkplätze in eurer Gegend schon kartiert sind oder ihr vorher selbst aktiv werden müsst, zeigt z.B. der Parking Lanes Viewer. Dort lassen sich fehlende Parkspuren mit einem OSM-Account auch eintragen.

Kurzfassung

  1. OSM-Daten für Straßen, Einfahrten (highway=service), Parkplätze (ohne Kundenparkplätze, also ohne access=customers), Garagen, Fußgängerüberwege und Bushaltestellen via Overpass oder QGIS-Plugin herunterladen und in QGIS importieren (sowie bei Bedarf evtl. weitere fürs Parken vor Ort relevante Objekte wie Tiefgarageneinfahrten oder Carports).
  2. Daten auf das Wunschgebiet zuschneiden.
  3. Aus dem Straßendatensatz separate Layer für die Parkspuren links und rechts erzeugen, parking:lane:both=* darin auflösen. Halte- und Parkverbote etc. herauslöschen.
  4. Puffer um Bushaltestellen, Fußgängerüberwege, Kreuzungen (= Schnittpunkte von Straßen) und Einfahrten (= Schnittpunkte von Straßen und Einfahrten) ziehen (sowie bei Bedarf um weitere Orte mit Parkbeschränkungen, z.B. Fahrradständer im Fahrbahnbereich, Wendeschleifen, Verkehrsberuhigungen…).
  5. Parkspurlayer in einen Teil außerhalb und einen Teil innerhalb der Puffer aufteilen (Differenz und Verschneidung).
  6. Parkspursegmente innerhalb der Pufferzonen löschen, die tatsächlich nicht zum Parken geeignet sind (gegenüber von Einmündungen ist das Parken z.B. üblicherweise nicht eingeschränkt).
  7. Parkspuren, Straßen, Parkplätze etc. nach Bedarf hübsch darstellen.
  8. Anzahl der Parkplätze aus der Länge der Straßensegmente (bei Parkspuren) bzw. der Größe von Parkplatz- und Garagenflächen extrapolieren (soweit noch nicht in OSM über capacity=* erfasst).
  9. Für eine Heatmap: Parkspuren und -plätze zu Punkteketten umwandeln und z.B. mit uMap darstellen.

Vorbereitung: QGIS installieren und Daten aus OSM herunterladen

QGIS ist ein freies Geoinformationssystem-Programm, mit dem räumliche Daten betrachtet, bearbeitet und ausgewertet werden können. Es kann für alle verbreiteten Betriebssysteme heruntergeladen und anschließend installiert werden. Die hier gezeigten Schritte und Screenshots habe ich nicht mit der aktuellsten Version getestet (sondern mit QGIS 2.18), im Großen und Ganzen müsste es aber auch mit neueren Versionen gleich aussehen.

OpenStreetMap ist eine freie Geodatenbank, deren Daten von einer weltweiten Community zusammengetragen werden. Bekannt ist vielen vor allem die Kartenansicht, die jedoch nur eine kleine Spitze des Eisberges ausmacht. Informationen wie Parkspuren sind hier beispielsweise nicht dargestellt, obwohl sie sich als Eintrag in der Datenbank befinden und auf anderen Wegen genutzt werden können.

Screenshot Overpass-Turbo.png

Eine schnelle und einfache Möglichkeit, bestimmte OSM-Daten anzuzeigen und herunterzuladen, ist Overpass Turbo, die wir gleich nutzen, um alle für unsere Parkplatzanalyse relevanten Daten zu suchen (alternativ gibt es übrigens auch OSM-Plugins für QGIS):

  • (Link) alle Straßen im gewünschten Gebiet, inkl. Parkplatzinformationen (soweit vorhanden!),
  • (Link) Parkplätze (ohne Kundenparkplätze, z.B. bei Supermärkten, die üblicherweise nicht zum längeren Parken geeignet sind),
  • (Link) Garagen,
  • (Link) Einfahrten (vor denen nicht geparkt werden kann).
  • Für Fortgeschrittene: Je nach Gebiet sollten auch Carports, Tiefgarageneinfahrten (soweit die dahinter liegende Tiefgarage nicht schon im Parkplatzlayer enthalten ist!), einzelne Parkplätze (die nicht Teil eines größeren Parkplatzes sind) und andere zum Parken relevante Objekte beachtet werden, soweit vor Ort vorhanden bzw. bei OSM erfasst.

Die aufgeführten Links öffnen Abfrage-Scripte, mit denen die entsprechenden Daten angezeigt werden können: Den gewünschten Kartenausschnitt wählen und oben auf Ausführen klicken. Über Export → Speichere als GeoJSON lassen sich die ausgewählten Elemente herunterladen. Übrigens: Das OpenStreetMap-Wiki verrät, wie Objekte in der OSM-Datenbank codiert sind bzw. erfasst werden.

Daten in QGIS laden und darstellen – QGIS-Grundlagen

Screenshot Datenimport.png

QGIS besteht auf den ersten Blick aus Werkzeugleisten, einer Layer-Liste (links) und einem (anfangs noch leeren) Kartenfenster rechts. Die heruntergeladenen Daten können per Drag-and-Drop in die Layerliste geschoben werden. Falls beim Einladen gefragt wird: Bei Straßen reicht es, die LineStrings (linienhafte Objekte, z.B. keine flächenhafte Stadtplätze) zu importieren. Bei Flächen wie Parkplätzen und Garagen sind dagegen die Polygone interessant; evtl. kann es auch Parkplätze geben, die nur als Punktobjekte (Point) kartiert sind.

Anmerkung: Auf YouTube gibt es einige (auch deutschsprachige) Einstiegs- und Erklärvideos zu QGIS, z.B. auf diesem Kanal.

In der Kartenansicht erscheinen nun die importierten Daten. Möglicherweise sieht alles ein bisschen ungewohnt und verzerrt aus – das liegt am voreingestellten Geo-Koordinatensystem.

Exkurs: Koordinatensysteme

Geo-Koordinatensysteme dienen dazu, Geodaten je nach Lage, Größe und anderen Ansprüchen geeignet darzustellen. Sie sind ein Thema für sich, daher soll hier nicht näher darauf eingegangen werden. Nur soviel: In unserem Fall ist das System WGS84 voreingestellt. Für eine gute Darstellung und einige Berechnungen ist jedoch ein anderes Koordinatensystem von Vorteil, nämlich Gauss-Krüger (zumindest innerhalb von Deutschland – an anderen Orten müsst ihr ein anderes passendes System suchen).

Ein zentraler Vorteil von Gauss-Krüger ist nicht nur, dass die Kartendarstellung hier so aussieht, wie man es in Deutschland gewohnt ist, sondern auch, dass die Referenzeinheit in diesem Koordinatensystem Meter ist (und nicht Grad, wie bei WGS84). Das hilft uns später bei der Datenauswertung (z.B. Puffer im Abstand von ... Meter um Objekte ziehen, Objekte um … Meter verschieben, alle ... Meter einen Punkt erzeugen etc.).

Zum Glück lassen sich die Koordinatensysteme in QGIS ändern bzw. umwandeln: Zunächst für die Kartenansicht ändern über…

  • Projekt → Projekteigenschaften → KBS → Spontanreprojektion aktivieren (SRP)
  • Hier dann Gauss-Krüger auswählen: Oben in der Suche kann danach gesucht werden. Je nach dem, an welchem Ort (in Deutschland) ihr euch befindet, müsst ihr eine passende Zone wählen (siehe Wikipedia). In unserem Fall, Berlin, ist es Zone 4 – an anderen Orten kann es auch Zone 2 (z.B. in Aachen), Zone 3 (z.B. in Bremen oder Stuttgart) oder Zone 5 sein. Zone 4 lässt sich auch über die Nummer „EPSG:31468“ finden.

Nun müssen wir noch die einzelnen, gerade importieren Layer ins richtige Koordinatensystem bringen. Bei dieser Gelegenheit können wir gleich unwichtige Objekt-Informationen löschen. Für den Straßenlayer z.B. dafür:

  • rechts auf den Layernamen klicken und Speichern als… auswählen,
  • als Format wieder GeoJSON wählen,
  • einen passenden Speicherort und Dateinamen wählen (z.B. „straßen_gk“, „gk“ für Gauss-Krüger, im im Zweifelsfall nicht mit den Koordinatensystemen durcheinanderzukommen),
  • bei KBS das passende Gauss-Krüger-System wählen,
  • bei Felder zum Export und deren Exportoptionen wählen zunächst alle abwählen und dann „name“ und, soweit vorhanden, „parking:lane:left“, „parking:lane:right“ und „parking:lane:both“ wieder auswählen. In dieser (vermutlich langen) Liste sind alle Eigenschaften enthalten, die irgendeins der heruntergeladenen OSM-Objekte hat – für uns sind aber eigentlich nur der Straßenname und die Parkplatzinformationen interessant.
  • Den ursprünglich importieren Layer am besten löschen, um den Überblick zu bewahren (Rechtsklick auf den Layer → Entfernen).

Für die anderen Layer genauso verfahren und dabei jeweils, soweit vorhanden, diese Felder übernehmen:

  • bei Parkplätzen: „parking“ und „capacity“,
  • bei Garagen: „capacity“,
  • bei Einfahrten: Eigentlich brauchen wir hier keine weiteren Eigenschaften; aus technischen Gründen ist es aber hilfreich, mindestens ein Feld zu behalten, z.B. „id“ oder „name“.

Exkurs: Objekte und Attribute

In der Kartenansicht sind verschiedene Objekte zu sehen: Straßen als dünne Linien, Parkplätze als Flächen und evtl. auch einzelne Punkte. Während ein Parkplatz meist ein einziges Objekt mit bestimmten Eigenschaften ist (z.B. der Anzahl der Parkplätze dort), kann eine Straße aus mehreren Teilstücken bestehen. Diese Segmente entstehen in OSM, wenn sich Eigenschaften der Straße an einer Stelle ändern (z.B. Straßenbelag, Geschwindigkeitsbegrenzung oder auch Parkplatzinformationen).

Die Eigenschaften der Objekte (z.B. Straßennamen bei unseren Straßen) können über die QGIS Symbol Attributtabelle.png Attributtabelle (oben in der Menüleiste) angezeigt werden.

Daten bearbeiten und auf das passende Gebiet zuschneiden

Schaut die dargestellten Daten genau an und vergleicht sie evtl. noch einmal mit Luftbildern, ob sie plausibel erscheinen. Vielleicht sind z.B. Parkplätze oder Garagen mit in den Datensatz gerutscht, die de facto gar nicht genutzt werden können (soweit ihr das beurteilen könnt).

Screenshot Datenbearbeitung.png

Die Daten liegen noch immer für das gesamte Gebiet vor uns, für das wir sie am Anfang heruntergeladen haben. Falls ihr euch auf einen Ausschnitt davon, z.B. ein klar abgegrenztes Stadtquartier, beschränken wollt, löscht einfach alle Linien, Flächen und Punkte, die außerhalb des gewünschten Gebiets liegen:

  • Um die Daten in QGIS zu bearbeiten, muss der Bearbeitungsmodus angeschaltet werden: Damit weiß das Programm, dass die Daten nicht nur angezeigt, sondern auch verändert werden sollen. Dafür auf den zu bearbeitenden Layer klicken und dann auf das QGIS Symbol Bearbeitungsmodus.png Stiftsymbol oben in der Menüleiste („Bearbeitungsstatus umschalten“).
  • Es erscheinen viele Kreuzchen, die die Stütz- bzw. Eckpunkte der Objekte symbolisieren. Klickt oben im Menü auf das QGIS Symbol Auswahl.png Auswahlwerkzeug („Objekte über Rechteck oder Einzelklick wählen“) und markiert und löscht (Entf-Taste) alle Objekte, die ihr nicht braucht. Tut das auch in den anderen Layern. Zur besseren Übersicht könnt ihr auch die jeweils anderen Layer ausblenden (Häkchen vor dem Layer).
  • Den QGIS Symbol Bearbeitungsmodus.png Bearbeitungsmodus könnt ihr am Ende wieder ausschalten und den Layer dabei speichern.

Parkspuren-Layer vorbereiten

Um die Parkspuren darzustellen und zu zählen, müssen diese zunächst aus dem Straßenlayer erzeugt werden, in dem der Straßenlayer in drei separate Layer aufgeteilt wird:

  • einen zur Darstellung aller Straßen an sich,
  • einen zur Darstellung aller Parkspuren auf der linken Straßenseite (also links von der Linienrichtung des Linienobjekts in OpenStreetMap aus gesehen),
  • einen zur Darstellung aller Parkspuren auf der rechten Straßenseite.

Dafür den Straßenlayer zweimal neu abspeichern: Einmal für die linke, einmal für die rechte Parkspur: Rechtsklick auf den Straßenlayer → Speichern als, einen passenden Speicherort und Dateinamen wählen sowie auf Gauss-Krüger achten.

In der OSM-Datenbank liegen die Parkspurinformationen in drei Formen vor: Jede Linie kann die Eigenschaften „parking:lane:left“ und „parking:lane:right“ enthalten oder alternativ „parking:lane:both“, wenn auf beiden Seiten die gleichen Regeln fürs Parken gelten. Mögliche Werte solcher Parkspurinformationen sind z.B., ob Fahrzeuge längs („parallel“), schräg („diagonal“) oder quer („perpendicular“) zur Straße parken dürfen, oder auch, dass hier ein Park- oder Halteverbot („no_parking“ oder „no_stopping“) herrscht.

Wahrscheinlich befinden sich in unserem Datensatz sowohl Straßensegmente, auf denen auf beiden Seiten die gleichen Parkregeln gelten (also mit dem Attribut „parking:lane:both“), als auch Segmente, auf denen für beide Seiten verschiedene Regeln angegeben sind („parking:lane:left“ und „parking:lane:right“). Es wäre übersichtlicher, wenn jedes Parkspurobjekt nur noch ein passendes Merkmal trägt: Daher führen wir die „beidseitigen“ Angaben nun jeweils mit denen zur linken bzw. rechten Parkspur zusammen, in dem wir eine neue Spalte erstellen und diese mit den bestehenden Werten befüllen. Das können wir mit dem QGIS Symbol Feldrechner.png Feldrechner bewerkstelligen. In unserem Fall erstellen wir einfach eine neue Parkinformations-Spalte und befüllen diese automatisch: Entweder mit dem Wert für die jeweilige Straßenseite, oder – wenn dieser nicht vorhanden ist – mit dem Wert für beidseitiges Parken:

  • Screenshot Feldrechner parking.png
    Den QGIS Symbol Feldrechner.png Feldrechner (in der Menüleiste oben) öffnen und ein neues Feld z.B. mit dem Namen „parking“ anlegen (siehe auch die nebenstehende Abbildung).
  • Als Ausgabefeldtyp „Text (string)“ mit einer Ausgabefeldlänge von 20 auswählen.
  • Im Feld Ausdruck kann eine Formel eingegeben werden, um das neue Feld zu füllen:
    • im linken Parklayer dafür if("parking:lane:left", "parking:lane:left", "parking:lane:both") eingeben,
    • im rechten Parklayer dagegen if("parking:lane:right", "parking:lane:right", "parking:lane:both"). Diese Ausdrücke prüfen jeweils, ob eine Information zum Parken auf der entsprechenden Straßenseite vorliegt: Wenn ja, dann wird dieser in die neue Spalte übernommen, wenn nicht, wird der Wert für beidseitiges Parken genutzt.
  • Durch klick auf OK wird die Berechnung ausgeführt und dabei der Bearbeitungsmodus automatisch angeschaltet.
  • Die alten „parking:lane...“-Einträge benötigen wir nicht mehr, da diese ja nun in dem neuen „parking“-Eintrag vereinigt wurden. Sie können mit Rechtsklick auf den Parkspurlayer → Eigenschaften → Felder markiert und QGIS Symbol Spalte löschen.png gelöscht werden – so bleibt die Attributtabelle übersichtlich.
  • Diese Schritte sowohl für den rechten als auch den linken Parkspurlayer durchführen.

Die beiden Parkspurlayer enthalten noch immer zahlreiche Werte, die nicht für eine bestimmte Parkplatz-Ausrichtung stehen (längs, schräg oder quer zur Fahrbahn), sondern z.B. ein Park- oder Halteverbot ausdrücken. Da wir nur die Parkplätze zählen möchten, können wir alle anderen Werte löschen:

  • QGIS Symbol Attributtabelle.png Attributtabelle öffnen,
  • oben auf den Spaltenkopf mit dem „parking“-Attribut klicken, um die Einträge alphabetisch zu sortieren,
  • durch klicken und ziehen in der ersten (nummerierten) Spalte alle Einträge markieren, die keinem der folgenden Werte entsprechen (auch leere Felder) und durch klick auf QGIS Symbol Löschen.png Gewählte Objekte löschen. Behalten müssen wir, soweit vorhanden:
    • „parallel“, „diagonal“ und „perpendicular“ (also Straßenabschnitte, an denen längs-, schräg- oder quergeparkt wird),
    • evtl. „marked“ (für speziell markierte Parkplätze), wobei dieser in meinem Beispiel nicht auftrat.
  • Diese Schritte für den anderen Parkspurlayer wiederholen. Der QGIS Symbol Bearbeitungsmodus.png Bearbeitungsmodus kann in beiden Layern anschließend wieder ausgeschaltet werden.

Daten passend darstellen #1: Straßen und Parkplätze

Screenshot Parkspuren provisorisch.png

Nun können die Daten noch hübscher dargestellt werden. Die nebenstehende Abbildung nutzt etwa die folgenden Einstellungen: (Rechtsklick auf den entsprechenden Layer → Eigenschaften → Stil)

Der Straßenlayer vom Anfang soll einfach nur der Visualisierung der Straßen dienen.

  • Einheit: Karteneinheiten auswählen (dann verändert sich die Linienbreite je nach Zoomstufe und entspricht, je nach Einstellung, etwa der tatsächlichen Größe in der Realität),
  • Farbe: Grau, z.B. #d8d8d8,
  • Breite: 6 (gemeint sind Meter, entspricht etwa einer breiten zweispurigen Straße),
  • Als Endstil bietet sich außerdem „Rund“ an, damit an manchen Straßeneinmündungen keine überragenden Ecken entstehen.

Er kann außerdem noch beschriftet werden, in meinem Beispiel so:

  • Rechtsklick auf den Straßenlayer → Eigenschaften → Beschriftungen,
  • oben Diesen Layer beschriften auswählen und Beschriften mit „name“,
  • gewünschte Textformatierung einstellen (in meinem Beispiel eine unauffällige, kleine (in Karteneinheiten gemessene), fette weiße Schrift),
  • unter Platzierung am besten Gebogen und Auf Linie wählen, um sie in der Straßenmitte zu zentrieren und entlang von Kurven darzustellen.

Einfahrten sind in meinem Beispiel etwas schmaler und heller zu sehen, z.B. 4 Meter (Karteneinheiten) breit mit der Farbe #ececec.

Parkplätze habe ich in dunkelblauer Füllung (#0622ac) gehalten, außerdem bei Rahmen „Transparenter Rand“ ausgewählt (sowie bei Bedarf noch einen Füllstil). Ähnlich bei den Garagen.

Da wir die beiden Parkspuren vor der finalen Darstellung noch weiter bearbeiten müssen, eignet sich zunächst eine provisorische Darstellungsform wie die folgende:

  • Breite: 2,2 Karteneinheiten (entspricht etwa der Breite eines Autos), Farbe #0622ac.
  • Verbindungsstil „Eckig“ und Endstil „Flach“, damit die Linien nicht über ihre tatsächliche Ausdehnung hinaus dargestellt werden.
  • Da unsere Parkspur-Linien geometrisch noch immer in der Straßenmitte verlaufen (und eine geometrische Verschiebung für die Darstellung nicht nötig ist), müssen wir einen Versatz einstellen, damit die Parkspur-Darstellung links bzw. rechts neben der Straße verläuft. Beim linken Parkspurlayer hier -4,1 Karteneinheiten einstellen, beim rechten 4,1 (entspricht einer halben Straßebreite plus der halben Strichbreite der Parkspur: 3 + 1,1).

Nun erscheinen die Parkspur-Layer in der Kartenansicht rechts bzw. links der Straße – allerdings ragen die Parkspuren noch in die Kreuzungen hinein und „blockieren“ Einfahren. Da hier in der Realität jedoch nicht geparkt werden kann (und wir an diesen Stellen später auch keine Parkplätze zählen möchten), müssen wir die Parkspuren hier kürzen.

Daten in QGIS bearbeiten – Geometrie- und Analysewerkzeuge

In QGIS gibt es neben dem markieren und löschen von Objekten natürlich viele weitere Bearbeitungsmöglichkeiten von Geodaten. Mit Geometriewerkzeugen lassen sich beispielsweise (wie beim Plätzchen backen) Flächen aus anderen Flächen herausstanzen, Objekte zusammenführen oder voneinander trennen usw. Mit einigen dieser Werkzeuge können wir unsere Parkspuren nun weiter bearbeiten: Im Folgenden geht es darum, für das Parken einschränkende Orte wie Kreuzungen, Einfahrten oder Bushaltestellen zu finden, jeweils einen passenden Umkreis zu definieren, in dem das Parken nicht gestattet ist und diesen Umkreis dann in der Darstellung der Parkplatzlayer zu berücksichtigen, in dem die Parkspuren dort entfernt werden.

Kreuzungen und andere Beschränkungen ermitteln

Kreuzungen sind Schnittpunkte von Straßen(linien), was wir in QGIS nutzen können, um Kreuzungen automatisch zu erkennen. Damit sind wir bereits beim ersten Werkzeug: Schnittpunkte ermitteln.

Da wir zu Beginn unseren Straßenlayer auf das Wunschgebiet zugeschnitten haben, sich aber üblicherweise auch am Rand des Gebietes Kreuzungen befinden (also am Ende der Straßen, die aus dem Gebiet hinausführen), müssen wir noch einmal per Drag-and-Drop die GeoJSON-Datei (bzw. die darin enthaltenen LineStrings, siehe oben) mit Straßen im Umfeld importieren. Diesen „originalen“ Straßenlayer können wir mit sich selbst auf Schnittpunkte prüften: Vektor → Analyse-Werkzeuge → Linienschnittpunkte → dann zweimal den Straßenlayer auswählen und mit OK bestätigen.

Hinweis: Wird hier keine Datei/Dateipfad zum Abspeichern angegeben, wird zunächst nur ein temporärer Layer erzeugt. Wird QGIS zwischendurch jedoch beendet, sind diese Layer – selbst wenn ihr das Kartenprojekt vorher gespeichert habt – beim Neustarten verloren bzw. leer! Solltet ihr QGIS also zwischendurch einmal beenden, sollten temporäre Layer wie diese zuvor abgespeichert werden oder bereits jetzt, wenn sie erzeugt werden, eine Datei/ein Dateipfad angegeben werden.

Es erscheinen wahrscheinlich deutlich mehr Punkte, als es Kreuzungen gibt. Das liegt an dem bereits erwähnten Umstand, da viele Straßen in OSM aus mehreren Teilstücken bestehen – und die Übergänge aller Teilstücke nun ebenfalls als Schnittpunkte erkannt wurden.

Nachtrag – Lösung dafür: Straßenzüge vorher zusammenführen: Vektor → Geometrie-Werkzeuge → Ein- zu mehrteilig und als Eindeutiges Schlüsselfeld "name" auswählen.

Uns bleibt nichts anderes übrig, als alle Punkte von Hand zu löschen, die keine Kreuzungspunkte darstellen (was wir mit dem darunter liegenden Straßenlayer ja leicht erkennen können):

  • QGIS Symbol Bearbeitungsmodus.png Bearbeitungsmodus → QGIS Symbol Auswahl.png Objekte über Rechteck oder Einzelklick wählen → Entf-Taste,
  • sowie bei Bedarf alle Punkte außerhalb des Untersuchungsgebiets.
  • Den neuen Schnittpunkt-Layer können wir nun an passender Stelle abspeichern (Rechtsklick → Speichern als… →, z.B. mit dem Namen „Kreuzungen“, und an Gauss-Krüger denken!)…
  • …und den zwischenzeitlich re-importierten originalen Straßenlayer sowie den temporären Schnittpunktlayer anschließend wieder löschen.

QGIS-Profis kennen nicht nur dafür bestimmt elegantere Wege. Eine einfachere Variante könnte es evtl. sein, die Layerobjekte vorher zusammenzuführen, sodass wirklich nur die Kreuzungspunkte übrigbleiben, aber für meine Zwecke war das beschriebene Vorgehen ausreichend.

Auf ähnliche Weise ermitteln wir die Punkte, an denen Einfahrten in unser Straßennetz münden: Vektor → Analyse-Werkzeuge → Linienschnittpunkte → und hier dann den (reduzierten) Straßen- und den Einfahrtenlayer auswählen. Ebenfalls im Gauss-Krüger-System abspeichern und temporären Punktelayer entfernen.

Auch wenn es auf den ersten Blick nicht zu sehen ist, befinden sich an einigen Stellen nun mehrere Punkte an exakt der gleichen Position (da QGIS mehrere Schnittpunkte an gleicher Stelle ermittelt hat, wenn sich mehrere Linien am gleichen Punkt treffen). Um uns später Arbeit zu ersparen, sollten wir diese mehrfachen, positionsgleichen Punkte mit einem Trick entfernen:

  • Zunächst den QGIS Symbol Feldrechner.png Feldrechner öffnen und ein neues Feld mit dem Typ „Dezimalzahl (real)“ und einer Genauigkeit von etwa 5 anlegen, z.B. mit dem Namen „pos“.
  • Als Formel im Ausdrucks-Fenster geben wir $x + $y ein: Damit wird für jeden Punkt eine Summe aus seiner X- und seiner Y-Koordinate gebildet, die mit sehr hoher Wahrscheinlichkeit nur bei positionsgleichen Punkten identisch ist und uns gleich bei der Identifikation dieser überlappenden Punkte hilft.
  • Über Vektor → Geometrie-Werkzeuge → Ein- zu mehrteilig können wir die Punkte vereinigen: Als Eingabelayer unsere Kreuzungspunkte wählen und als Eindeutiges Schlüsselfeld die soeben berechnete Variable.
  • Ausführen und den neuen Layer so umbenennen, dass wir den Überblick bewahren (z.B. „Mehrteilig kreuzungen“) – der alte Kreuzungs-Layer kann gelöscht werden.
  • Diese Schritte für den Einfahrten-Layer wiederholen, da auch hier mehrfache Schnittpunkte vorkommen können.
Screenshot Kreuzungspunkte.png

Weitere Objekte, die Parkbeschränkungen nach sich ziehen, müssen wir nun noch einmal aus der OSM-Datenbank herunterladen und wie bereits beschrieben importieren, auf das Untersuchungsgebiet reduzieren und im Gauss-Krüger-Koordinatensystem abspeichern. In meinem Beispiel sind das:

  • (Link) Bushaltestellen.
  • (Link) Fußgängerüberwege.
  • (Link) In meinem Untersuchungsraum gibt es außerdem noch Fahrradständer im Fahrbahnbereich, die jedoch – zumindest zur Zeit noch – an anderen Orten kaum kartiert sind.

Ermittelte Parkbeschränkungen über kreisförmige Puffer markieren

Die gerade ermittelten bzw. importierten Punkte sind Orte, an denen wir davon ausgehen, dass in einem bestimmten Umkreis nicht geparkt werden kann. Diesen Umkreis können wir in QGIS über kreisrunde „Puffer“ sichtbar machen und von den Parkspur-Linien abziehen. Vorraussetzung ist, dass die Punktelayer – wie beschrieben – im Gauss-Krüger-Koordinatensystem vorliegen, da wir die Umkreise in Metern angeben wollen (wer beim Abspeichern im richtigen Koordinatensystem etwas falsch gemacht hat, bekommt riesige eiförmige Puffer – zur Fehlerbehebung siehe oben bzw. auch dieses QGIS-Puffer-Erklärvideo bei YouTube.)

Die Puffer ziehen wir über Vektor → Geoverarbeitungswerkzeuge → Puffer festen Abstands mit dem jeweils passenden Eingabelayer und diesen Abständen (Achtung: Bei Segmente eine hohe Zahl wie „50“ eingeben, damit ein Kreis entsteht):

  • Kreuzungen: Laut StVO ist zum Schnittpunkt der Fahrbahnkanten ein Abstand von 5 Metern einzuhalten. Der Puffer ist also so breit wie die Straße + 10 Meter (2 x 5 Meter auf jeder Seite). In meinem Beispiel handelt es sich überall um Wohnstraßen, die ähnlich breit waren, daher habe ich der Einfachheit halber (an Stichproben auf Luftbildern nachgemessen) eine generelle Breite von 8 Metern angenommen. Der Puffer misst dann also 8 + 5 +5 = 18 Meter im Durchmesser. Für den Puffer in QGIS wird jedoch ein Radius angegeben: Also halber Durchmesser = 9 Meter. (Anmerkung für Fortgeschrittene: Die neue StVO-Novelle beinhaltet u.a. größere Abstandsregelungen an Kreuzungen, wenn dort ein Radweg verläuft – kann zukünftig ebenfalls berücksichtigt werden.)
  • Einfahrten: Laut StVO muss die Ein- und Ausfahrt möglich sein, was etwa einer Lücke von 3 bis 6 Metern entspricht. In meinem Beispiel habe ich 4 Meter angenommen, also ein Radius von 2 Metern.
  • Fußgängerüberwege: Im Fall Neukölln sind viele Überwege durch Markierungen oder Gehwegvorstreckungen am Fahrbahnrand definiert, eine einheitliche Größe ist hier schwieriger anzunehmen. In meinem Fall habe ich an einigen Stellen auf Luftbildern nachgemessen und bin auf eine mittlere Länge von 4 Metern (Pufferradius 2 Meter) gekommen.
  • Bushaltestellen: Der Radius ist hier klar über die StVO mit 15 Metern definiert (vor Ort oft auch durch Halteverbotsschilder in diesem Abstand gekennzeichnet).

Bei Parkplatzanalysen an anderen Orten können unter Umständen weitere Regeln eine Rolle spielen, z.B. zum Parken in Wendeschleifen. Regeln und Abstände zum Parken sind u.a. auf der Website des ADAC aufgelistet.

Screenshot Puffer.png

Um das weitere Vorgehen zu vereinfachen, lohnt es sich, alle Puffer in einem einzelnen Layer geometrisch (unter Berücksichtigung von Überlappungen) zu vereinigen: Vektor → Geoverarbeitungswerkzeuge → Vereinigungen und dann zunächst zwei unserer Puffer-Layer zusammenführen. Den dabei neu erzeugten Pufferlayer wiederum mit einem der übrigen Einzelpuffer-Layer zusammenführen und so weiter, bis alle Pufferzonen in einem Gesamtlayer vereinigt sind, mit dem wir nun weiterarbeiten können.

Um den Überblick bei den Layern zu bewahren, können die restlichen Pufferlayer und die Punktelayer anschließend entfernt werden, da wir sie nicht mehr brauchen. Alternativ können sie in einer eigenen Layergruppe „versteckt“ werden: Rechtsklick irgendwo ins Layerfenster → Gruppe hinzufügen und die Punkte und Puffer dort hineinschieben und ausblenden.

Puffer auf der richtigen Straßenseite „ausstanzen“

Unsere Pufferkreise bilden Parkbeschränkungen ab, die häufig nur auf einer Straßenseite gelten: An einer T-Kreuzung oder Einfahrt kann man beispielsweise gegenüber der Einmündung parken, nur im Bereich der Einfahrt selbst ist es nicht möglich. Genauso können Bushaltestellen nur auf einer Straßenseite sein – am gegenüberliegenden Straßenrand könnte man dann trotzdem parken. Das müssen wir bei unseren Parkspuren nun beachten und die Pufferbereiche nur auf den Seiten entfernen, an denen tatsächliche Beschränkungen bestehen. Ich habe das in meinem Beispiel mit etwas Handarbeit gelöst, in dem ich die Straßenbereiche im Einmündungsbereich markiert und gelöscht habe. GIS-Profis, die einen eleganteren und automatisierbaren/großflächig anwendbaren Weg kennen: Sagt gern bescheid!

Für meinen Lösungsweg müssen wir die Liniensegmente der Parkspuren zunächst im Bereich der Puffer aufteilen und dann alle Teile löschen, auf denen tatsächliche Parkbeschränkungen gelten. Ich habe dafür zunächst die Straßensegmente außerhalb und dann die Straßensegmente innerhalb der Pufferzonen separat erzeugt:

  • Vektor → Geoverarbeitungswerkzeuge → Differenz. Als Eingabelayer nehmen wir die Parkspuren (Schritt jeweils für links und rechts durchführen), Differenzlayer sind die Pufferzonen. Rechtsklick auf den Layer und Umbenennen, z.B. in „Differenz links“/„Differenz rechts“, sodass wir die Differenzlayer für beide Straßenseiten später noch unterscheiden können.
  • Das „Gegenstück“ im Pufferbereich erzeugen wir ähnlich über Vektor → Geoverarbeitungswerkzeuge → Verschneidung (ebenfalls für beide Straßenseiten durchführen).
  • Die neuen Parkspuren nun wieder so stylen wie vorher (oder im Stilmenü unten unter Stil → Stil speichern/Stil laden den Stil der alten Parkspuren übernehmen):
    • 2,2 Karteneinheiten breit, Farbe #0622ac, Verbindungsstil Eckig, Endstil Flach, Versatz links jeweils -4,1, rechts 4,1.
    • Für das nachfolgende Vorgehen ist zudem eine Hilfslinie in der Straßenmitte nützlich: Dafür einfach im Stilmenü aller Parklayer einen QGIS Symbol Symbollayer hinzufügen.png Symbollayer hinzufügen, ohne ihn weiter zu bearbeiten. Es müsste eine zweite, dünne schwarze Linie in der Straßenmitte erscheinen, mit der wir die Straßensegmente leichter auswählen/anklicken können.
  • Die beiden ursprünglichen Parkspuren benötigen wir erstmal nicht mehr – diese können wir entfernen oder in einer Layergruppe archivieren.
Screenshot Parkspuren ausstanzen.png

Für beide Fahrbahnseiten haben wir nun jeweils einen Differenzlayer (= die Straßenbereiche außerhalb der Puffer) und einen Verschneidungslayer (= die Straßenbereiche innerhalb der Puffer). Es bietet sich an, zunächst die Layer einer der beiden Seiten auszublenden, um im Verschneidungslayer der anderen Seite damit zu beginnen, die Segmente zu löschen, die nicht zum Parken geeignet sind: Dafür wieder den QGIS Symbol Bearbeitungsmodus.png Bearbeitungsmodus einschalten, auf die Liniensegmente klicken, die sich an Einmündungen, Fußgängerüberwegen oder Bushaltestellen befinden und mit Entf-Taste löschen. Anschließend ebenso im Verschneidungslayer der anderen Straßenseite verfahren. Je nach Größe des Gebiets dauert das etwas und benötigt Konzentration…

Anmerkung: An einigen Stellen, an denen sich Pufferkreise der gleichen Art überlappen, kann es passieren, dass nicht die exakten „Lücken“ ausgestanzt werden können. Durch weitere geometrische Bearbeitungen (oder einfaches händisches Abschneiden) könnte das umgangen werden, was an dieser Stelle aber zu weit führt. Meistens lässt sich improvisieren, in dem die „Lücke“ etwas versetzt oder etwas größer oder kleiner wird – die Kartenansicht spiegelt ohnehin nicht immer die Realität wieder sondern ist eine modellhafte Abbildung, wobei die Fehlerquote solcher Ungenauigkeiten für die Gesamtzählung eher zu vernachlässigen ist.

Für Fortgeschrittene: Ein Sonderfall in meinem Beispiel waren die Fahrradständer auf der Fahrbahn, die wir in Neukölln als Flächen kartieren und die ich extra von den Parkspuren abgezogen habe. Da unsere Parkspur-Linien geometrisch noch immer in der Straßenmitte verlaufen, die Geometrie der Fahrradständer sich aber am Fahrbahnrand befinden, habe ich die Fahrradständer zunächst von Hand in die Straßenmitte verschoben und dann ebenfalls über das Differenz-/Verschneiden-Werkzeug von der passenden Seite abgezogen.

Screenshot Parkspuren zurechtgeschnitten.png

Abschließend können wir nun für beide Straßenseiten jeweils die Elemente aus dem Verschneidungslayer mit Strg+A markieren, mit Strg+C kopieren und in den Differenzlayer bei eingeschaltetem QGIS Symbol Bearbeitungsmodus.png Bearbeitungsmodus mit Strg+V einfügen. Das Ergebnis enthält nun die finalen Parkspuren und kann abgespeichert werden.

Hinweis: Beim hantieren mit den geometrischen Werkzeugen kann es oft passieren, dass mehrere Objekte an gleicher Stelle entstehen, die dann nicht auf den ersten Blick zu sehen sind. Da mehrere positionsgleiche Linien aber später unser Zähl-Ergebnis verfälschen würden, da sie mehrfach gezählt werden würden, solltet ihr am besten noch einmal sicherstellen, dass alles nach Plan verlaufen ist und sich keine doppelten Objekte in eurem Datensatz verstecken. Einfache Möglichkeiten dafür sind, die Darstellungsfarbe auf halbtransparent zu stellen und visuell zu prüfen, ob es (insbesondere an komplizierten Kreuzungen o.ä.) überlappende Objekte gibt oder mit dem QGIS Symbol Feldrechner.png Feldrechner nach positionsgleichen Objekten zu suchen.

Daten passend darstellen #2: Parkspuren

Screenshot Stil Parkspuren.png
Screenshot Parkspuren final.png

Die finalen Parkspuren sind nun auf die Bereiche gekürzt, in denen tatsächlich geparkt werden kann. Wir können sie nun noch entsprechend der verschiedenen Parkrichtungen etwas anspruchsvoller einfärben und mustern – in meinem Beispiel so:

  • Rechtsklick auf den Layer → Eigenschaften → Stil,
  • Stil ganz oben von Einzelsymbol auf Kategorisiert stellen, sodass die Linien je nach Parkplatzrichtung verschieden gestaltet werden können.
  • Bei Spalte das Attribut mit den Parkplatzwerten („parking“) auswählen.
  • Klassifizieren klicken, um alle verfügbaren Werte anzuzeigen.
  • Jedes der Symbole nacheinander doppelklicken und gestalten: Für „parallel“ habe ich gewählt:
    • Einfache Linie mit einer Breite von 2,2, der Einheit Karteneinheiten und der Farbe #0622ac,
    • Verbindungsstil „Eckig“ und Endstil „Flach“,
    • Benutzerdefinierte Strichlierung verwenden mit einer Strichlänge von 4.3 und einem Zwischenraum von 1 (jeder Strich symbolisiert somit in etwa eine Autolänge),
    • Versatz -4,1 Karteneinheiten (links) bzw. 4,1 (rechts).
  • für „diagonal“:
    • unter „Einfache Linie“ Symbollayertyp auf Markierungslinie stellen und mit Intervall 3,1 auswählen (entspricht dem Abstand schräg parkender Autos),
    • dort außerdem Linienversatz -4,6 bzw. 4,6,
    • unter Line Einheit wieder auf Karteneinheiten stellen, bei Bedarf andere Farbe (z.B. #c4bc28),
    • unter Einfache Markierung unten ein langgezogenes Kästchen auswählen (angelehnt an die Form eines Autos), Größe auf 4,3 stellen (etwa die Länge eines Fahrzeugs), Rahmen transparent,
    • Drehung: 45° (um Schrägparken zu symbolisieren).
  • für „perpendicular“ gleich verfahren, außer:
    • mit Intervall 2,6; Linienversatz +/-5,15; keine Drehung; bei Bedarf andere Farbe (z.B. #ff0059).
  • Falls in den Layereigenschaften der Parkspuren ein Symbol mit leerem Wert übrig bleibt, kann es gelöscht werden.
  • Den Stil am besten Abspeichern und für die andere Straßenseite laden – dort allerdings die Vorzeichen beim Versatz umdrehen, damit die Linien auf die richtige Straßenseite rutschen.

Die fertige Kartenansicht kann bei Bedarf über Projekt → Als Bild speichern abgespeichert werden oder – wer eine höhere Auflösung benötigt – über eine Kartenzusammenstellung: Projekt → Neue Druckzusammenstellung, einen beliebigen Namen für die Druckzusammenstellung eingeben und dann über die Symbolleiste links QGIS Symbol Neue Karte hinzufügen.png Neue Karte hinzufügen. In den Zusammenstellungseigenschaften können weitere Einstellungen (Kartenausschnitt, Auflösung etc.) vorgenommen werden. Über die Symbolleiste oben am Ende dann z.B. QGIS Symbol Speichern als Rasterbild.png Speichern als Rasterbild wählen.

Parkplätze zählen

Unsere Linien sind nun passend zurechtgeschnitten und dargestellt. Im nächsten Schritt können wir aus der Länge der Linien nun die Anzahl der Parkplätze ermitteln.

In meinem Beispiel gibt es Bereiche, in denen Autos längs (also parallel zur Straße) oder schräg bzw. quer (also im Winkel von 45 oder 90 Grad zur Straße) parken können. Beim Schräg- und Querparken passen deutlich mehr Autos nebeneinander. Aus Stichproben auf Luftbildern habe ich diese Werte ermittelt (wie bereits in der grafischen Darstellung berücksichtigt):

  • Längsparken: Alle 5,3 Meter ein Fahrzeug,
  • Schrägparken: Alle 3,1 Meter ein Fahrzeug,
  • Querparken: Alle 2,6 Meter ein Fahrzeug.

Eine vierte, nicht so verbreitete Art des Parkens, die sich in den OSM-Daten findet, ist das Parken in ausgewiesenen markierten Bereichen („parking:lane:* = marked“). In meinem Beispiel gibt es das nicht, aber möglicherweise woanders. In diesem Fall müssten dann eigene Annahmen zur Fahrzeugdichte gemacht werden.

Anzahl der Parkplätze auf Parkspuren ermitteln

Die Berechnung der Anzahl der Parkplätze für jedes Liniensegment kann in QGIS direkt über den QGIS Symbol Feldrechner.png Feldrechner durchgeführt werden, der diese Zahl als neue Spalte in der Attributtabelle einfügt (jedes Straßensegment bekommt dann also eine neue Eigenschaft, nämlich die Anzahl der Parkplätze dort):

  • Den Namen für das neue Attribut festlegen (z.B. „p_count“ oder anderer passender Name).
  • Das Attribut soll eine Dezimalzahl (Zahl mit Nachkommastellen, z.B. 3 Stellen nach dem Komma) sein, um möglichst genaue Ergebnisse zu bekommen.
  • Als „Ausdruck“ (also Rechenoperation) passt in unserem Fall: if("parking" = 'parallel', $length / 5.3, if("parking" = 'diagonal', $length / 3.1, if("parking" = 'perpendicular', $length / 2.6, 0))). Diese verschachtelte Bedingung („if...“) prüft bei jedem Segment, ob eine der üblichen Parkplatz-Ausrichtungen vorliegt und dividiert die Länge des Liniensegments mit der passenden Parkplatzdichte. $length ermittelt dabei die Länge einer Linie. „parking“ ist in diesem Fall der Name das Attributs, in dem die Ausrichtung der Parkplätze angegeben ist (z.B. „parallel“) – dieser kann evtl. auch anders lauten und kann in der unteren mittleren Liste unter „Felder und Werte“ nachgeschlagen werden.

Mit Nachkommastellen zu rechnen ist hier sinnvoll, da durch die Zerstückelung auch viele kleine Teile entstanden sind, die z.B. nur „einen halben Parkplatz“ widerspiegeln, in der Realität aber nicht vom Rest der Straße zu unterscheiden sind.

Hinweis für Fortgeschrittene: Um ein noch genaueres Ergebnis zu bekommen, könnte man benachbarte Linien vorher vereinigen und alleinliegende Liniensegmente, an die sich keine anderen Segmente anschließen und die zu klein für einen ganzen Parkplatz sind, entfernen. Die Fehlerquote durch zu kurze Liniensegmente ist jedoch – vor allem in Relation zu anderen Fehlerquellen – vernachlässigbar gering.

Kapazität von Parkplätzen und Garagen ermitteln

Auch unsere Parkplätze und Garagen können wir bei Bedarf in die Rechnung einbeziehen. Wie viele Autos auf einen Parkplatz passen, ist möglicherweise bereits in der OSM-Datenbank vermerkt – bei einigen wird dieser Wert aber auch fehlen. Wir können uns behelfen, in dem wir fehlende Werte aus der Größe eines Parkplatzes extrapolieren: Den QGIS Symbol Feldrechner.png Feldrechner öffnen, Vorhandenes Feld erneuern und das Feld mit der Kapazität (capacity) des Parkplatzes auswählen und dann als Ausdruck if("capacity", "capacity", if($area < 150, round($area / 14.8), round($area / 29.1))) ausführen. Diese Formel sucht nach leeren Kapazitätsangaben und füllt sie entsprechend der Größe des Parkplatzes nach diesem Schema:

  • bei kleinen Parkplätzen (< 150 m²) wird angenommen, dass ein Fahrzeug im Mittel 14,8 m² verbraucht,
  • bei größeren Parkplätzen wird dagegen ein Fahrzeug pro 29,1 m² angenommen (die Flächen umfassen üblicherweise mehr Zufahrtswege etc., daher der größere Wert).
  • Wie ich auf die Werte komme, habe ich in der Parkplatzanalyse beschrieben.
Achtung: Falls sich mehrstöckige Parkhäuser (parking=multi-storey) ohne Kapazitätsangaben im Datensatz befinden, muss dieser Wert natürlich angepasst werden (z.B. Flächenberechnung mit der Anzahl der Parkdecks/Gebäudestockwerke multiplizieren oder online recherchieren). Oft sind diese Werte aber bereits in OSM hinterlegt.

Für Garagen verfahren wir ebenso mit einer etwas anderen Formel: if("capacity", "capacity", round($area / 18)).

Im Prinzip ist die Parkplatzzählung damit fertig. Mit einem Rechtsklick auf die beiden Parkspur-Layer sowie die Parkplätze und Garagen und „Speichern als...“ können die Attributtabellen (mit Parkplatzzahlen bzw. Kapazitätsangaben) als CSV- oder Excel-Tabelle abgespeichert werden und lassen sich nun in Tabellenbearbeitungsprogrammen (wie Excel oder LibreOffice Calc) weiter auswerten. So lässt sich insbesondere die Summe aller Parkplätze im Gebiet ermitteln oder die Anzahl der Parkplätze in jedem Straßenzug, indem die Segmente nach Straßennamen sortiert aufgelistet werden und für jeden Straßennamen die Summe aller dort befindlichen Parkplätze berechnet wird.

Erzeugen einer Punktewolke und Heatmap

Eine tolle Form der Darstellung der Parkplätze ist eine Heatmap oder eine Darstellung einzelner Parkplätze als Punkte. Dafür müssen die Parkspur-Linien nun tatsächlich (und nicht nur grafisch) von der Straßenmitte nach links und rechts verschoben werden. Auf diese Weise sind Punkteketten möglich, die rechts und links der Fahrbahn, also entlang der Parkspuren verlaufen. Ich hab bisher keine Möglichkeit gefunden, diesen Schritt gut zu automatisieren, sondern musste tatsächlich jedes Straßensegment „von Hand“ verschieben. Für GIS-Profis ist es aber sicher kein Problem, dafür eine bessere Möglichkeit zu finden...

Versetzen der Parkspuren

Die folgenden Schritte jeweils für die Parkspur links und rechts durchführen:

  • Durch die Zerteilung der Parkspurlinien an Kreuzungen etc. sind zum Teil Linienobjekte entstanden, die Lücken haben: Es gibt also Linienobjekte, die aus mehreren, nicht miteinander verbundenen Teilstücken bestehen. Das sorgte bei mir beim Versetzen für Probleme: Wenn ich einen Teil versetzt habe, sind die anderen Teile immer verschwunden. Daher musste ich diese Objekte zunächst weiter zerteilen: Vektor → Geometrie-Werkzeuge → Mehr- zu Einteilig.
  • Anschließend können die Teilstücke versetzt werden. Dafür die Liste der Verarbeitungswerkzeuge öffnen, in dem in der Werkzeugleiste das Zahnradsymbol ("Werkzeugkiste") angeklickt wird. Unter Vektorgeometrie ist das Werkzeug Linie versetzen zu finden. Als Eingabelayer die Parkspuren wählen und als Abstand „-4“ für Versatz nach rechts oder „4“ für Versatz nach links eingeben. Achtung: Die zu bearbeitenden Layer sollten in Gauss-Krüger-Projektion vorliegen (siehe oben).

Erzeugen von Punkteketten

Mit dem QGIS-Plugin QChainage lassen sich Punkte in regelmäßigem Abstand entlang von Linien erzeugen. Das Plugin lässt sich einfach über Erweiterungen → Erweiterungen verwalten und installieren → suchen und installieren. Ergänzung: QGIS hat diese Funktion inzwischen auch ohne Plugin nativ im Angebot: Dafür die Liste der Verarbeitungswerkzeuge öffnen, in dem in der Werkzeugleiste das Zahnradsymbol ("Werkzeugkiste") angeklickt wird. Unter Vektorgeometrie ist das Werkzeug Punkte entang einer Geometrie zu finden.

Um Längs-, Schräg- und Querparken mit verschiedenen Punktedichten abzubilden, die nächsten Schritte jeweils für jede Straßenseite und jede Parkspur-Art wiederholen:

  • QGIS Symbol Attributtabelle.png Attributtabelle öffnen, durch Klick in die Kopfzeile nach Parkspur-Ausrichtung sortieren und nun alle Zeilen einer Art, z.B. „parallel“, auswählen (mit der Maus in der ersten Spalte ziehen).
  • In der Kartenansicht werden nun alle ausgewählten Objekte als markiert angezeigt. QChainage über Vektor → QChainage oder das QGIS Symbol QChainage.png Symbol in der Menüleiste öffnen und hinter Chainage every den passenden Abstand in Metern (z.B. „5,3“ beim Längsparken) angeben. Unter Advanced sollte bereits only selected Features ausgewählt sein. Hier am Besten außerdem noch Start From aktivieren und die Hälfte des ersten Meter-Wertes eingeben (bei Längsparken im Abstand von 5,3 Metern also 2,65 Meter eingeben) – auf diese Weise werden die Punkte in die Mitte der berechneten Parkplätze verschoben.
Screenshot Parkplätze nachzeichnen.png

Wenn die Parkplätze und Garagen mit in die Heatmap-Darstellung aufgenommen werden sollen, können diese auf ähnliche Weise in Punkten dargestellt werden. Ich habe mir beholfen, in dem ich die Flächen mit Linien nachgestellt habe und diese ebenfalls in Punkteketten umgewandelt habe (siehe nebenstehende Abbildung). Eine einfache Möglichkeit von Hand wäre:

Nachtrag/Ergänzung: Eine schnelle, aber nicht ganz so genaue Möglichkeit ist es, die Flächen zu Linien umzuwandeln (Geometrie-Werkzeuge → Polygone zu Linien), in einem Objekt zu vereinigen (Geometrie-Werkzeuge → Ein- zu mehrteilig) und dieses dann in die Summe aller Parkplätze zu zergliedern.
  • Links neben dem Layerfenster das Symbol Neuer Temporärlayer wählen (versteckt sich hinter dem Pfeilchen hinter Shapedatei-Layer anlegen),
  • „Linie“ und Gauss-Krüger-Koordinaten auswählen,
  • in der Symbolleiste oben QGIS Symbol Objekt hinzufügen.png Objekt hinzufügen auswählen,
  • Linien entlang der Parkplätze (bei größeren Flächen z.B. im Zick-Zack) und Garagen zeichnen (Linie mit Rechtsklick abschließen),
  • in den Parkplatz- und Garagenlayern eine Beschriftung mit der Kapazität einstellen, sodass man in der Kartenansicht schnell sieht, wie viele Parkplätze eine Fläche umfasst (Rechtsklick → Einstellungen → Beschriftungen → Diesen Layer beschriften, Beschriften mit: capacity, Textstil nach Bedarf ändern),
  • jede Parkplatzlinie nacheinander einzeln markieren und mit QGIS Symbol QChainage.png QChainage → Advanced → Divide Feature into … Parts die (dank der Beschriftungen schnell ablesbare) Kapazität des Parkplatzes minus 1 einstellen (also z.B. die Linie eines Parkplatzes mit 29 Stellplätzen in 28 Teile teilen, da das 29 Punkte zwischen den Teilen ergibt).

Die erzeugten Punkteketten sollten nun noch in einem Layer zusammengeführt werden (am einfachsten, in dem man nacheinander alle Punkte in einem Layer auswählt, kopiert und in einen Gesamtlayer einfügt, solange, bis dort alle Punkte enthalten sind). Der finale Layer mit allen Punkten kann nun abgespeichert werden. Für die weitere Verwendung ist es notwendig, den Layer auch im Koordinatensystem WGS84 abzuspeichern (siehe zu Beginn).

Dieser finale Layer enthält nun eine „Punktwolke“ mit allen Parkplätzen und lässt sich als Heatmap darstellen. Das geht bestimmt auch in QGIS, aber als einfachere und online sichtbare Form habe ich für mein Beispiel uMap genutzt:

  • uMap-Website öffnen,
  • Erstelle eine Karte klicken und in der Menüleiste rechts Daten importieren auswählen.
  • Die geojson-Datei mit den Parkplatzpunkten auswählen und importieren (hier ist nun WGS84 notwendig, damit die Punkte am richtigen Ort erscheinen!).
  • In der linken Menüleiste Datenebenen ansehen und die eingefügte Ebene mit dem Stiftsymbol bearbeiten. Als Ebenentyp „Heatmap“ auswählen.
  • Der Radius der Heatmap-Blasen ist von den verfügbaren Zoomstufen und anderen Einstellungen abhängig. In meinem Fall haben diese Einstellungen eine gute Darstellung ergeben:
    • In der rechten Menüleiste Karteneinstellungen bearbeiten auswählen und hier unter Benutzerdefinierter Hintergrund die höchste Zoomstufe auf 22 stellen.
    • Die Ebene noch einmal bearbeiten und unter Formeigenschaften den Radius der Heatmap auf einen Wert um die 65 stellen. Somit werden mehr Parkplätze in der Umgebung in die Darstellung einbezogen und das Ergebnis wird „weicher“.
  • Bei Bedarf einfach weitere Einstellungen wie einen passenden Kartennamen, einen anderen Kartenhintergrund etc. vornehmen oder weitere Datenlayer (in WGS84-Koordinaten) importieren und gestalten.

Fertig! Die URL der uMap mit dem fertigen Ergebnis könnt ihr nun sogar anderen Menschen schicken :)

Nachtrag: Ermittlung von Flächenverteilungen und Parkplatzdichten

Abb. 3 - Stellplatzdichte.jpg

An einem anderen Beispiel habe ich diese Parkplatzanalyse wiederholt (siehe hier) und dabei weitere Auswertungen angeschlossen, die jedoch externe Datensätze zur Flächen- und Einwohnerverteilung einbeziehen. Zur Dokumentation hier eine kurze Beschreibung des Vorgehens:

Flächenverteilungen

Wie viel Raum nehmen parkende Fahrzeuge in der Stadt ein? Um diese Frage zu beantworten, habe ich aus der ermittelten Anzahl der Fahrzeuge ihren Flächenverbrauch ermittelt. Angenommen bzw. stichprobenhaft ermittelt habe ich, dass parallel parkende Fahrzeuge 12m², schräg- und querparkende Fahrzeuge 14m² Raum einnehmen (üblicherweise werden dafür sogar noch etwas höhere Werte angenommen, siehe z.B. hier). Der Gesamtflächenverbrauch dieser Fahrzeuge kann ins Verhältnis der Fläche des Untersuchungsgebiets bzw. des öffentlichen Raums des Untersuchungsgebiets gesetzt werden. Dieser öffentliche Raum ergibt sich aus der Fläche zwischen den Häuserfassaden und lässt sich für die Berliner Innenstadt aus Datensätzen auf Blockebene ableiten (vgl. z.B. Geoportal Berlin: Einwohnerdichte 2018).

Parkplatzdichte

Ist die Anzahl und Verteilung von Parkplätzen bekannt, kann sie mit Bevölkerungsdaten ins Verhältnis gesetzt werden, um die "Parkplatzdichte" zu ermitteln: Wo gibt es also über- oder unterdurchschnittlich viele Parkplätze, wo liegen Ausweichpotentiale? Im Fall Berlin habe ich dafür die detailiert auf Blockebene vorliegenden Einwohnerzahlen sowie grobe Infos zur Anzahl privater Pkw (siehe hier, S. 20) herangezogen und bin dabei wie folgt vorgegangen:

  • Die Block-Polygone mit Einwohnerzahlen auf das Untersuchungsgebiet beschnitten, zu einem Objekt vereinigt und dieses mit QChainage in Punkte zerlegt, sodass ein einzelner Mensch gewissermaßen als einzelner Punkt an seinem Wohnort repräsentiert wird – oder, wenn bekannt, den Wert entsprechend der Anzahl privater Pkw wählen, damit jeder Punkt eine Autofahrerin/einen Autofahrer repräsentiert. (Ergänzung: In neueren Auflagen der Parkplatzanalyse beschreibe ich ein deutlich exakteres Bevölkerungs- bzw. Fahrzeugbesitz-Modell.)
  • Puffer in einem definierten Radius (bei mir: 250 Meter) um alle Parkplatz-Punkte ziehen
  • Für diese Puffer die Anzahl enthaltener anderer Parkplätze ermitteln: Analyse-Werkzeuge → Punkte in Polygon zählen. Somit ergibt sich für jeden Parkplatz, wie viele andere Parkplätze es in der Umgebung gibt.
  • Nun auf gleiche Weise auch noch die Anzahl der Menschen im Umkreis ermitteln. Anzahl der Parkplätze und Anzahl der Menschen können mit dem Feldrechner miteinander dividiert werden, sodass sich für jeden Parkplatz ein eigener Dichtewert ergibt. (Achtung: Je nach Beschaffenheit des Datensatzes bezieht diese Methode bei Parkplätzen am Rand des Untersuchungsgebiets nur die Parkplätze und Menschen im Untersuchungsgebiet ein, nicht die tatsächlich auch außerhalb des Gebiets vorhandenen Parkplätze bzw. Menschen. Um das zu vermeiden, müssten auch Daten um das Untersuchungsgebiet herum vorliegen.)
  • Diese Dichtewerte können z.B. mit einem Farbverlauf entsprechend des Dichtequotienten anschaulich dargestellt werden, in dem die Puffer punktförmig dargestellt werden (Layereigenschaften → Stil → Abgestuft mit Symbol → Einfache Markierung mit passenden Stileigenschaften).