Carto alt: Datasets Update Anleitung - MunichWays/Carto GitHub Wiki

Carto alt: jeden 1. Sonntag im Monat

Carto neu jeden Sonntag, siehe https://github.com/MunichWays/Carto/wiki/Datasets-Update-Anleitung

0. Datasets synchronisieren

Mehrere Datasets wie "radlvorrangnetz_masterliste" oder "ist_radlvorrangnetz_munichways_v20" werden automatisch alle 24 Stunden vom Google Drive synchronisiert.

  • manuell aktualisieren/syncronisieren: In Carto anmelden
  • im Reiter oben "Data" ist_radlvorrangnetz_munichways_v20 ö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.
  • das gleiche auch für IST_radlvorrangnetz_munichways_v20 durchführen

1. Optionale Checks (nicht mehr nötig)

Da wir keine Carto Linien mehr ändern, sollten diese Checks überflüssig sein. Grobe Fehler in der Masterliste könnten nach wie vor eine Fehlerquelle sein.

  • 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 (06.2024 47 Fälle) aber keine cartodbid_in_liste als Ergebnis --> falls doch Behebung: mehrfache cartodbid_in_liste in der Masterliste löschen

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. OSM class:bicycle exportieren

3a Köln Optional nur auf Anfrage oder bei Bedarf

genutzt in der App.

[out:json][timeout:25];
// gather results
(
  area[admin_level=5]["name"="Regierungsbezirk Köln"]->.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_regierungsb_koeln_V01.geojson"
  • In Carto alt als Dataset importieren, vorhandene vorher umbenennen.

### 3b Bayern veraltet genutzt in https://t1p.de/Radnetzvergleich und in IST RadlVorrang-Netz Karte

* 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"

4. GEO-JSON-Dateien für die App, QGIS usw. exportieren

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

### 4a: 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)

SQL~~ ~~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) - Neu V06 (05.2022): Massnahmen_Blatt, Massnahmen_Index (aus REM-Kriterien: https://drive.google.com/drive/folders/1G8e9e_gKU5WQS6M8YMnbAdzrb0AYcmkA ) - Neu V05 (05.2022): Netztyp_Plan, Netztyp_Plan_ID, Netztyp_Ziel, Netztyp_Ziel_ID

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)

4b: App-Datei (app_V07 abgespeckt)

Nur die relevanten Felder für die App

  • neu mit OSM Daten angereichert ab 05.03.2024 und ab 23.03.2024 plus Regierungsbezirk Köln, ohne alte Carto Daten ab 20.05.2024

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

SELECT 
0 as cartodb_id, 
m20.the_geom, 
COALESCE(m20.osm_name, m20.munichways_name, m20.osm_surface, NULL) AS name, 
  NULL as strecke, 
COALESCE(m20.munichways_mw_rv_route, '-') as MW_RV_Strecke, 
COALESCE(m20.munichways_current, CONCAT('Oberfläche: ', CONCAT_WS(', ', 
         m20.osm_surface,
         CONCAT('Ebenheit: ', m20.osm_smoothness),
         CONCAT('Straßentyp: ', m20.osm_highway)
))) AS ist_situation,
case when m20.osm_class_bicycle='3' then '3 = hervorragend = grün'
     when m20.osm_class_bicycle='2' then '2 = gemütlich = grün'
     when m20.osm_class_bicycle='1' then '1 = durchschnittlich = gelb'
     when m20.osm_class_bicycle='0' then '0 = keine Aussage'
     when osm_class_bicycle='-1' then '-1 = stressig = rot'
     when m20.osm_class_bicycle='-2' then '-2 = sehr stressig = schwarz'
     when m20.osm_class_bicycle='-3' then '-3 = Unter allen Umständen vermeiden = schwarz'
     when m20.osm_class_bicycle is null then ''
     else 'ungültiger Wert'
End happy_bike_level,
m20.munichways_target as soll_massnahmen, 
COALESCE(m20.munichways_measure_category_link, '<a href="https://www.munichways.de/infrastruktur-elemente/" target="_blank">alle Infrastruktur-Elemente </a>') as massnahmen_kategorie_link, 
m20.munichways_description as beschreibung, 
m20.munichways_id, 
m20.munichways_status_implementation as status_umsetzung,
m20.munichways_links as links, 
CASE WHEN m20.color = 'green' THEN 'grün'
     WHEN m20.color = 'yellow' THEN 'gelb'
     WHEN m20.color = 'red' THEN 'rot'
     WHEN m20.color = 'black' THEN 'schwarz'
     WHEN m20.color = 'blue' THEN 'grau' -- class:bicycle=0
     ELSE '-'
END as farbe,
COALESCE(substring(m20.munichways_mapillary_link from 'pKey=([0-9]+)'), '211265577336913')::text as mapillary_img_id,
NULL as bezirk_nummer, 
NULL as bezirk_name, 
4 as netztyp_id, 
COALESCE(m20.munichways_route_link, '<a href="https://www.munichways.de/unsere-radlvorrang-strecken/" target="_blank">-n/a-Alle-Wege </a>') as strecken_link, 
now() last_updated
FROM 
    public.ist_radlvorrangnetz_munichways_v20 m20
