Hier könnt ihr euer Projekt strukturieren und planen, Aufgaben verteilen und Dateien und Daten austauschen. Mit dem Stift-Button oben rechts kommt ihr in den Bearbeitungsmodus. Ihr könnt auch gleichzeitig an der Seite arbeiten. Hilfreiche Tipps und Tricks für das Arbeiten im Wiki findet ihr im Hilfebereich des GDI-DE Wikis.

Idee / Konzept

Beschreibt die Grundidee und das Ziel eurer Challenge im Hackathon. Was wollt ihr in der Zeit erreichen? Was ist die Kernidee, und warum ist dieser Ansatz sinnvoll?

Unsere Idee ist es, dass die Daten von den Radstationen zusammen mit den WetterDaten etc. in einer Karte dargestellt werden, welche integriert ist in ein Dashboard, um weitere Grafiken darzustellen.

Die Daten sollen mit einem Prozess regelmäßig abgefragt werden und in ein Feature Layer geschrieben werden, sodass die Daten aktuell angezeigt werden können. 

Folgende Daten sollen integriert werden: Wetterdaten, Radzählstationsdaten, Radwege (+ Bodenbelag?), Reparaturstationen und Unfalldaten.

 
Projektplanung / Zeitplanung

Eine kurze Übersicht über die Schritte, die zur Erfüllung der Challenge notwendig sind. Welche Aufgaben werden in den verschiedenen Phasen des Hackathons erledigt?

Was?Wie?
Unfalldaten besorgen

Aus dem ArcGIS Living Atlas of the World den Datensatz nutzen. Daten aufbereiten, in dem nur die Fahrraddatensätze erhalten bleiben.

https://hs-bochum.maps.arcgis.com/home/item.html?id=02438a92814447d08353cc2ee29895e8

Prozess schreibenJupyter notebooks
Radwegedaten besorgen

https://www.radroutenplaner-bw.de/api/geoserver/radvis-infrastrukturen/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng8&TRANSPARENT=true&LAYERS=radvisnetz-radnetz&TILED=true&STYLES=Netzklassen&WIDTH=384&HEIGHT=384&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A135&BBOX=853648.7318888493%2C6090502.413762843%2C856094.716793975%2C6092948.398667969


mit Bodenbelag: 

https://overpass-turbo.eu/s/1UxW

für geojson: https://gis.stackexchange.com/questions/220577/is-it-possible-to-get-osm-data-in-geojson-via-overpass-api-using-ipython


Zusammen (BAWÜ und geojson): https://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%5Btimeout%3A25%5D%3B%0Aarea%28id%3A3600062611%29-%3E.searchArea%3B%0Away%5B%22bicycle%22%3D%22designated%22%5D%28area.searchArea%29%3B%0Aconvert%20item%20%3A%3A%3D%3A%3A%2C%3A%3Ageom%3Dgeom%28%29%2C_osm_type%3Dtype%28%29%3B%0Aout%20geom%3B


Radnetz Stadt Karlsruhe:

https://www.daten-bw.de/web/guest/suchen/-/details/radnetz-stadt-karlsruhe

Reperaturstationsdaten besorgen

https://www.radroutenplaner-bw.de/api/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=rrpbw-poi:radservice-punkte-point&outputFormat=application/json&bbox=1021039.1428004464,6235563.371489238,1032909.9380952499,6243825.531190794,EPSG:3857
Wetterdaten besorgenDWD-API via Jupyter notebooks
Dashboard erstellenExperience builder

Historischen Fahrradzähldaten zusammenfügen

CSV Dateien aus der Excel Tabelle herunterladen, extrahieren und zusammenfügen über Terminal 


Coding / Umsetzung

Erklärt, wie ihr die Entwicklung angeht. Welche Technologien oder Programmiersprachen nutzt ihr, um die Idee möglichst effizient umzusetzen? Auch legt hier gerne euren verwendeten Code ab.

Es wurde im Jupyter Notebook mit Python gearbeitet. Ebenfalls wurde ESRI No-Code verwendet.


Aufbereitung der Wetterdaten mit dem Jupyter Notebook. Verbindung zum Deutschen Wetterdienst über API. Wetterstationen im Umkreis von 10 km um die Zählstationen gesucht. Werte (Temperatur, Niederschlag) der nächstgelegenen Station für jeden Tag des Jahres 2023 abgefragt und anschließend in eine CSV Datei konvertiert. Anschließend war noch eine kurze Formatierung nötig, um die Daten effektiv nutzen zu können. 

Code:

```python

  1. import the GIS class in gis module
    from arcgis.gis import GIS
    from datetime import datetime
    from arcgis.features import GeoAccessor, GeoSeriesAccessor
    import pandas as pd
    ```

```python
gis = GIS('home')
```

```python
current_data = gis.content.get('2f40cb60d9ac4f15abc7a480141bc933')
current_data
```

```python
current_layer = current_data.layers[0]
current_df = current_layer.query().sdf
```

