-
Notifications
You must be signed in to change notification settings - Fork 3
Verwendung der JSONReader
Die JSON-Reader können Städte, Flüge, Tweets, Niederschlags-, Temperatur-, Wind- und Wolkenbedeckungsdaten aus entsprechenden JSON-Dateien lesen. Deren API ist folgendermaßen zu verwenden.
Ein neuer Reader für eine Datei wird mittels der JSONReaderFactory
erstellt:
JsonReader jsonReader = JsonReaderFactory::createReader(QString filename);
Mittels eines Readers können die Daten als vtkPolyData
ausgegeben werden:
vtkSmartPointer<vtkPolyData> polyData = jsonReader.getVtkDataSet(int zoomLevel);
Die Koordinaten der Punkte befinden sich direkt im vtkPolyData
-Objekt. Auf sie kann folgendermaßen zugegriffen werden:
double pointCoordinates[3];
polyData->GetPoint(int index, pointCoordinates); // Values copied into double array
Die eigentlichen Daten für die jeweiligen Punkte befinden sich in sogenannten Data-Arrays im vtkPolyData
-Objekt. Diese können folgendermaßen verwendet werden. Dafür muss der Name des jeweiligen Arrays bekannt sein. Dieser ergibt sich aus dem Name des Attributs wie hier beschrieben mit einem angehängten s
. Beispielsweise ist der Array-Name für Niederschlagsraten precipitationRates
.
Zusätzlich existiert in jedem Datensatz das Array priorities
mit den Zoomleveln jedes Punkts und in jedem temporalen Datensatz das Array timestamps
.
vtkSmartPointer<vtkStringArray> stringArray = vtkStringArray::SafeDownCast(
polyData->GetPointData()->GetAbstractArray(std::string arrayName)
);
stringArray->GetNumberOfValues(); // Number of entries in the array
stringArray->GetValue(int index); // Get a stored string value
vtkSmartPointer<vtkTypeFloat32Array> floatArray = vtkTypeFloat32Array::SafeDownCast(
polyData->GetPointData()->GetArray(std::string arrayName)
);
floatArray->GetNumberOfComponents(); // Number of entries in the array
floatArray->GetValue(int index); // Get a stored float value
32-Bit-Integer-Arrays werden hauptsächlich für Timestamps und Zoomlevel verwendet.
vtkSmartPointer<vtkTypeInt32Array> integerArray = vtkTypeInt32Array::SafeDownCast(
polyData->GetPointData()->GetArray(std::string arrayName)
);
integerArray->GetNumberOfComponents(); // Number of entries in the array
integerArray->GetValue(int index); // Get a stored integer value
Flugdaten haben zwei Besonderheiten: Das Array mit den Zielkoordinaten hat den Name destinations
. Außerdem sind diese jeweils in Zweier-Tupeln mit Längen- und Breitengrad abgespeichert. Auf diese kann folgendermaßen zugegriffen werden:
vtkSmartPointer<vtkTypeFloat32Array> destinations = vtkTypeFloat32Array::SafeDownCast(
polyData->GetPointData()->GetArray("destinations")
);
destinations->GetNumberOfComponents(); // Number of entries in the array
destinations->GetTuple2(int index)[0]; // Latitude of the stored destination
destinations->GetTuple2(int index)[1]; // Longitude of the stored destination