Skip navigation
All Places > GeoDev Germany > Blog > Authors s.geigenbergeresri-de-esridist

Das Beschaffen von Geodaten ist bei vielen Projekten eine zeitaufwendige Arbeit. Dies müssen nicht in jedem Fall hochgenaue Daten sein. Für manche Fragestellungen sind auch Input von Open Streetmap ausreichend. Sei es für Studentenprojekte, sich einen Überblick über eine Thematik zu verschaffen oder eine Zielgruppe mit Informationen zu versorgen. Es besteht die Möglichkeit diese Daten herunterzuladen, in ArcMap oder ArcGIS Pro zu importieren, die gewünschten Daten zu filtern und dann beispielsweise als Dienst zu veröffentlichen. Dieser Weg ist sehr zeitintensiv und daher bedarf es einer Lösung, um die Datenquelle Open Streetmap mit der ArcGIS Plattform direkt zu verbinden, ohne den Umweg über ein Desktopprodukt nehmen zu müssen.

 

 

Zur Umsetzung dieser Idee bietet sich die ArcGIS API for Python an, da diese neben diversen Analysetools auch einen vielseitigen Zugriff auf ArcGIS Online und ArcGIS for Portal anbietet. So wurden basierend auf dieser Technologie verschiedene Python Skripte erstellt und auf GitHub veröffentlicht. Ziel dieses Projekt ist es, dass Daten innerhalb eines festzulegenden Bereichs automatisch als Feature Service veröffentlicht werden.

 

Die Umsetzung erfolgte in zwei Python Skripten, die auch separat genutzt werden können. Bevor der Prozess mit den Daten erfolgen kann, muss der Nutzer jedoch zwei Konfigurationsdateien anpassen. Eine dieser Dateien legt die Konfiguration für die zu veröffentlichenden OSM Daten mittels eines JSON Files fest. Um das Skript starten zu können müssen verschiedene Parameter, wie sie in der Tabelle beschrieben sind, festgelegt werden.

 

 

Neben einer Liste von Kategorien, die in OSM als Paar von Key und Value dargestellt werden, können auch weitere Attribute von den Datensätzen übernommen werden. Zudem müssen eine Bounding Box, sowie die gewünschten Geometrien angegeben werden. Basierend auf diesem Input, wird ein Pythonskript ausgeführt, welches die gewünschten Daten mittels Requests an die Overpass und OSM API abruft.

 

response = api.Get('node[' + category + '](' + minLat + ',' + minLon + ',' 
                               + maxLat + ',' + maxLon + ')', responseformat="json")
            elements = response["elements"]
            for element in elements:
                dictElement = {}
                tags = [element["tags"]]
                tags = tags[0]
                for key_att in attributes:
                    val_att = attributes[key_att]
                    if val_att in tags:
                        dictElement[key_att] = tags[val_att]
                id = element["id"]
                #id = float(id)
                dictElement["id"] = id
                dictElement["lon"] = element["lon"]
                dictElement["lat"] = element["lat"]
                if "user" in attributes or "timestamp" in attributes:
                    try:
                        node = oApi.NodeGet(element["id"])
                        if "user" in attributes:
                            if "user" in node.keys():
                                dictElement["user_"] = node["user"]
                        if "timestamp" in attributes:
                            if "timestamp" in node.keys():
                                dictElement["timestamp"] = node["timestamp"]
                    except:
                        print("Node for this element not available")
                dictElement["attribute"] = key_cat + "-" + val_cat
                dictData.append(dictElement)

 

 Diese Daten werden nun in einem Dictionary strukturiert, in einen pandas Dataframe umgewandelt und zur weiteren Verwendung zurückgegeben.In einem zweiten JSON File werden die Konfigurationen für ArcGIS Online oder ArcGIS for Portal festgelegt.

 

 

Wenn die benötigten Daten vorhanden sind, werden diese auf Korrektheit überprüft. Dies bedeutet, dass eine Verbindung mittels der Login Informationen hergestellt wird. Dies ist nötig, um sicherzustellen, dass die Feature Service ID korrekt ist, wenn dieser überschrieben werden soll. Wenn der Input vollständig und korrekt ist, wird ein weiteres Pythonskript gestartet. Beim Updaten eines Feature Services wird dieser geleert, der Dataframe in Blöcke zerteilt und zu jeweils 100 Features in den Features Service hinzugefügt.

 

