Datasets Update Anleitung - MunichWays/Carto GitHub Wiki

Carto neu

Wir ziehen im laufe 2024 zum neuen Carto um.

Daten aus OSM + Masterliste aktualisieren

IST_RadlVorrangNetz_MunichWays_V20.geojson

Mit Einführung der Webanwendung Masterliste im Februar 2024 pflegen wir Strecken nur noch in OSM mit dem Tag class:bicycle und nicht mehr in Carto, d.h. neue und geänderte Linien/Strecken werden in OSM geändert und ggf. mit den zusätzlichen Informationen in der Masterliste gemapped/verknüpft.

Parallelbetrieb 2024

Wir werden die alten Karten in Carto 2023 noch eine Weile aktualisieren.

Ziel ist es alles über die Masterliste zu machen.

Workaround von Carto 2023 nach Carto neu 2024

  • 1 radlvorrangnetz_app_V07 im neuen Carto importieren, bestehende Tabelle überschreiben
  • 2 geplanten Abfrage "Udpdate_Tables" in BigQuery laufen lassen

--> mehr Infos und Anleitungen im Wiki: BigQuery Update‐Anleitung

Fehlversuch: BigQuery im neuen Carto kann zwar die Masterliste automatisch syncronisieren aber keinbe geoJSON Dateien. Das kann nur in Carto neu manuell importiert werden. Export als geoJSON geht auch nicht.

IST_RadlVorrangNetz_MunichWays_V20.geojson bereitstellen

Carto alt

0. Dataset radlvorrangnetz_masterliste synchronisieren

Das Dataset "radlvorrangnetz_masterliste" wird automatisch alle 24 Stunden mit der Masterliste in Google Drive synchronisiert.

  • Manuell aktualisieren/syncronisieren: In Carto anmelden
  • im Reiter oben "Data" radlvorrangnetz_masterliste öffnen
  • synchronisieren klicken: unscheinbarer Link oben über den Spaltennamen in blau "sync now" (kann zwischen wenigen Sekunden und einigen Minuten dauern)
  • danach ist der synchronisieren Link für 15 Minuten deaktivert. Falls Wiederholung nötig, Karte schließen und nach 15 Minuten wieder öffnen.

1. Optionale Checks

  • Im Dataset radlvorrangnetz_masterliste unten mit dem Schalter von “METADATA” auf “SQL” wechseln.

1.1 Linie (the_geom) in Carto rv, aber nicht in Masterliste (rvm)

oder andersherum (z.B. Zeile wurde in Masterliste versehentlich gelöscht oder überschrieben)

SQL-Anweisung:

select rv.cartodb_id, rv.name, rv.farbe from radlvorrangnetz rv 
where rv.cartodb_id not in (select cartodbid_in_liste  from radlvorrangnetz_masterliste where cartodbid_in_liste >0)
order by rv.cartodb_id
  • Die SQL-Anweisung kopieren und einfügen. Dann auf "APPLY" unten rechts klicken. Es erscheint keine positiv Bestätigung. Wenn unten links kein Fehler angezeigt wird, wurde der SQl-Befehl ausgeführt.

--> erwartet: keine Datensätze gefunden

1.2 Doppelte cartodbid_in_liste

SELECT cartodbid_in_liste, COUNT(*)
FROM radlvorrangnetz_masterliste rvm
GROUP BY cartodbid_in_liste
HAVING COUNT(*) > 1
ORDER BY COUNT(*)

--> erwartet: nur x Fälle mit null (02.2024 32 Fälle) aber keine cartodbid_in_liste als Ergebnis --> falls doch Behebung: mehrfache cartodbid_in_liste in der Masterliste löschen

1.3 Eintrag ohne Linie

~~(nur einmal passiert am 11.01.2021)

SQL~~ ~~SELECT * FROM radlvorrangnetz where the_geom is null~~ ~~

--> erwartet: keine Datensätze gefunden

