Aktionen

NetCDF Packen von Daten: Unterschied zwischen den Versionen

Aus BAWiki

imported>Lang Guenther
imported>Lang Guenther
Zeile 5: Zeile 5:


=Beispiel=
=Beispiel=
==Daten mit voller maximaler Genauigkeit==
==Daten mit maximaler Genauigkeit==
:: double Mesh2_poly_water_level(time,nMesh2_poly) ;
:: double Mesh2_poly_water_level(time,nMesh2_poly) ;
::: Mesh2_poly_water_level:standard_name = "'''sea_surface_height_above_geoid'''" ;     
::: Mesh2_poly_water_level:standard_name = "'''sea_surface_height_above_geoid'''" ;     
Zeile 16: Zeile 16:
::: Mesh2_poly_water_level:cell_measures = "area: Mesh2_poly_wet_area_2d" ;
::: Mesh2_poly_water_level:cell_measures = "area: Mesh2_poly_wet_area_2d" ;
::: Mesh2_poly_water_level:grid_mapping = "crs" ;
::: Mesh2_poly_water_level:grid_mapping = "crs" ;
==Gepackte Daten mit reduzierter Genauigkeit==
==Gepackte Daten mit reduzierter Genauigkeit==
:: <font color=blue>short integer</font> Mesh2_poly_water_level(time,nMesh2_poly) ;
:: <font color=blue>short integer</font> Mesh2_poly_water_level(time,nMesh2_poly) ;

Version vom 14. September 2010, 07:52 Uhr

Kurze Beschreibung

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

Beispiel

Daten mit maximaler Genauigkeit

double Mesh2_poly_water_level(time,nMesh2_poly) ;
Mesh2_poly_water_level:standard_name = "sea_surface_height_above_geoid" ;
Mesh2_poly_water_level:long_name = "water level for 2D mesh polygons" ;
Mesh2_poly_water_level:units = "m" ;
Mesh2_poly_water_level:coordinates = "Mesh2_poly_lon Mesh2_poly_lat" ;
Mesh2_poly_water_level:_FillValue = fillvalue ;
Mesh2_poly_water_level:valid_range = valid minimum, valid maximum ;
Mesh2_poly_water_level:cell_methods = "nMesh2_poly: mean"
Mesh2_poly_water_level:cell_measures = "area: Mesh2_poly_wet_area_2d" ;
Mesh2_poly_water_level:grid_mapping = "crs" ;

Gepackte Daten mit reduzierter Genauigkeit

short integer Mesh2_poly_water_level(time,nMesh2_poly) ;
Mesh2_poly_water_level:standard_name = "sea_surface_height_above_geoid" ;
Mesh2_poly_water_level:long_name = "water level for 2D mesh polygons" ;
Mesh2_poly_water_level:units = "m" ;
Mesh2_poly_water_level:coordinates = "Mesh2_poly_lon Mesh2_poly_lat" ;
Mesh2_poly_water_level:_FillValue = fillvalue ;
Mesh2_poly_water_level:valid_range = valid minimum, valid maximum ;
Mesh2_poly_water_level:cell_methods = "nMesh2_poly: mean"
Mesh2_poly_water_level:cell_measures = "area: Mesh2_poly_wet_area_2d" ;
Mesh2_poly_water_level:add_offset = offset ;
Mesh2_poly_water_level:scale_factor = scalefactor ;
Mesh2_poly_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.

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 ergibt sich eine reelle Zahl.


zurück zu NetCDF


Strukturübersicht