listAddFeatures = []
    i = 0
    dataAvailable = True
    dataUploaded = False
    dataQuery = fc_dataAdd.query()
   
    while dataAvailable:
        modulo_i = i % 100
        if modulo_i == 0 and i != 0 and not dataUploaded:
            layer.edit_features(adds = listAddFeatures)
            listAddFeatures.clear()
            dataUploaded = True
            print(str(i)+" Features of "+str(len(dataQuery))+" added.")
        else:
            try:
                listAddFeatures.append(dataQuery.features[i])
                i = i + 1
                dataUploaded = False
            except:
                dataAvailable = False
       
    layer.edit_features(adds = listAddFeatures)
    print("All "+str(len(dataQuery))+" Features added.")

 

Beim Erstellen eines neuen Feature Services fallen vor dem Upload der Daten weitere Arbeitsschritte an, denn es muss ein leerer Feature Service mit den benötigten Felder angelegt werden. Hierfür erstellt man einen neuen Dataframe, welcher nur die Titelzeile des Übergebenen enthält. Nun wird durch alle vorhandenen Felder iteriert und die Felder mit dem Datentyp „int64“ in eine neue Liste hinzugefügt.

 

newField = {
     "name" : intFieldName,
     "type" : "esriFieldTypeInteger",  
     "alias" : intFieldName,
     "sqlType" : "sqlTypeBigInt",
     "nullable" : True,
     "editable" : True,
     "visible" : True
     }
   
token_URL = "{}/sharing/generateToken".format(portal)
token_params = {'username' : user,
      'password' : password,
      'client' : 'referer',
      'referer': portal,
      'expiration': 60,
      'f' : 'json'
      }

r = requests.post(token_URL,token_params)
       
token_obj = r.json()
       
token = token_obj['token']
expires = token_obj['expires']
       
tokenExpires = datetime.datetime.fromtimestamp(int(expires)/1000)
       
featureLayerAdminUrl = layerURL.replace("/rest/", "/rest/admin/")
       
params = {"f":"json", "token":token}
params["addToDefinition"] = json.dumps({"fields":[newField]})
       
layerUpdateUrl = "{}/addToDefinition".format(featureLayerAdminUrl)
layerResult = requests.post(layerUpdateUrl, params)

 

Dieser Schritt ist wichtig, denn beim Veröffentlichen eines Feature Services mittels der ArcGIS API for Python werden Integer Felder nur als „int32“ angelegt und bei höheren Werten treten Fehler auf. Nun wird ein Feature Service erstellt und die „int64“ Felder mittels eines Requests an die Portal API hinzugefügt, denn auf diesem Weg können höhere Integerwerte gespeichert werden.

 

for field in listBigInt:
        del dataframe_total_title[field]
       
fc = gis.content.import_data(dataframe_total_title)
   
item_properties_input = {
    "title": title,
    "tags" : tags,
    "description": description,
    "text": json.dumps({"featureCollection": {"layers": [dict(fc.layer)]}}),
    "type": "Feature Collection",
}

item = gis.content.add(item_properties_input)
new_item = item.publish()

 

Nun ist der Service mit allen benötigten Attributen angelegt und die Features können in Blöcken, wie beim Update, hinzugefügt werden.

 

Ergebnis ist ein GitHub Repository, welches die verschiedenen Skripten enthält. Diese können somit in dem aktuellen Status oder auch einzeln verwendet werden. Zudem ist es möglich die Abläufe an die eigenen Bedürfnisse anzupassen. So könnte man das Skript auch um Methoden erweitern, um die Daten nicht als Feature Service, sondern als Shape File oder Geodatabase zu speichern.

 

Mit diesem Tool ist es gelungen eine Brücke zwischen der reichhaltigen Open Streetmap Datenbasis und der mächtigen ArcGIS Plattform zu schlagen. 