1.4 Nach evtl. Korrekturen erneut synchronisieren

Falls Wiederholung nötig, Karte schließen und nach 15 Minuten wieder öffnen. Der Link "sync now" kann nur alle 15 Minuten durchgeführt werden. Masterliste synchronisieren (unscheinbarer Link in blau "sync now")

2. Update datasets

2a Update dataset radlvorrangnetz_visualisieren

Für einfachere Visualisierungen in Carto wird dieser Layer in vielen Karten verwendet. Er enthält genau die Felder, die für die Layer und deren Pop-Ups in dieser Reihenfolge benötigt werden.

  • Dataset radlvorrangnetz_visualisieren öffnen und unten mit dem Schalter von “METADATA” auf “SQL” wechseln.

  • Alle Datensätze in radlvorrangnetz_visualisieren löschen!

truncate radlvorrangnetz_visualisieren;
  • Alle Datensätze in radlvorrangnetz_visualisieren einfügen
insert into radlvorrangnetz_visualisieren ( 
  cartodb_id, the_geom, strassenansicht_klick_mich, name, strecke, ist_situation, happy_bike_level, soll_massnahmen, massnahmen_kategorie_link, massnahmen_kategorie, kategorie_id
  , beschreibung, munichways_id, status_umsetzung, bezirk_link, neuralgischer_punkt, links
  , netztyp, plan_netztyp_id, mw_rv_strecke, rsv_strecke, viel_kfz, netztyp_id, status_id
  , Status_2019, Status_2020, Status_2021, Status_2022, Status_2023, Status_2024, Status_2025
  , restriktionen, restriktionen_bike_level, realisierung
  , Massnahmen_Blatt, Massnahmen_Index, prio_gesamt, status_netzplanung, MW_RV_Zusatz
  , lhm_routen, Netztyp_Plan, Netztyp_Plan_ID, Netztyp_Ziel, Netztyp_Ziel_ID, Strecken_Link
  ) 
select 
  rv.cartodb_id, rv.the_geom, rvm.strassenansicht_klick_mich, rvm.name, rvm.strecke, rvm.ist_situation, rvm.happy_bike_level, rvm.soll_massnahmen, rvm.massnahmen_kategorie_link, rvm.massnahmen_kategorie, rvm.kategorie_id
  , rvm.beschreibung, rvm.munichways_id, rvm.status_umsetzung, rvm.bezirk_link, rvm.neuralgischer_punkt, rvm.links
  , rvm.netztyp, rvm.plan_netztyp_id, rvm.mw_rv_strecke, rvm.rsv_strecke, rvm.viel_kfz, rvm.netztyp_id, rvm.status_id
  , rvm.Status_2019, rvm.Status_2020, rvm.Status_2021, rvm.Status_2022, rvm.Status_2023, rvm.Status_2024, rvm.Status_2025
  , rvm.restriktionen, rvm.restriktionen_bike_level, rvm.realisierung
  , rvm.Massnahmen_Blatt, rvm.Massnahmen_Index, rvm.prio_gesamt, rvm.status_netzplanung, rvm.MW_RV_Zusatz
  , rvm.lhm_routen, rvm.Netztyp_Plan, rvm.Netztyp_Plan_ID, rvm.Netztyp_Ziel, rvm.Netztyp_Ziel_ID, rvm.Strecken_Link
FROM radlvorrangnetz rv, radlvorrangnetz_masterliste rvm 
where rv.cartodb_id=rvm.cartodbid_in_liste
order by rv.cartodb_id desc
;

2b Optional: Update dataset radlvorrangnetz (farbe und netztyp_id)

für korrekte Anzeige beim Editieren (falls die Farbe in der Masterliste mal geändert wurde)

  • Dataset radlvorrangnetz öffnen und unten mit dem Schalter von “METADATA” auf “SQL” wechseln.

SQL-Anweisung:

update radlvorrangnetz set name=rvm.name, farbe=rvm.farbe , netztyp_plan=rvm.netztyp_plan
FROM radlvorrangnetz_masterliste rvm
where radlvorrangnetz.cartodb_id=rvm.cartodbid_in_liste

Die SQL-Anweisung kopieren und einfügen. Dann auf "APPLY" unten rechts klicken. Es erscheint keine positiv Bestätigung. Wenn unten links kein Fehler angezeigt wird, wurde der SQl-Befehl ausgeführt.

3. GEO-JSON-Dateien für die App, QGIS von Michael und für GOAT exportieren

  • Dataset radlvorrangnetz öffnen und unten mit dem Schalter von “METADATA” auf “SQL” wechseln.

3a: Datei masterliste_V07 (Hauptdatei ab 06.2023)

  • Neu V07 (06.2023): Restriktionen, Restriktionen_Bike_Level, Realisierung (für Winterdienst) sowie Status 2019-2025 (Zeitverlauf Umsetzung)
SELECT rv.cartodb_id, rv.the_geom, rvm.strassenansicht_klick_mich , rvm.name, rvm.strecke, rvm.MW_RV_Strecke, rvm.ist_situation, rvm.happy_bike_level, rvm.soll_massnahmen, rvm.massnahmen_kategorie_link, rvm.beschreibung, rvm.munichways_id , rvm.status_umsetzung, rvm.bezirk_link, rvm.links , rvm.netztyp, rvm.plan_netztyp_id, rvm.farbe, rvm.rsv_strecke, rvm.alternative, rvm.viel_Kfz , rvm.bild, rvm.mapillary_link, rvm.Mapillary_Img_ID , rvm.bezirk_region, rvm.bezirk_nummer, rvm.bezirk_name , rvm.massnahmen_kategorie
, rvm.Massnahmen_Blatt, rvm.Massnahmen_Index, rvm.Prio_Gesamt, rvm.Neuralgischer_Punkt , rvm.kategorie_id, rvm.status_id, rvm.netztyp_id, rvm.Status_Netzplanung, rvm.rsv_boolean
, rvm.Netztyp_Plan, rvm.Netztyp_Plan_ID, rvm.Netztyp_Ziel, rvm.Netztyp_Ziel_ID
, rvm.Status_2019, rvm.Status_2020, rvm.Status_2021, rvm.Status_2022, rvm.Status_2023, rvm.Status_2024, rvm.Status_2025
, rvm.Restriktionen, rvm.Restriktionen_Bike_Level, rvm.Realisierung
, now() last_updated 
FROM radlvorrangnetz rv, radlvorrangnetz_masterliste rvm 
where rv.cartodb_id=rvm.cartodbid_in_liste
order by rv.cartodb_id desc
  • exportieren als GEO-JSON-Datei und lokal speichern als "radlvorrangnetz_masterliste_V07.geojson" (V07 ab 01.06.2023)

### Optional Kopien für ältere Versionen * exportieren als GEO-JSON-Datei und lokal speichern als "radlvorrangnetz_masterliste_V06.geojson" (V06 01.05.2022 bis 30.05.2023)

Datei V04 (Hauptdatei 03.2021 bis 04.2022) * exportieren als GEO-JSON-Datei und lokal speichern als "radlvorrangnetz_masterliste_V04.geojson" (V04 ab 21.03.2021)

3b: App-Datei (app_V07 abgespeckt)

Nur die relevanten Felder für die App aus radlvorrangnetz_masterliste plus Geom aus radlvorrangnetz

App V07 plus neues Feld Strecken_Link

2023-12-27 Workaround mapillary_img_id explizit als Text ausgeben bis zum Fix in der nächsten App Version. Bug in Version 2.0.0(24)

