GeoJSON – Das etwas andere Datenformat
Lars Möller | 9. Dezember 2019 | Technologie - Data Science

Was ist GeoJSON und wozu brauche ich es?

GeoJSON ist eine Form des weitaus bekannteren JSON Formates, das sich weltweit als gängiges, sehr kompaktes Datenaustauschformat etabliert und in verschiedensten Branchen und Anwendungen bewährt hat. GeoJSON basiert ebenfalls auf JavaScript, sowie auf der Objektnotation JSON, ist jedoch spezialisiert auf den Austausch von Geodaten. Hierfür definiert das GeoJSON Format verschiedene Arten von JSON-Objekten, sowie die Art und Weise, wie diese kombiniert werden können, damit letztlich Daten über folgende Entitäten dargestellt werden können:

  • Geografische Merkmale
  • Eigenschaften geographischer Merkmale
  • Räumliche Ausdehnung geographischer Merkmale

Zu den durch GeoJSON unterstützten Geometrien zählen:

  • Punkte – wie beispielsweise Adressen oder Straßenkreuzungen
  • Linien – wie beispielsweise ganze Straßen oder Flüsse
  • Polygone – wie beispielsweise Ländergrenzen oder Stadtgrenzen

Aufbau von GeoJSON

Im folgenden Beispiel sind diese drei Geometrien in einem GeoJSON File dargestellt:

{ "type": "FeatureCollection",
  "features": [
    { "type": "Feature",
      "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
      "properties": {"prop0": "value0"}
    },
    { "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
        ]
      },
      "properties": {
        "prop0": "value0",
        "prop1": 0.0
      }
    },
    { "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
            [100.0, 1.0], [100.0, 0.0] ]
        ]
      },
      "properties": {
        "prop0": "value0",
        "prop1": {"this": "that"}
      }
    }
  ]
}

Quelle

In einer übergeordneten Feature Collection befinden sich insgesamt 3 Features. Diese 3 Features besitzen jeweils eine eigenen Typ, nämlich eine der oben beschriebenen Geometrien. Zu den einzelnen Features bzw. Geometrien liefert GeoJSON darüber hinaus noch Informationen über die genauen Koordinaten der Geometrien, sowie wahlweise über weitere Eigenschaften (hier properties genannt). Auf diese Weise ist es via GeoJSON möglich, viele geografische Informationen kompakt zu vermitteln und zu transportieren.

Ein Schwenk aus dem Alltag

In Kontakt bin ich das erste Mal mit GEOJson im Zuge eines Projektes für einen großen Kunden aus der Energie- und Chemiebranche gekommen. Das Problem war, dass sich regelmäßig viel Stau um eines ihrer wichtigsten Werke gebildet hatte, weswegen immer wieder LKWs ihre Ladungen nur mit großer Verspätung anliefern bzw. abholen konnte.

Mithilfe von GEOJson Daten hatten wir jedoch Einblick in das Verkehrsaufkommen, rund um das besagte Werk. Ziel war es mithilfe des Statistik-Tools R, ein großes GEOJson File (ca. 4 Gb) einzulesen, auszuwerten, die Ergebnisse visuell aufzubereiten und Empfehlungen zu liefern, zu welchen Tageszeiten und über welche Straßen man verschiedene Fahrzeuge eventuell besser zum Werk leiten könnte, um Stau möglichst zu verhindern.

Ein Boost beim Einlesen der Daten

Das erste Problem trat beim Einlesen der Daten zu Tage. Der Code, den ich vorfand brauchte ca. 8 Stunden um die Daten einzulesen und in ein DataFrame zu transformieren, mit dem ich schließlich arbeiten konnte. Da dies für weitere Analysen nicht praktikabel war, habe ich angefangen nach Alternativen zu suchen und habe schließlich das Package geojsonR gefunden. Dieses Package nutzt eine optimierte C++11 JSON-Bibliothek (json11), um die Kodierung von und zu Geojson Datenobjekten durchzuführen, und alle Funktionen werden mit den Paketen Rcpp und RcppArmadillo in R exportiert. Darüber hinaus habe ich die Umwandlung in ein großes DataFrame mittels tidyverse optimiert, sodass ich schließlich die ursprünglichen 8 Stunden auf ca. 3,5 Minuten minimieren konnte.

Die weitere Verarbeitung der Daten

Die weitere Verarbeitung der Daten erfolgte dann ganz klassisch mit tidyverse, einer Kollektion äußerst nützlicher Data Science Packages in R. Aus dieser Reihe an Packages sind vor allem dplyr, sowie ggplot2 hervorzuheben. Mithilfe von dplyr und den integrierten Pipes ist es schnell und einfach möglich, Pipelines für die Datenmanipulation aufzubauen, sowie die für das Ziel wichtigen Metriken zu berechnen. Mit ggplot2 schließlich konnte ich alle Ergebnisse visualisieren und Erkenntnisse darüber gewinnen, wo und wann es nun beispielsweise zu Staus rund um das besagte Werk kam.

Conclusion

Wie so häufig als Berater, so wurde ich auch dieses Mal mit etwas Neuem konfrontiert. Zwar programmiere ich seit Jahren mit R, GeoJSON Files hatte ich jedoch zuvor noch nicht gesehen. Doch ganz R-typisch ist das kein Grund zur Panik. Mithilfe der richtigen Packages lassen sich GeoJSON Files recht schnell und einfach in strukturierte DataFrames umwandeln und folglich analysieren. Die Analyse selbst erfolgt mit den Packages, die jeder Data Scientist der mit R arbeitet, kennt und ist daher ebenfalls kein Hexenwerk. In diesem Sinne: Happy Coding.

Kommentare

38 + = 44

Die Angabe Ihrer E-Mail Adresse, sowie des Namens, sind optional. Wir nutzen Ihre E-Mail Adresse, um mit Ihnen in Kontakt zu treten, falls durch Ihren Kommentar Rechte Dritter verletzt werden. Ihre E-Mail Adresse wird von uns weder veröffentlicht oder weitergegeben. Weitere Informationen finden Sie auf der Datenschutz-Seite.

Suche
Über den Autor

Lars Möller

Lars Möller begann im November 2018 als Junior Data Scientist bei der German Management Consulting GmbH. Er ist studierter Psychologe mit der Vertiefung Mensch-Maschine-Interaktion und bringt folglich eine weitere Perspektive auf das Thema Data Science mit. Neben seinen statistischem Know-How, besitzt Lars ein umfassendes Wissen in den Bereichen Data Science, Machine Learning und Deep Learning.