NetCDF Packen von Daten: Unterschied zwischen den Versionen
Aus BAWiki
imported>Lang Guenther |
imported>Lang Guenther |
||
Zeile 33: | Zeile 33: | ||
=Vorgehensweise= | =Vorgehensweise= | ||
==Packen== | |||
# 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. | |||
# Daten schreiben. | |||
==Entpacken== | |||
# Daten lesen; | |||
# 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]] | zurück zu [[NetCDF]] | ||
---- | ---- | ||
[[Strukturübersicht]] | [[Strukturübersicht]] |
Version vom 14. September 2010, 07:51 Uhr
Kurze Beschreibung
Packen von Daten dient der Verminderung der Datenmenge durch Reduktion der Genauigkeit, mit der die Daten in eine Datei geschrieben werden.
Beispiel
Daten mit voller 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" ;
- double Mesh2_poly_water_level(time,nMesh2_poly) ;
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" ;
- short integer Mesh2_poly_water_level(time,nMesh2_poly) ;
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
- 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.
- Daten schreiben.
Entpacken
- Daten lesen;
- 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