Aktionen

NetCDF Packen von Daten: Unterschied zwischen den Versionen

Aus BAWiki

imported>Lang Guenther
(Links to existing pages added by LinkTitles bot.)
 
(3 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 3: Zeile 3:


Das Packen von Daten dient der Verminderung der Datenmenge durch Reduktion der Genauigkeit, mit der die Daten in eine Datei geschrieben werden.
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:
# Statt ''[[POLY|poly]]'' wird ''face'' benutzt.


=Beispiel=
=Beispiel=
==Maximale Genauigkeit==
==Maximale Genauigkeit==
:: double Mesh2_poly_water_level(time,nMesh2_poly) ;
double Mesh2_face_water_level(time,nMesh2_face) ;
::: Mesh2_poly_water_level:standard_name = "'''sea_surface_height_above_geoid'''" ;     
: Mesh2_face_water_level:standard_name = "'''sea_surface_height_above_geoid'''" ;     
::: Mesh2_poly_water_level:long_name = "water level for 2D mesh polygons" ;     
: Mesh2_face_water_level:long_name = "water level for 2D mesh faces (polygons)" ;     
::: Mesh2_poly_water_level:units = "m" ;
: Mesh2_face_water_level:units = "m" ;
::: Mesh2_poly_water_level:coordinates = "Mesh2_poly_lon Mesh2_poly_lat" ;
: Mesh2_face_water_level:coordinates = "Mesh2_face_lon Mesh2_face_lat" ;
::: Mesh2_poly_water_level:_FillValue = ''fillvalue'' ;
: Mesh2_face_water_level:_FillValue = ''fillvalue'' ;
::: Mesh2_poly_water_level:valid_range = ''valid minimum'', ''valid maximum'' ;
: Mesh2_face_water_level:valid_range = ''valid minimum'', ''valid maximum'' ;
::: Mesh2_poly_water_level:cell_methods = "nMesh2_poly: mean"  
: Mesh2_face_water_level:cell_methods = "nMesh2_face: mean"  
::: Mesh2_poly_water_level:cell_measures = "area: Mesh2_poly_wet_area_2d" ;
: Mesh2_face_water_level:cell_measures = "area: Mesh2_face_wet_area_2d" ;
::: Mesh2_poly_water_level:grid_mapping = "crs" ;
: Mesh2_face_water_level:grid_mapping = "crs" ;


==Reduzierte Genauigkeit==
==Reduzierte Genauigkeit==
:: <font color=blue>short integer</font> Mesh2_poly_water_level(time,nMesh2_poly) ;
<font color=blue>short integer</font> Mesh2_face_water_level(time,nMesh2_face) ;
::: Mesh2_poly_water_level:standard_name = "'''sea_surface_height_above_geoid'''" ;     
: Mesh2_face_water_level:standard_name = "'''sea_surface_height_above_geoid'''" ;     
::: Mesh2_poly_water_level:long_name = "water level for 2D mesh polygons" ;     
: Mesh2_face_water_level:long_name = "water level for 2D mesh faces (polygons)" ;     
::: Mesh2_poly_water_level:units = "m" ;
: Mesh2_face_water_level:units = "m" ;
::: Mesh2_poly_water_level:coordinates = "Mesh2_poly_lon Mesh2_poly_lat" ;
: Mesh2_face_water_level:coordinates = "Mesh2_face_lon Mesh2_face_lat" ;
::: Mesh2_poly_water_level:_FillValue = ''fillvalue'' ;
: Mesh2_face_water_level:_FillValue = ''fillvalue'' ;
::: Mesh2_poly_water_level:valid_range = ''valid minimum'', ''valid maximum'' ;
: Mesh2_face_water_level:valid_range = ''valid minimum'', ''valid maximum'' ;
::: Mesh2_poly_water_level:cell_methods = "nMesh2_poly: mean"  
: Mesh2_face_water_level:cell_methods = "nMesh2_face: mean"  
::: Mesh2_poly_water_level:cell_measures = "area: Mesh2_poly_wet_area_2d" ;
: Mesh2_face_water_level:cell_measures = "area: Mesh2_face_wet_area_2d" ;
::: <font color=blue>Mesh2_poly_water_level:add_offset = ''offset''</font> ;
: <font color=blue>Mesh2_face_water_level:add_offset = ''offset''</font> ;
::: <font color=blue>Mesh2_poly_water_level:scale_factor = ''scalefactor''</font> ;
: <font color=blue>Mesh2_face_water_level:scale_factor = ''scalefactor''</font> ;
::: Mesh2_poly_water_level:grid_mapping = "crs" ;
: 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.
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.

Aktuelle Version vom 30. Mai 2017, 13:12 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.

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