SELECT rv.cartodb_id, rv.the_geom, rvm.name, rvm.strecke, rvm.MW_RV_Strecke, rvm.ist_situation, rvm.happy_bike_level, rvm.soll_massnahmen, rvm.massnahmen_kategorie_link, rvm.beschreibung, rvm.munichways_id, rvm.status_umsetzung, rvm.links, rvm.farbe
, rvm.mapillary_img_id::text as mapillary_img_id
, rvm.bezirk_nummer, rvm.bezirk_name, rvm.netztyp_id, rvm.strecken_link, now() last_updated
FROM radlvorrangnetz rv, radlvorrangnetz_masterliste rvm 
where rv.cartodb_id=rvm.cartodbid_in_liste and rvm.farbe <> 'grau'
order by rv.cartodb_id desc
  • exportieren als GEO-JSON-Datei und lokal speichern als "radlvorrangnetz_app_V07_new.geojson". V07 ab 22.11.2022 mit App-Version 1.1.2(18)

Für Apple iOS war App-Versionen V04 bis 11.2023 erforderlich:

SELECT rv.cartodb_id, rv.the_geom, rvm.name, rvm.strecke, rvm.MW_RV_Strecke, rvm.ist_situation, rvm.happy_bike_level, rvm.soll_massnahmen, rvm.massnahmen_kategorie_link, rvm.beschreibung, rvm.munichways_id, rvm.status_umsetzung, rvm.links, rvm.farbe, rvm.mapillary_img_id, rvm.bezirk_nummer, rvm.bezirk_name, rvm.netztyp_id, now() last_updated
FROM radlvorrangnetz rv, radlvorrangnetz_masterliste rvm 
where rv.cartodb_id=rvm.cartodbid_in_liste and rvm.farbe <> 'grau'
order by rv.cartodb_id desc
  • exportieren als GEO-JSON-Datei und lokal speichern als "radlvorrangnetz_app_V04_new.geojson" (V04 ab 21.03.2021 bereit, verwendet ab App-Version 0.0.9 bis V 1.1.1(17)

4. OSM class:bicycle exportieren

genutzt in https://t1p.de/Radnetzvergleich und in IST RadlVorrang-Netz Karte

Abfrage ausführen

  • die unten angegebene Abfrage ist bereits eingestellt in diesem Link
  • oder gehe zu http://overpass-turbo.eu/ und kopiere die folgende Abfrage in das Abfragefeld
[out:json][timeout:25];
// gather results
(
  area[admin_level=5]["name"="Oberbayern"]->.boundaryarea;
  // query part for: “"class:bicycle"=*node(area.boundaryarea)["class:bicycle"];
  way(area.boundaryarea)["class:bicycle"];
  relation(area.boundaryarea)["class:bicycle"];
);    
// print results
out body;
>;
out skel qt;
  • klicke auf "Ausführen". Auf die Frage "zu viele Daten" auf trotzdem ausführen klicken.

Exportieren als GeoJSON

  • Karte: Menü "Export" > Daten > GeoJSON > Download und lokal speichern als "osm_class_bicycle_munich_V01.geojson"

5. Upload auf Webserver und Download-Verzeichnis im Google-Drive

5a: FTP-Upload - ACHTUNG: 'normaler' ftp funktioniert nicht mehr, da jetzt eine SSL/TLS Verbindung benötigt wird. Unter Linux geht lftp!

  • Per LFTP-Client (Linux - Windows FileZilla?) am Webspace in hosteurope anmelden.

    • FTP Webspace Verzeichnis auswählen: /munways/2/App
    • Die lokal exportierten Dateien, "radlvorrangnetz_masterliste_V07.geojson", "radlvorrangnetz_app_V04_new.geojson", "radlvorrangnetz_app_V07_new.geojson" und "osm_class_bicycle_munich_V01.geojson", auswählen (Dateigröße prüfen, sollte ähnlich groß sein)
    • Die vorhandenen radlvorrangnetz_masterliste_V07 und osm_class_bicycle_munich_V01 Dateien werden in *_previous.geojson umbenannt. Dann sind alle vier Dateien hochzuladen.
  • Die notwendigen app Dateien müssenvor dem testen der MunichWays App und von GOAT umbenannt (_new) wird gelöscht) werden und dann automatisch geladen und angezeigt. Wichtig: Der vorherige Stand geht verloren, wenn die alten Dateien überschrieben werden!

  • Die Datei "osm_class_bicycle_munich_V01.geojson" wird automatisch in Carto alle 24 Stunden syncronisiert

  • App testen!

    • Hinweis: Es kann einige Minuten dauern, bis die Anzeige in der App aktualisiert ist. Zum testen App starten und unter Einstellungen im Hauptmenü auf "Karte neu laden" klicken.
  • Ablage Web: https://www.munichways.de/App/ (nur per API, nicht per Browser aufrufbar)

  • App:

  • GOAT: Zur Karte: https://muenchen.open-accessibility.org/

    • Klicke unten auf Layer und wähle „Street Level Quality“ – „Radwegequalität (MunichWays)“