```python

  1. Daten laden
    new_data = pd.read_csv('https://mobidata-bw.de/daten/eco-counter/v2/fahrradzaehler_stundenwerten.csv')
  1. Aktuellen Layer abrufen und Spatially Enabled DataFrame erstellen
    current_layer = current_data.layers[0]
    current_df = current_layer.query().sdf
  1. Konvertiere iso_timestamp in datetime und berücksichtige Zeitzonen (UTC)
    current_df["iso_timestamp"] = pd.to_datetime(current_df["iso_timestamp"], errors="coerce", utc=True)
    new_data["iso_timestamp"] = pd.to_datetime(new_data["iso_timestamp"], errors="coerce", utc=True)
  1. Optional: Konvertiere die Zeitzone von UTC nach Europe/Berlin (+01:00)
  2. current_df["iso_timestamp"] = current_df["iso_timestamp"].dt.tz_convert("Europe/Berlin")
  3. new_data["iso_timestamp"] = new_data["iso_timestamp"].dt.tz_convert("Europe/Berlin")
  1. Unix-Timestamp berechnen (Zeitzonen berücksichtigt, da UTC gesetzt)
    current_df["unix_timestamp"] = current_df["iso_timestamp"].view('int64') // 10**9
    new_data["unix_timestamp"] = new_data["iso_timestamp"].view('int64') // 10**9
  1. Bereinige counter_site_id (Kleinschreibung und Leerzeichen entfernen)
    current_df["counter_site_id"] = current_df["counter_site_id"].astype(str).str.strip().str.lower()
    new_data["counter_site_id"] = new_data["counter_site_id"].astype(str).str.strip().str.lower()
  1. Erstelle die "id"-Spalte
    current_df["id"] = current_df["counter_site_id"] + "_" + current_df["unix_timestamp"].astype(str)
    new_data["id"] = new_data["counter_site_id"] + "_" + new_data["unix_timestamp"].astype(str)
  1. Filtere die einzigartigen Daten in der neuen Datei
    new_unique_data = new_data[~new_data["id"].isin(current_df["id"])]
  1. Überprüfe, ob es neue Daten gibt
    if len(new_unique_data) == 0:
    print("Keine neuen Daten zum Hinzufügen.")
    else:
  2. Geometrie aus Längen- und Breitengrad erstellen
    new_unique_data["SHAPE"] = [
    Unknown macro: {"x"}
    for x, y in zip(new_unique_data["longitude"], new_unique_data["latitude"])]
  1. In Spatially Enabled DataFrame konvertieren
    new_sedf = GeoAccessor.from_xy(new_unique_data, x_column="longitude", y_column="latitude")
  1. Formatiere iso_timestamp für den FeatureService
    new_sedf["iso_timestamp"] = new_sedf["iso_timestamp"].dt.strftime("%Y-%m-%dT%H:%M:%S")
  1. FeatureSet erstellen
    feature_set = new_sedf.spatial.to_featureset()
  1. Daten direkt in den FeatureService einfügen
    res_edit = current_layer.edit_features(adds=feature_set)
  1. Überprüfe das Ergebnis
    if 'addResults' in res_edit and all(result['success'] for result in res_edit['addResults']):
    print("Daten erfolgreich angefügt.", res_edit)
    else:
    print("Fehler beim Hinzufügen der Daten:", res_edit)

```

```python
new_unique_data
```

Schwierigkeiten

Welche Herausforderungen sind während der Bearbeitung der Challenge aufgetreten? Gab es technische Hürden oder Zeitdruck? Beschreibe kurz die Schwierigkeiten und wie ihr sie gelöst habt.

Als Schwierigkeit hat sich die Datenbeschaffung von Verkehrsnetzen herausgestellt, bei denen die Beschaffenheit der Straße mit angegeben wird (Asphalt, Kopfstein, Schotter, Waldweg, ...). Diese Daten wurden nicht für das gesamte Bundesland Baden-Württemberg gefunden.

Eine Herausforderung bestand darin, eine Zeitreihe für die Daten grafisch im GIS darzustellen. 

Für das Thema Radverkehr stehen viele Daten für z.B. Radzählstationen (5,8 Millionen Punkte im Zeitraum 2023-heute) zur Verfügung. Diese nahmen einen großen Anteil an Rechenzeit in Anspruch.

Präsentation

Für das Finale: Nutzt die vorgegebene Präsentationsvorlage, um das Projekt kurz und prägnant vorzustellen und die wichtigsten Aspekte und Ergebnisse zu zeigen.

Bitte verwendet für die Präsentation eures Projektes diese Vorlage: 

Ergebnisse

Für das Finale: Nutzt die vorgegebene Präsentationsvorlage, um das Projekt kurz und prägnant vorzustellen und die wichtigsten Aspekte und Ergebnisse zu zeigen.

Bitte verwendet für die Präsentation eures Projektes diese Vorlage: 

QR Code zur Webseite des Konzepts der BOings.

💡 Bitte ladet eure Abschlusspräsentation hier hoch (über die Funktion "Dateien und Bilder einfügen" im Bearbeiten-Menü der Seite)

Allgemein

Platz für euer Feedback, d.h. weitere Beobachtungen, Lernerfahrungen oder Empfehlungen. Was möchtet ihr uns noch mitgeben?

Vielen Dank, dass Sie sich die Mühe gemacht haben, glutenfreies Essen zu organisieren.

Zu nett hier (Lächeln)

Das Wiki optimieren. Es lief zu Anfang sehr langsam. 




  • Keine Stichwörter