Die Technologie der Augmented Reality hält seit langem Einzug in unser tägliches Leben. Als Anfang kann man das Einblenden von verschiedenen Zusatzinformationen in Sportübertragungen nennen. Beispiele hierfür sind die Torentfernung von Freistößen im Fußball oder die Sprungweite des führenden Sportlers beim Skispringen. Hierbei handelt es sich lediglich um die visuelle Darstellung einer Information und die interaktive Komponente fehlt komplett. Mit der Entwicklung von Smartphones mit großer Rechenkapazität und der wachsenden Leistung des GPS und der mobilen Datennetze können auch immer mehr Augmented Reality Anwendungen genutzt werden. Diese Neuentwicklungen bieten dem User oftmals Möglichkeiten interaktiv in die erweiterte Realität einzugreifen. Der letzte große Augmented Realy Hype wurde mit dem Spiel Pokémon Go im Jahr 2016 ausgelöst, stellt aber neben dem Zweck der Unterhaltung keinen Mehrwert für das alltägliche Leben dar.

 

 

 

Um allen ArcGIS Nutzern die Möglichkeit zu bieten ihre Daten in einer Augmented Realty betrachten zu können wurde von Esri Labs die AuGeo App, welche als Download in iTunes und dem Google Play Store zur Verfügung steht, entwickelt. Diese Anwendung ermöglicht es eigens gehostete Feature Services mit Punkt Geometrie in einer erweiterten Realität anzuzeigen, wie man es an folgendem Beispiel mit mehreren Berggipfeln sehen kann.

 

 

Die Punktfeatures werdem zum realen Kamerabild ergänzt und am entsprechenden Ort angezeigt. Zudem wird die Entfernung zum aktuellen Standpunkt berechnet und weitere Attribute und Medien können angezeigt werden.

 

Der erste Schritt um eigene Daten in der App nutzen zu können ist es eine Layer View auf den Feature Service zu erzeugen. Hierfür wird die ArcGIS Online Oberfläche genutzt. Wan wählt den gewünschten Feature Service und wechselt in den Visualization Tab. In dieser Ansicht können Filter, Symbologien und Pop-Ups definiert werden, welche dann für die Darstellung in der AuGeo App übernommen werden. Wenn alle gewünschten Einstellungen getroffen wurden, ist die aktuelle Ansicht als neuer Layer zu speichern. Bei diesem Schritt ist zu beachten, dass der Tag „horizon“ angegeben werden muss, damit die Features in der AuGeo App zur Darstellung ausgewählt werden können. Wenn diese Einstellungen getroffen wurden kann der neue Layer gespeichert und in der App genutzt werden.

 

Wenn die App auf dem Device installiert ist kann man diese direkt öffnen und benutzen. Zuerst klickt man auf   und wählt im erscheinenden Menü “Data Source“ und „Sign in to get more data sources“. Nun öffnet sich das bekannte ArcGIS Online Login Fenster. Sobald man sich nun in seinen ArcGIS Online Account eingeloggt hat sind alle verfügbaren Layer sichtbar und können zum Download ausgewählt werden, damit sie auch offline genutzt werden können.

 

 

Nun sieht man die Features, in diesem Beispiel Gebäude der Universität Augsburg, in der echten Welt positioniert. Auf der Leiste am rechten Bildschirmrand lässt sich das Zoom einstellen. Dadurch werden Punkte in der Ferne detaillierter, aber das Sichtfenster schränkt sich ein, wie man im 2D Kartenausschnitt links unten sehen kann.  

 

 

Dieser Kartenausschnitt stellt zusätzlich einen Kompass dar und alle Features die in diesem Kartenausschnitt liegen werden visualisiert. Ein Berühren der 2D Darstellung maximiert den Kartenausschnitt auf die komplette Displaygröße und es kann zwischen verschiedenen Basemaps gewählt werden.

 

 

Bei weiterem Betrachten des Menüs sind weitere Möglichkeiten zur Individualisierung hervorzuheben. Man hat die Möglichkeit einen Grenzwert für die maximale Entfernung der anzuzeigenden Daten festzulegen. Bei den Gebäuden eines Campus ist eine geringere Distanz sinnvoll, wohingegen die Darstellung von Berggipfeln einer wesentlich größeren Distanz bedarf. Wählt man die Möglichkeit „Settings“ öffnet sich eine neue Ansicht, welche fünf Tabs enthält.

 

 

Der Tab “Display” enthält Einstellungsmöglichkeiten für die Maximale Distanz der darzustellenden Features und verschiedene Visualisierungen der Übersichtskarte, wie man in diesem Vergleich sehen kann.

 

 