where m20.color <> 'blue' -- class:bicycle=0

/* ohne alte Carto Daten, weil mapping komplett
UNION ALL

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
    INNER JOIN radlvorrangnetz_masterliste rvm ON rv.cartodb_id = rvm.cartodbid_in_liste 
WHERE 
    rvm.farbe <> 'grau'
    AND NOT EXISTS (
        SELECT 1 
        FROM 
            public.ist_radlvorrangnetz_munichways_v20 m20 
        WHERE 
            m20.munichways_id = rvm.munichways_id
        or m20.munichways_id like '%,%' -- 2 munichways_id doppelt gemappt
    )
ende deaktivierung alte Carto Daten */	

UNION ALL

SELECT 
0 as cartodb_id, 
rk.the_geom, 
rk.name AS name, 
NULL as strecke, 
NULL as MW_RV_Strecke, 
COALESCE(CONCAT('Oberfläche: ', CONCAT_WS(', ', 
         rk.surface,
         CONCAT('Ebenheit: ', rk.smoothness),
         CONCAT('Straßentyp: ', rk.highway)
))) AS ist_situation,
case when rk.class_bicycle='3' then '3 = hervorragend = grün'
     when rk.class_bicycle='2' then '2 = gemütlich = grün'
     when rk.class_bicycle='1' then '1 = durchschnittlich = gelb'
     when rk.class_bicycle='0' then '0 = keine Aussage'
     when rk.class_bicycle='-1' then '-1 = stressig = rot'
     when rk.class_bicycle='-2' then '-2 = sehr stressig = schwarz'
     when rk.class_bicycle='-3' then '-3 = Unter allen Umständen vermeiden = schwarz'
     when rk.class_bicycle is null then ''
     else 'ungültiger Wert'
End happy_bike_level,
NULL as soll_massnahmen, 
'<a href="https://www.munichways.de/infrastruktur-elemente/" target="_blank">alle Infrastruktur-Elemente </a>' as massnahmen_kategorie_link, 
rk.note as beschreibung, 
NULL as munichways_id, 
NULL as status_umsetzung,
NULL as links, 
CASE WHEN rk.class_bicycle in ('2', '3') THEN 'grün'
     WHEN rk.class_bicycle='1' THEN 'gelb'
     WHEN rk.class_bicycle='-1' THEN 'rot'
     WHEN rk.class_bicycle in ('-2', '-3') THEN 'schwarz'
     ELSE '-'
END as farbe,
NULL as mapillary_img_id,
NULL as bezirk_nummer, 
NULL as bezirk_name, 
4 as netztyp_id, 
NULL as strecken_link, 
now() last_updated
FROM 
    public.osm_class_bicycle_regierungsb_koeln_V01 rk
  • exportieren als GEO-JSON-Datei und lokal speichern als "radlvorrangnetz_app_V07.geojson". (V07 ab 22.11.2022 ab App-Version 1.1.2(18))

  • Alt nur Carto bis 04.03.2024:

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

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.geojson" (V04 ab 21.03.2021 bereit, verwendet ab App-Version 0.0.9 bis V 1.1.1(17)

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 vorhandenen "radlvorrangnetz_masterliste_V07.geojson", "osm_class_bicycle_munich_V01.geojson" und "osm_class_bicycle_regierungsb_koeln_V01.geojson" Dateien werden in *_previous.geojson umbenannt.
    • Die lokal exportierten Dateien "radlvorrangnetz_masterliste_V07.geojson", "osm_class_bicycle_munich_V01.geojson" und "osm_class_bicycle_regierungsb_koeln_V01.geojson", auswählen (Dateigröße prüfen, sollte ähnlich groß sein) und hochladen.
    • Die "radlvorrangnetz_app_V07.geojson" ins Unterverzeichnis "save" hochladen und in "*_YYYYMMDD.geojson" umbenennen
    • Die notwendigen app Dateien müssen vor dem testen der MunichWays App und von GOAT ins übergeordentet Verzeichnis kopiert und dann umbenannt ("_YYYYMMDD") wird gelöscht) werden, sie werden dann automatisch geladen und angezeigt.
      * Die Datei "osm_class_bicycle_munich_V01.geojson" wird automatisch in Carto alle 24 Stunden syncronisiert * Das Ergebnis ist am nächsten Tag in der Carto-Karte OSM-Abgleich sichtbar in https://t1p.de/Radnetzvergleich. * Mehr Beschreibungen und Beispiele zu overpass turbo in github MunichWays OSM Wiki.
  • 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_V07.geojson", ~"osm_class_bicycle_regierungsb_koeln_V01.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/. 2024-06-24: Michael muss noch umsteigen auf die 20er Datei. radlvorrangnetz_masterliste_V07.geojson wird ab Juni 2024 nicht mehr von uns aktualisiert.
  • 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


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** ⚠️