* zusätzlich neueste masterliste in LHM Ordner hochladen * Ablage Web: https://www.munichways.de/munways/lhm (ftp client: /www/munways/lhm) * nur die aktuelle Masterliste: "radlvorrangnetz_masterliste_V....geojson"

5b: Im Google-Drive Download-Verzeichnis ablegen

Zusätzlich die lokal exportierten Dateien, "radlvorrangnetz_masterliste_V07.geojson", "radlvorrangnetz_app_V04_new.geojson", "radlvorrangnetz_app_V07_new.geojson" und "osm_class_bicycle_munich_V01.geojson" in unserem "Google Drive" Download-Verzeichnis unter \MunichWays_Dateien_geteilt\RadlVorrang-Netz\Download ablegen.

  • Die Masterliste verwendet Michael Hälsig für die Aktualisierung in QGIS https://radwegplanung-muenchen.de/.
  • Die App-Dateien sind als Backup gedacht, falls es mit den Dateien im ftp-Verzeichnis ein Problem gibt.

6. In Slack veröffentlichen

Im Channel 1-1_karten das erfolgte Update melden. … und feiern! Slack Channel 1-1_karten


7. RadlNavi optional

OSM Daten im Routing von RadlNavi aktualisieren. Die Aktualisierung vom RadlNavi ist automatisiert. Diese kann über GitHub getriggert werden. Dazu muss ein neues Release erstellt werden.

In Kurzform:

  • "Draft a new release" klicken
  • Dropdown "Choose a tag" klicken und Tag "Vnn" eingeben
  • Release Titel "vnn: Update OSM data"
  • "Publish release" klicken

8. Umap optional

Für interaktive Karten mit Umaps nur bei Bedarf aktualisieren.

RadlVorrang-Netz Ist/Plan/Ziel exportieren:

SQL-Anweisung:

SELECT rv.the_geom, rvm.name, rvm.strecke, rvm.ist_situation, rvm.happy_bike_level, rvm.soll_massnahmen, rvm.massnahmen_kategorie, rvm.beschreibung, rvm.munichways_id, rvm.status_umsetzung, rvm.bezirk_nummer, rvm.bezirk_name, now() last_updated
FROM radlvorrangnetz rv, radlvorrangnetz_masterliste rvm 
where rv.cartodb_id=rvm.cartodbid_in_liste 
and rvm.mw_rv_strecke<>'-' -- 1. Kriterium IST-Netz
-- and rvm.netztyp_plan_id in (1,2,3,4) -- 2. Kriterium PLAN-Netz
-- and rvm.netztyp_ziel_id in (1,2,3,4) -- 3. Kriterium ZIEL-Netz
order by rvm.munichways_id
  • exportieren als GEO-JSON-Datei und lokal speichern als radlvorrangnetz_IST.geojson, radlvorrangnetz_PLAN.geojson, radlvorrangnetz_ZIEL.geojson
  • in umaps importieren, Ebene auswählen und Haken setzen bei "Ebeneninhalt ersetzen"

x. Update QGIS https://radwegplanung-muenchen.de/ macht Michael