In den weiteren Tabs können Informationen wie Höhe über dem Boden, in Pop-ups enthaltene Informationen oder das genutzte Kameramodell festgelegt werden.

 

Neben der Möglichkeit der Ready to Use App steht auch ein AuGeo Template für das AppStudio for ArcGIS zur Verfügung. Hier kann das Template im Qt Creator individualisiert werden. Neben der visuellen Anpassung an ein eigenes Branding können auch Funktionen erweitert, angepasst und neu eingefügt werden.

 

 

Abschließend kann man diese App als sehr positiv bewerten, denn es erweitert die ArcGIS Produktfamilie um eine weitere Facette, macht die Arbeit mit den eigenen GIS Daten noch interessanter und kann diverse Arbeiten und Fragestellungen erleichtern. Neben den hier genannten Beispielen kann man auch auf Anwendungsfälle hinweisen, bei denen die angezeigten Features in der Realität nicht sofort sichtbar sind. Ein Beispiel hierfür sind Hydranten, die unter Schnee und Kies verborgen sind oder Vermessungsmarken, die im Laufe der Zeit auch von Erde und Kies überdeckt werden. Wie man sieht geht das Potential von Augmented Reality weit über Unterhaltung hinaus und kann in Kombination mit Geodaten viele Bereiche der Lebens- und Arbeitswelt erleichtern.

 

 

Anfang 2017 wurde vom Zentrum Digitalisierung Bayern der Wettbewerb “Mobility Innovation Competition @ Campus”(MICC) ausgeschrieben.  Dieser Wettbewerb richtete sich an Studenten bayerischer Hochschulen und Universitäten. Im Rahmen der Teilnahme sollten sie sich mit der zukünftigen Mobilität als Thematik auseinandersetzen und eine Produktidee entwickeln, die im Rahmen eines Startups umgesetzt werden könnten.

 

Die Competition war in drei Stufen aufgebaut. Zuerst musste ein Proposal eingereicht werden, welches die Projektidee, gewählte Methoden und einen Businessplan beschreibt. Aus den Teams, welche ein Proposal eingereicht hatten, wurden circa zwanzig zu einer Veranstaltung Ende April nach Nürnberg eingeladen. Auf dieser hatte jedes Team drei Minuten Zeit zum pitchen der eigenen Idee. Insgesamt 15 Teams wurden am Ende für die Projektphase zugelassen. Danach hatten sie drei Monate Zeit um erste Teile der Ideen umzusetzen. Auf einer Abschlussveranstaltung im Juli in München wurden die Projekte präsentiert und die Sieger prämiert.

 

 

Linus Lambrecht und ich, Simon Geigenberger, studieren beide im Master Geoinformatik an der Universität Augsburg. Wir wurden auf die Ausschreibung aufmerksam gemacht und waren sofort dazu entschlossen teilzunehmen. Bei der Suche nach einem passenden Thema stießen wir schnell auf das Problem der hohen Feinstaubwerte in deutschen Innenstädten und waren uns einig, dass ein Fahrverbot von Fahrzeugen mit Brennstoffmotoren keine adäquate Lösung darstellt, sondern dass es eine Möglichkeit geben muss dynamisch und nach Bedarf Maßnahmen ergreifen zu können. Unsere Idee war es, eine Plattform namens „Clean Routing“ zu entwickeln. Diese richtet sich speziell an Großstädte mit Feinstaubproblemen. Drei Bausteine stellen die zentralen Elemente dar.

 

 

Primärer und wichtigster Bestandteil ist eine Anwendung für die Stadtverwaltungen, welche eine Vorhersage für Feinstaubwerte darstellt. Die Vorhersagewerte werden unter Berücksichtigung der Wetterdaten mit Hilfe eines Modells berechnet, welches in einem Python Skript implementiert wurde. Diese Berechnung wird dauerhaft durch ein Maschinelles Lernverfahren optimiert. Das aktuelle Modell liefert für Städte, welche sich in unseren Breiten befinden eine Genauigkeit von über 90 Prozent. Die Datensätze, welche zum Trainieren des Modells verwendet wurden, sind aus den Frühlingsmonaten dieses Jahres. Da es noch keine Daten aus Wintermonaten gibt, kann das Modell erst nach dem Winter für diese Monate angepasst werden. Dies ist nötig, weil sich die Feinstaubwerte bei kalten Temperaturen und Schneefall anders entwickeln als in den restlichen Jahreszeiten. Wenn eine Überschreitung des, von der EU festgelegten, Wert für einen Feinstaubalarm vorhergesagt wird, dann hat die Stadt nun früh genug die Möglichkeit Maßnahmen zu ergreifen um den Schwellwert nicht zu übertreffen. Maßnahmen wären beispielsweise, dass gefährdete Gebiete umfahren werden sollen.  

 

