Skip to content

Dateiformat für JSON Daten

Jan Tagscherer edited this page Feb 19, 2016 · 7 revisions

Datentypen

Es handelt sich um Daten, die entweder nur von einer Ortsinformation oder von Orts- und Zeitinformationen abhängen. Bei beiden werden alle Knoten geographisch angeordnet, letztere Art von Knoten trägt zusätzlich einen Timestamp.

Die Knoten erhalten je nach Datentyp eine Metrik, um sie nach Wichtigkeit zu bewerten, was später im Level-of-Detail-System verwendet wird. Das kann beispielsweise die Größe einer Stadt oder die Länge eines Fluges sein. Aus der Metrik soll eine ganzzahlige Priorität zwischen 0 und 7 folgen, wobei 0 die höchste Priorität darstellt. Dies wird in der Datei dadurch repräsentiert, dass ein Knoten der Wichtigkeit n demjenigen Knoten der Wichtigkeit n - 1 untergeordnet wird, der ihm geographisch am nächsten ist.

Nicht-temporale Daten

Nicht-zeitabhängige Daten bestehen aus einem einfachen Baum in JSON-Notation, der beispielsweise folgendermaßen aussehen kann:

{
  "meta": {
    "dataType": "cities",
    "temporal": false
  },
  "root": {
    "children": [
      {
        "name": "Dubai",
        "longitude": 55.304718,
        "latitude": 25.258171,
        "children": []
      },
      {
        "name": "Los Angeles",
        "longitude": -118.242775,
        "latitude": 34.052223,
        "children": [
          {
            "name": "San Francisco",
            "longitude": -122.418335,
            "latitude": 37.775,
            "children": [
              {
                "name": "Burlingame",
                "longitude": -122.365,
                "latitude": 37.584167,
                "children": []
              }
            ]
          }
        ]
      }
    ]
  }
}

Temporale Daten

Zeitabhängige Daten enthalten zusätzlich einen UNIX-Timestamp, werden aber dennoch primär geographisch angeordnet. Zudem enthält jede Datei das Attribut timeResolution, das die Länge eines Zeitschritts in Sekunden angibt.

{
  "meta": {
    "dataType": "tweets",
    "temporal": true,
    "timeResolution": 60
  },
  "root": {
    "children": [
      {
        "author": "BarackObama",
        "content": "Progress #president",
        "timestamp": 1439297110,
        "longitude": 55.304718,
        "latitude": 25.258171,
        "children": []
      },
      {
        "author": "elonmusk",
        "content": "Is this working?",
        "timestamp": 1439280065,
        "longitude": -118.242775,
        "latitude": 34.052223,
        "children": [
          {
            "author": "nytimes",
            "content": "This volcano looks like it is erupting #lava #dangerous",
            "timestamp": 1439288745,
            "longitude": -122.418335,
            "latitude": 37.775,
            "children": []
          }
        ]
      }
    ]
  }
}

Payloads

Lässt man das children-Attribut für die Baumstruktur aus, so enthalten die Knoten jeder Art von Datentyp einen Payload, der die eigentlichen Informationen beschreibt.

Zudem hat jeder dieser Datentypen einen Meta-Header. Payload und Header werden in diesem Abschnitt spezifiziert.

Städte (nicht-temporal)

Header:

"meta": {
  "dataType": "cities",
  "temporal": false
}

Payload:

"name": "Dubai",
"longitude": 55.304718,
"latitude": 25.258171

Flüge (nicht-temporal)

Header:

"meta": {
  "dataType": "flights",
  "temporal": false
}

Payload:

"startPosition": {
  "airportCode": "DXB",
  "longitude": 55.304718,
  "latitude": 25.258171
},
"endPosition": {
  "airportCode": "LAX",
  "longitude": -118.242775,
  "latitude": 34.052223
},
"airline": "Lufthansa"

Tweets (temporal)

Header:

"meta": {
  "dataType": "tweets",
  "temporal": true,
  "timeResolution": 60
}

Payload:

"author": "nytimes",
"content": "This volcano looks like it is erupting #lava #dangerous",
"timestamp": 1439288745,
"longitude": -122.418335,
"latitude": 37.775

Niederschlag (temporal)

Header:

"meta": {
  "dataType": "precipitation",
  "temporal": true,
  "timeResolution": 60
}

Payload:

"precipitationRate": 24, // Millimetres per hour
"precipitationType": "snow", // Could be 'rain', 'snow', 'sleet', 'hail' or 'NoData'
"timestamp": 1439288745,
"longitude": -122.418335,
"latitude": 37.775

Temperatur (temporal)

Header:

"meta": {
  "dataType": "temperature",
  "temporal": true,
  "timeResolution": 60
}

Payload:

"temperature": 21, // Degrees Celsius
"timestamp": 1439288745,
"longitude": -122.418335,
"latitude": 37.775

Wind (temporal)

Header:

"meta": {
  "dataType": "wind",
  "temporal": true,
  "timeResolution": 60
}

Payload:

"speed": 0.4, // Metres per second
"direction": 120, // Degrees, with 0 being true North, progressing clock-wise
"timestamp": 1439288745,
"longitude": -122.418335,
"latitude": 37.775

Bewölkung (temporal)

Header:

"meta": {
  "dataType": "cloudCover",
  "temporal": true,
  "timeResolution": 60
}

Payload:

"cloudCover": 0.4, // Cloud coverage (value in interval [0, 1])
"timestamp": 1439288745,
"longitude": -122.418335,
"latitude": 37.775