PostgreSQL DB auf Rechner mit QGIS-Server updaten

(erfordert lokale QGIS-Installation mit ogr2ogr und qgis_process!) und Datei "radlvorrangnetz_masterliste_V04.geojson" auf dem FTP-Server für die Stadtverwaltung zur Verfügung stellen. Dieser Schritt ist manuell notwendig, bis das Script per cron-Job von einem Server aus gestartet werden kann oder QGIS per API angebunden ist.

* Datei "radlvorrangnetz_masterliste_V04.geojson" im lokalen Verzeichnis ablegen. In den Umgebungsvariablen - $MW_FTP_USER den FTP-Nutzer für die Stadt eintragen - $MW_FTP_PASSWORD das Passwort dieses FTP-Nutzers eintragen - $DB_USER den DB-Nutzer für die Datenbank auf radwegplanung-muenchen.de eintragen - $DB_PASSWORD das Passwort des DB-Nutzers eintragen. * Dort das folgende Skript laufen lassen:

#!/bin/bash
#!/bin/bash
export MW_NC_USER=<xxx>
export MW_FTP_PASSWORD=<xxx>
export DB_USER=<xxx>
export DB_PASSWORD=<xxx>
echo "---------------------------Übertragen auf nextcloud"
curl --upload-file radlvorrangnetz_masterliste_V04.geojson -u 'nc-mhaelsig:198mhcsd!nc' https://nc.haelsig.net/remote.php/dav/files/nc-mhaelsig/GIS-Daten/$(date '+%d-%b-%Y')_radlvorrangnetz_masterliste_V04.geojson
echo "---------------------------Konvertieren MultiLineString nach LineString"
qgis_process run qgis:convertgeometrytype --INPUT=radlvorrangnetz_masterliste_V04.geojson --TYPE=2 --OUTPUT=radlvorrangnetz_masterliste_V04.korr.geojson
echo "---------------------------Übertragung zur Datenbank"
ogr2ogr -progress -overwrite -nln "Gesamtnetz_V4" -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt LINESTRING -f "PostgreSQL" PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" radlvorrangnetz_masterliste_V04.korr.geojson
echo "---------------------------Abschluss Übertragung zur Datenbank"
echo "---------------------------Selektiere Radlvorrangnetz (netztyp 1)"
ogr2ogr -where "netztyp='1_RadlVorrang-Strecke'" -f "GeoJSON" RVN_Netztyp1_korrigiert.geojson radlvorrangnetz_masterliste_V04.korr.geojson
echo "---------------------------Reduziere auf Stadtgebiet München"
qgis_process run native:clip --INPUT=RVN_Netztyp1_korrigiert.geojson --OVERLAY=/home/mhaelsig/QGIS/München/Zentren/Stadtgrenze_Polygon.geojson --OUTPUT=RVN_Netztyp1_clipped.geojson
echo "---------------------------Erzeuge Puffer für Radvorrangnetz"
qgis_process run qgis:buffer --INPUT=RVN_Netztyp1_clipped.geojson --DISTANCE=0.0025 --SEGMENTS=5 --END_CAP_STYLE=0 --JOIN_STYLE=0 --MITER_LIMIT=2 --DISSOLVE=0 --OUTPUT=RVN_Netztyp1_clipped_Puffer.geojson 
echo "---------------------------Schneide Baugebiete auf Puffer zu"
qgis_process run native:clip --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=RVN_Netztyp1_clipped_Puffer.geojson --OUTPUT=RVN_Netztyp1_Abdeckung.geojson
echo "---------------------------Erzeuge nicht abgedeckte Bereiche"
qgis_process run native:difference --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=RVN_Netztyp1_clipped_Puffer.geojson --OUTPUT=RVN_Netztyp1_nicht_abgedeckt.geojson
echo "---------------------------Übertrage Ergebnisse zur Datenbank"
ogr2ogr -progress -overwrite -nln RVN_Netztyp1_Puffer_200m -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" RVN_Netztyp1_clipped_Puffer.geojson
ogr2ogr -progress -overwrite -nln RVN_Netztyp1_Abdeckung -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" RVN_Netztyp1_Abdeckung.geojson
ogr2ogr -progress -overwrite -nln RVN_Netztyp1_nicht_abgedeckt -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" RVN_Netztyp1_nicht_abgedeckt.geojson
echo "---------------------------Selektiere Radlvorrangnetz (netztyp 1 + 2)"
ogr2ogr -where "netztyp='1_RadlVorrang-Strecke' or netztyp='2_RadlVorrang-Netz'" -f "GeoJSON" RVN_korrigiert.geojson radlvorrangnetz_masterliste_V04.korr.geojson
echo "---------------------------Reduziere auf Stadtgebiet München"
qgis_process run native:clip --INPUT=RVN_korrigiert.geojson --OVERLAY=/home/mhaelsig/QGIS/München/Zentren/Stadtgrenze_Polygon.geojson --OUTPUT=RVN_clipped.geojson
echo "---------------------------Erzeuge Puffer für Radvorrangnetz"
qgis_process run qgis:buffer --INPUT=RVN_clipped.geojson --DISTANCE=0.0025 --SEGMENTS=5 --END_CAP_STYLE=0 --JOIN_STYLE=0 --MITER_LIMIT=2 --DISSOLVE=0 --OUTPUT=RVN_clipped_Puffer.geojson 
echo "---------------------------Schneide Baugebiete auf Puffer zu"
qgis_process run native:clip --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=RVN_clipped_Puffer.geojson --OUTPUT=RVN_Abdeckung.geojson
echo "---------------------------Erzeuge nicht abgedeckte Bereiche"
qgis_process run native:difference --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=RVN_clipped_Puffer.geojson --OUTPUT=RVN_nicht_abgedeckt.geojson
echo "---------------------------Übertrage Ergebnisse zur Datenbank"
ogr2ogr -progress -overwrite -nln RVN_Puffer_200m -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" RVN_clipped_Puffer.geojson
ogr2ogr -progress -overwrite -nln RVN_Abdeckung -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" RVN_Abdeckung.geojson
ogr2ogr -progress -overwrite -nln RVN_nicht_abgedeckt -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=qgis_mw password=$DB_PASSWORD" RVN_nicht_abgedeckt.geojson
echo "---------------------------Selektiere Status AG Netzplanung beschlossen"
ogr2ogr -where "status_netzplanung='Aufnahme'" -f "GeoJSON" Netzplanung_Aufnahme.geojson radlvorrangnetz_masterliste_V04.korr.geojson
echo "---------------------------Reduziere auf Stadtgebiet München"
qgis_process run native:clip --INPUT=Netzplanung_Aufnahme.geojson --OVERLAY=/home/mhaelsig/QGIS/München/Zentren/Stadtgrenze_Polygon.geojson --OUTPUT=Netzplanung_Aufnahme_clipped.geojson
echo "---------------------------Erzeuge Puffer für Netzplanung Aufnahme"
qgis_process run qgis:buffer --INPUT=Netzplanung_Aufnahme_clipped.geojson --DISTANCE=0.0025 --SEGMENTS=5 --END_CAP_STYLE=0 --JOIN_STYLE=0 --MITER_LIMIT=2 --DISSOLVE=0 --OUTPUT=Netzplanung_Aufnahme_clipped_Puffer_200m.geojson 
echo "---------------------------Schneide Baugebiete auf Puffer zu"
qgis_process run native:clip --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=Netzplanung_Aufnahme_clipped_Puffer_200m.geojson --OUTPUT=Netzplanung_Aufnahme_Abdeckung.geojson
echo "---------------------------Erzeuge nicht abgedeckte Bereiche"
qgis_process run native:difference --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=Netzplanung_Aufnahme_clipped_Puffer_200m.geojson --OUTPUT=Netzplanung_Aufnahme_nicht_abgedeckt.geojson
echo "---------------------------Übertrage Ergebnisse zur Datenbank"
ogr2ogr -progress -overwrite -nln Netzplanung_Aufnahme_clipped_Puffer_200m -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=rad_muenchen password=$DB_PASSWORD" Netzplanung_Aufnahme_clipped_Puffer_200m.geojson
ogr2ogr -progress -overwrite -nln Netzplanung_Aufnahme_Abdeckung -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=rad_muenchen password=$DB_PASSWORD" Netzplanung_Aufnahme_Abdeckung.geojson
ogr2ogr -progress -overwrite -nln Netzplanung_Aufnahme_nicht_abgedeckt -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=rad_muenchen password=$DB_PASSWORD" Netzplanung_Aufnahme_nicht_abgedeckt.geojson
echo "---------------------------Selektiere Status AG Netzplanung beschlossen und offen"
ogr2ogr -where "status_netzplanung='Aufnahme' or status_netzplanung='offen' or status_netzplanung='offener Punkt'" -f "GeoJSON" Netzplanung_mit_offen.geojson radlvorrangnetz_masterliste_V04.korr.geojson
echo "---------------------------Reduziere auf Stadtgebiet München"
qgis_process run native:clip --INPUT=Netzplanung_mit_offen.geojson --OVERLAY=/home/mhaelsig/QGIS/München/Zentren/Stadtgrenze_Polygon.geojson --OUTPUT=Netzplanung_mit_offen_clipped.geojson
echo "---------------------------Erzeuge Puffer für Netzplanung beschlossen und offen"
qgis_process run qgis:buffer --INPUT=Netzplanung_mit_offen_clipped.geojson --DISTANCE=0.0025 --SEGMENTS=5 --END_CAP_STYLE=0 --JOIN_STYLE=0 --MITER_LIMIT=2 --DISSOLVE=0 --OUTPUT=Netzplanung_mit_offen_clipped_Puffer_200m.geojson 
echo "---------------------------Schneide Baugebiete auf Puffer zu"
qgis_process run native:clip --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=Netzplanung_mit_offen_clipped_Puffer_200m.geojson --OUTPUT=Netzplanung_mit_offen_Abdeckung.geojson
echo "---------------------------Erzeuge nicht abgedeckte Bereiche"
qgis_process run native:difference --INPUT='/home/mhaelsig/QGIS/München/Zentren/Einwohner/Baublöcke_mit_Einwohnerzahl.geojson' --OVERLAY=Netzplanung_mit_offen_clipped_Puffer_200m.geojson --OUTPUT=Netzplanung_mit_offen_nicht_abgedeckt.geojson
echo "---------------------------Übertrage Ergebnisse zur Datenbank"
ogr2ogr -progress -overwrite -nln Netzplanung_mit_offen_clipped_Puffer_200m -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=rad_muenchen password=$DB_PASSWORD" Netzplanung_mit_offen_clipped_Puffer_200m.geojson
ogr2ogr -progress -overwrite -nln Netzplanung_mit_offen_Abdeckung -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=rad_muenchen password=$DB_PASSWORD" Netzplanung_mit_offen_Abdeckung.geojson
ogr2ogr -progress -overwrite -nln Netzplanung_mit_offen_nicht_abgedeckt -lco FID=cartodb_id -lco GEOMETRY_NAME=geom -lco SCHEMA=public -lco LAUNDER=NO -nlt MultiPolygon -f PostgreSQL PG:"host=radwegplanung-muenchen.de port=5432 user=$DB_USER dbname=rad_muenchen password=$DB_PASSWORD" Netzplanung_mit_offen_nicht_abgedeckt.geojson
echo "---------------------------Abschluss Konvertierung und Übertragung"

* Prüfen, ob Import in QGIS geklappt hat (Radwegplanung München (radwegplanung-muenchen.de)

⚠️ **GitHub.com Fallback** ⚠️