Es soll eine weitere Anwendung für Privatpersonen entstehen. Diese App berechnet basierend auf den Feinstaubwerten alternative Routen, die gefährdete Gebiete umfährt oder direkt auf Verkehrsmittel auf dem ÖPNV umsteigt. Da man die Privatperson nicht mit Verboten dazu zwingen will den Öffentlichen Nahverkehr zu nutzen, kann ihm dies mit verschiedenen Angeboten schmackhaft gemacht werden. Diese Angebote wiederum müssen von Seiten der Stadtverwaltung gewählt werden und eine anziehende Wirkung auf die Privatpersonen haben. Beispiele hierfür sind reduzierte Preise für ÖPNV Tickets oder die Möglichkeit einen Park + Ride Parkplatz zu reservieren. Des Weiteren besteht für den Nutzer die Möglichkeit seine Fahrten zu planen und in diese Planung bereits die vorhergesagten Feinstaubwerte und daraus resultierende Überschreitungen von Grenzwerten miteinzubeziehen.

 

Dieser Planungsservice kann auch in einer dritten Anwendung für Unternehmen, wie Handwerksbetriebe oder Speditionen, integriert werden. Diese Unternehmen wissen bereits im Vorhinein ihre Routen und können diese so in den Arbeitsplan einpassen, dass Gebiete in den Zeiten vermieden werden, wenn sich ein Feinstaubalarm anbahnt. Bei den Maßnahmen der Stadt handelt es sich um keine strikten Verbote, sondern lediglich um Vorschläge und Richtlinien. Daher ist es notwendig, dass es neben den bereits genannten Angebote für Privatpersonen weitere Anreize gibt, welche die Verkehrsteilnehmer dazu bewegen das alternative Routing wahrzunehmen.

 

 

Originale Route mit Simulierten Feinstaubwerten

 

Alternative Route (grün) und Route mit ÖPNV (blau)

 

 

 

Bisher wurden die technischen Bausteine für die Vorhersage der Feinstaubwerten und das multimodale Routing implementiert. Somit fehlt noch die Einbindung der verschiedenen Komponenten in eine Benutzeroberfläche um mit den verschiedenen Anwendungen in eine Testphase zu gehen. Da es sich um Skripte, zentrale Datenhaltung und darauf basierenden Anwendungen mit Routingoption handelt bietet sich ArcGIS Online hervorragend als Plattform an, um die Bestandteile zusammenzuführen und technisch Umzusetzen. Ob und wie wir das Produkt weitergestalten ist noch offen, da wir uns beide im Endspurt unseres Studiums befinden. Dennoch ist die Problematik der hohen Feinstaubwerten in deutschen Innenstädten noch zu lösen. Wir sehen unser Produkt als eine optimale Lösung für diese Thematik, da keine Verkehrsteilnehmer benachteiligt werden und dennoch die Zahl der Fahrzeuge mit Brennstoffantrieb in Städten reduziert werden könnte.

 

Leider konnten wir uns mit dem Projekt nicht in den preisgekrönten Rängen positionieren. Trotzdem blicken wir positiv auf die Teilnahme am Wettbewerb zurück. Diese war eine sehr interessante Erfahrung, denn es wurden sehr viele Disziplinen gefordert und es konnte alles im Studium erlernte zusammengeführt werden. Es war sehr spannend und lehrreich für uns aus einer Idee den Weg zu einem Produkt und den dazugehörigen Businessplan zu entwickeln.

 

Bei weiteren Fragen zu unserem Projekt stehen wir gerne zur Verfügung:

 

Simon Geigenberger: simon@geigenberger.info

Linus Lambrecht: linus.lambrecht@gmx.de

Filter Blog

By date: By tag: