Aktionen

NetCDF Packen von Daten

Aus BAWiki

Kurze Beschreibung

Das Packen von Daten dient der Verminderung der Datenmenge durch Reduktion der Genauigkeit, mit der die Daten in eine Datei geschrieben werden.

Die Beschreibung wurde am 5. 4. 2012 an die Deltares-Konventionen angepasst. Die wichtigsten Änderungen sind:

  1. Statt poly wird face benutzt.

Beispiel

Maximale Genauigkeit

double Mesh2_face_water_level(time,nMesh2_face) ;

Mesh2_face_water_level:standard_name = "sea_surface_height_above_geoid" ;
Mesh2_face_water_level:long_name = "water level for 2D mesh faces (polygons)" ;
Mesh2_face_water_level:units = "m" ;
Mesh2_face_water_level:coordinates = "Mesh2_face_lon Mesh2_face_lat" ;
Mesh2_face_water_level:_FillValue = fillvalue ;
Mesh2_face_water_level:valid_range = valid minimum, valid maximum ;
Mesh2_face_water_level:cell_methods = "nMesh2_face: mean"
Mesh2_face_water_level:cell_measures = "area: Mesh2_face_wet_area_2d" ;
Mesh2_face_water_level:grid_mapping = "crs" ;

Reduzierte Genauigkeit

short integer Mesh2_face_water_level(time,nMesh2_face) ;

Mesh2_face_water_level:standard_name = "sea_surface_height_above_geoid" ;
Mesh2_face_water_level:long_name = "water level for 2D mesh faces (polygons)" ;
Mesh2_face_water_level:units = "m" ;
Mesh2_face_water_level:coordinates = "Mesh2_face_lon Mesh2_face_lat" ;
Mesh2_face_water_level:_FillValue = fillvalue ;
Mesh2_face_water_level:valid_range = valid minimum, valid maximum ;
Mesh2_face_water_level:cell_methods = "nMesh2_face: mean"
Mesh2_face_water_level:cell_measures = "area: Mesh2_face_wet_area_2d" ;
Mesh2_face_water_level:add_offset = offset ;
Mesh2_face_water_level:scale_factor = scalefactor ;
Mesh2_face_water_level:grid_mapping = "crs" ;

Durch Übergang von einer Variablen des Typs Double (8 Byte) zu Short Integer (2 Byte) wird der Speicherbedarf um ca. 75 % reduziert. Erforderlich ist in diesem Fall die zusätzliche Angabe der Attribute add_offset und scale_factor, mit deren Hilfe die reellwertigen Daten auf ganze Zahlen abgebildet werden. Es ist zu beachten, dass der _FillValue nicht in den Daten enthalten sein darf. valid_range und _FillValue müssen vom gleichen Typ wie die gepackten Daten sein. add_offset und scale_factor dürfen sich dagegen vom Typ der gepackten Daten unterscheiden.

Vorgehensweise

Packen

  1. Loop über alle Datenwerte:
    • falls der Wert mit _FillValue übereinstimmt, so wird der Wert unverändert übernommen;
    • sonst zunächst add_offset subtrahieren und anschließend durch scale_factor dividieren.
  2. Daten schreiben.

Entpacken

  1. Daten lesen;
  2. Loop über alle Datenwerte:
    • falls der Wert mit _FillValue übereinstimmt, so wird der Wert unverändert übernommen;
    • sonst Wert zunächst mit scale_factor multiplizieren und anschließend add_offset addieren.

Sind sowohl die Variable als auch der _FillValue ganzzahlige Größen, so ist das Ergebnis nach dem Entpacken ebenfalls ganzzahlig. Ansonsten ist das Ergebnis reellwertig.


zurück zu NetCDF


Strukturübersicht