Uitwisselingsformaten gegevensbestanden
Uitwisselingsformaten gegevensbestanden
1 2 3
4 5 6 7
8 9 10 11
Inleiding............................................................................................................................................ 4 1.1 Gegevensniveaus.................................................................................................................. 4 Belangrijke aspecten ....................................................................................................................... 5 Een overzicht van veel gebruikte formaten ..................................................................................... 5 3.1 ASCII (Comma-separated-value, delimited) ......................................................................... 5 3.2 DONAR uitwisselingsformaat ................................................................................................ 6 3.3 Hiërarchical Data Format (HDF)............................................................................................ 6 3.4 Overige formaten voor wetenschappelijke data .................................................................... 6 3.5 Meteorologische uitwisselingsformaten (GRIB, BUFR) ........................................................ 6 3.6 MATLAB bestanden .............................................................................................................. 6 3.7 GIS formaten ......................................................................................................................... 7 Situatie op dit moment ..................................................................................................................... 7 Aanbevelingen voor uitwisselen wind-bestanden tussen KNMI en HMCZ, HMR, RIKZ................. 7 Meer informatie op het internet........................................................................................................ 8 Huidige ASCII Wind- en luchtdruk formaat...................................................................................... 9 7.1 Voorbeeld zoals geleverd door Albert Jacobs....................................................................... 9 7.2 Voorbeeld WAQWND invoer op dit moment (binair)............................................................. 9 Omschrijving van het huidige ASCII formaat (Jacobs).................................................................. 10 HDF ASCII formaat........................................................................................................................ 13 Een voorbeeld windveld in HAIF formaat ...................................................................................... 16 DONAR ASCII uitwisselingsformaat.............................................................................................. 18 11.1 Grid type 1 ........................................................................................................................... 18 11.2 Grid type 2 ........................................................................................................................... 19
Version 1.0
3
28-6-06
Uitwisselingsformaten gegevensbestanden
1
Inleiding
Bij het koppelen van modellen van verschillende instituten (en soms ook binnen instituten) speelt regelmatig de vraag in welk formaat de gegevens worden overgedragen. Helaas is het vaak zo dat voor de opslag van modelresultaten en metingen gebruik wordt gemaakt van een zelfontworpen formaat. Buiten het feit dat dit extra ontwikkeltijd kost is dit zeer ongunstig voor het uitwisselen van formaten. Uit dit oogpunt is het ontwikkelen maar vooral ook gebruiken van standaardformaten van harte aan te bevelen. Het gebruik van modelspecifieke formaten is echter vaak geen onwil van de ontwikkelaar maar komt eerder voort uit het ontbreken van algemeen geaccepteerde standaarden. Want in tegenstelling tot bijvoorbeeld bitmap-figuren bestaat er op dit moment voor (wetenschappelijke) databestanden geen algemeen geaccepteerde standaard. Wel zijn er voor een aantal deelgebieden (bijv. meteorologie) standaardformaten in gebruik en worden er pogingen ondernomen om algemene standaarden te ontwikkelen, zoals bijv. HDF. Bij incidentele overdracht worden vaak kleine ad-hoc programmaatjes ontwikkeld om de gegevens van het ene in het andere formaat om te zetten. Vaak wordt dan tevens gebruik gemaakt van ASCII om gegevens van het ene naar het andere platform te kunnen verplaatsen. ASCII is echter op zich geen oplossing voor het probleem omdat dit alleen een formaat voor tekens (en evt. getallen) is. Voor ingewikkelder informatie is geen standaard. Als er vaker gegevens moeten worden uitgewisseld wordt het raadzaam een formaat af te spreken zodat de programmatuur voor de transformatie iets degelijker kan worden uitgevoerd, zodat bijv. ook anderen ermee kunnen werken. Nog mooier is het om gebruik te maken van een standaard-uitwisselingsformaat. Dit maakt direct de communicatie met een of meerdere andere partijen mogelijk. In een aantal gevallen is een deel van de software die rond dit formaat is ontwikkeld beschikbaar en hoeft er geen of minder nieuwe programmatuur ontwikkeld te worden.
1.1 Gegevensniveaus Bij het transporteren van (wetenschappelijke/model/metingen) gegevens kan een aantal niveaus worden onderscheiden: Op het laagste niveau worden tekens of getallen uitgewisseld. Een belangrijke standaard hiervoor is ASCII. Cijfers in ASCII formaat kunnen worden uitgewisseld tussen verschillende typen computers. Wel zijn er vaak nog aanvullende gegevens nodig over de manier waarop een getal is opgeslagen, bijv.: 7.28 (in fortran f4.2) of 1.233E-3 (in fortran g8.3) etc. Veel programma’s kunnen dit soort getallen ‘free-format’ lezen, d.w.z. het format hoeft niet te worden opgegeven (het sterretje in fortran). In vrijwel alle serieuze applicaties en programmeertalen kunnen dit soort getallen worden gelezen. Voor binaire data bestaan soortgelijke afspraken, bijv. het IEEE formaat. Op het tweede niveau wordt het formaat van een groep gegevens geregeld. Bijvoorbeeld 23 1.0 2.0 3.0 0.0 1.0 3.1 is een mogelijke notatie voor: er volgt een 2x3 matrix en vervolgens de getallen gescheiden door spaties en returns. Het gebruik van spaties en returns wordt vaak ‘blank delimited’ genoemd. Veel programma’s kunnen dit soort formaten lezen. Vaak zijn ook de afmetingen niet nodig. Een andere veel gebruikte standaard voor blokken ASCII gegevens is ‘comma separated value’ hierbij worden de getallen gescheiden door comma’s. Voor binaire gegevens zijn soortgelijke formaten nodig, met de beperking dat free format niet mogelijk is omdat het lezende programma dan geen idee heeft wat er met de data wordt bedoeld. Op het derde niveau wordt de metadata geregeld. Het gaat hier bijvoorbeeld om de eenheid van de getallen, de versie van het programma waarmee de gegevens berekend zijn, de tijdzone, het coördinatenstelsel, enz. Het gaat er bij deze metadata vooral om de gegevens een betekenis te geven; om aan te geven dat het windvelden zijn, dat deze met HIRLAM in analyse-mode berekend zijn en dat alle tijden relatief t.o.v. 19-2-1989 zijn. Voor dit type data zijn eigenlijk nog weinig echte standaarden. Voor ASCII worden deze gegevens
Version 1.0
4
28-6-06
Uitwisselingsformaten gegevensbestanden
vaak in een header gezet, d.w.z. de eerste paar regels van een bestand. Maar de afspraken over de inhoud van deze header zijn meestal specifiek voor een applicatie. Bijvoorbeeld kunnen WAQUA tijdreeksresultaten in een formaat worden gezet dat er ongeveer als volgt uitziet: SERIES HoekVanHolland Waterhoogte 28-08-1996 CONTROL 10.minute 577 Meters FORMAT (6F6.2) 0.00 0.14 0.23 0.38 0.67 0.89 1.03 1.28 1.32 1.31 1.18 1.02 enz. Een aantal programma’s rondom WAQUA kan dit formaat lezen, maar EXCEL kan de header niet interpreteren. Hierdoor zijn na het importeren in EXCEL wel de getallen te gebruiken, maar kan er zonder macro niets met de metagegevens worden gedaan. Voor binaire gegevens is het nog moeilijker een standaard af te spreken omdat de gegevens ook niet door de gebruiker zelf kunnen worden gelezen. ASCII bestanden kunnen in geval van nood altijd in een tekstverwerker worden geladen. Op het vierde niveau kunnen gegevens worden gegroepeerd en kan de hiërarchie of structuur worden aangegeven. Vaak wil men niet één blok gegevens gebruiken maar een aantal bijvoorbeeld de u- en v-component van een windveld en de luchtdruk op zeeniveau. Deze horen bij elkaar, maar het is toch niet erg duidelijk om de gegevens allemaal in één blok getallen te plaatsen. De SDS-file van WAQUA is een voorbeeld van een bestand waarin deze structuur kan worden aangebracht. Voor ASCII gegevens wordt soms een opsomming met daartussen een lege regel gebruikt. Hiermee kunnen weliswaar meerdere gegevens in één bestand worden geplaatst maar kan er nog niet echt structuur worden aangebracht. Sterk verwant aan deze ordening van de gegevens is de mogelijkheid om in de gegevens te kunnen zoeken en sorteren. Database toepassingen hebben dan ook vaak een aantal eigenschappen van dit vierde niveau in zich. Over de volgorde van het derde en vierde niveau kan worden getwist.
2
Belangrijke aspecten
Bij het uitwisselen van gegevensbestanden zijn er een aantal aspecten die vaak terug keren. Een aantal wordt hieronder genoemd. 1. Binaire bestanden zijn vaak niet eenvoudig tussen verschillende typen computers uit te wisselen. Voor ASCII is dit meestal eenvoudiger. Een belangrijke standaard die dit gedeeltelijk ondervangt is die van IEEE. 2. ASCII is vaak (veel) minder snel in te lezen en er zijn meer bytes nodig om dezelfde gegevens op te slaan. Binaire bestanden resulteren meestal in een betere performance. 3. Om geheugen te sparen worden vaak weinig decimalen gebruikt voor ASCII opslag waardoor precisie verloren gaat. 4. Dummies of lege waarden worden vaak ad-hoc behandeld. 5. Metagegevens zijn in veel gevallen specifiek voor de applicatie of in het geheel niet geregeld. 6. Binaire bestanden zijn vaak moeilijk toegankelijk en kunnen niet even in een tekstverwerker worden geladen om te bekijken.
3
Een overzicht van veel gebruikte formaten
3.1 ASCII (Comma-separated-value, delimited) De naam zegt het eigenlijk al, in deze bestanden worden getallen (velden) gescheiden door spaties, comma’s, returns, en dergelijke. Dit type bestanden kan in veel applicaties worden gelezen mits het niet meer dan één blok bevat en elke regel hetzelfde aantal velden bevat. Belangrijke applicaties die dit formaat ondersteunen zijn: EXCEL en MATLAB. In beide wordt de metadata niet geïnterpreteerd en kan alleen als tekst worden ingelezen, tenzij er aanvullende afspraken worden gemaakt. Het is vaak eenvoudig om zelf een bestand van dit type te maken of te lezen.
Version 1.0
5
28-6-06
Uitwisselingsformaten gegevensbestanden
3.2 DONAR uitwisselingsformaat Het donar uitwisselingsformaat is een voorbeeld van een delimited bestand met aanvullende metadata afspraken. Om de metadata te kunnen interpreteren moet het lezende programma meestal worden aangepast. De voor- en nadelen van dit formaat zijn dus dezelfde als voor het delimited formaat. Een extra voordeel is wel dat de bestanden door DONAR kunnen worden gelezen, zodat DONAR gebruikt kan worden voor de data opslag. Als DONAR niet wordt gebruikt lijkt het formaat niet erg handig, zie appendices.
3.3 Hiërarchical Data Format (HDF) HDF is een binair formaat dat ontwikkeld is door NCSA (National Center for Supercomputing Applications). Het is een binair formaat om voldoende performance te halen. Om toch bestanden te kunnen uitwisselen tussen verschillende computers is gekozen voor een IEEE formaat voor getallen gekozen. Zoals de naam zegt is de opzet hiërarchisch, d.w.z. de gegevens kunnen in een soort directories worden gegroepeerd. Ook is er de mogelijkheid annotaties toe te voegen. Het NSCA biedt op internet een bibliotheek en een groot aantal programma’s aan om deze bestanden te lezen, converteren en visualiseren. Een goed voorbeeld is JHV een programmaatje waarmee door de inhoud kan worden gebladerd. Ook kunnen MATLAB en sommige GIS pakketten HDF bestanden lezen. Een gerelateerd formaat is HAIF (HDF ASCII Interchange Format), zoals de naam al zegt een ASCII formaat. Een belangrijk voordeel is dat dit ASCII formaat eenvoudig naar HDF kan worden geconverteerd.
3.4 Overige formaten voor wetenschappelijke data Er zijn naast HDF nog een aantal andere formaten met een dergelijke opzet. Hoewel de technische uitvoering soms vrij goed is, is de acceptatie internationaal gezien wat lager dan van HDF. Een aantal voorbeelden van dit type formaten is: CDF en netCDF twee formaten ontwikkeld door de NASA FITS voor astronomische data
3.5 Meteorologische uitwisselingsformaten (GRIB, BUFR) Omdat voor berekeningen met meteorologische modellen een grote uitwisseling van gegevens nodig is, zoals metingen van wind, luchtdruk, neerslag, etc. in verschillenden landen, is binnen het WMO (World Meteorological Organisation) een tweetal formaten afgesproken voor de uitwisseling van deze gegevens. Een aantal meteorologische instituten, waaronder het KNMI, gebruikt dit formaat ook intern voor de data-opslag. De opslag is binair (wel uitwisselbaar door eigen opslagmethode) en er bestaat een aantal bibliotheken om de gegevens te lezen en te schrijven. De programmatuur is echter niet eenvoudig te gebruiken en verandert regelmatig, waardoor het onderhoud van programmatuur die deze bibliotheken gebruikt vrij veel werk is.
3.6 MATLAB bestanden Matlab heeft voor de eigen programmatuur een binair opslagformaat ontwikkeld. Deze ‘mat’ bestanden kunnen tussen verschillende machines worden uitgewisseld. Wel is op elke machine waarop de bestanden gebruikt worden in principe de bibliotheek van MATLAB en dus een licentie nodig. Onlangs is bij het RIKZ een methode ontwikkeld om deze bestanden te schrijven met behulp van een eigen FORTRAN77 bibliotheek. Hierdoor hoeft er op deze machine geen licentie meer aanwezig te zijn, voor het lezen tot op heden echter wel. Een belangrijk voordeel van dit formaat is dat de gegevens snel in MATLAB kunnen worden bekeken.
Version 1.0
6
28-6-06
Uitwisselingsformaten gegevensbestanden
3.7 GIS formaten Veel GIS programmatuur kan bestanden van divers type importeren en exporteren. Een GIS pakket is echter wel noodzakelijk.
4
Situatie op dit moment
Op dit moment worden wind- en drukgegevens van het KNMI in een eigen ASCII formaat met header geleverd. Als de data op de juiste manier wordt georganiseerd kunnen deze gegevens via een programmaatje worden geconverteerd naar een (machine afhankelijk) binair bestand. Dit bestand kan vervolgens door WAQWND worden omgezet in een Wind-SDS bestand waarmee in WAQUA kan worden gerekend. Een belangrijk nadeel is dat er met de hand extra gegevens moeten worden ingevoerd die niet uit het bestand zijn af te leiden. Deze procedure kan dus eenvoudig tot fouten aanleiding geven. In de toekomst gaat het KNMI het HDF formaat voor het exporteren van modelresultaten ondersteunen. Dit kan echter nog wel enkele maanden (of iets langer) duren. WAQWND kan worden aangepast zodat dit formaat kan worden gelezen.
5
Aanbevelingen voor uitwisselen wind-bestanden tussen KNMI en HMCZ, HMR, RIKZ
Op de korte termijn lijkt het gebruik van een ASCII formaat het eenvoudigst. Er moet wel goed op worden gelet dat het formaat goed in elkaar zit. Dit betekend dat het duidelijk leesbaar is in een editor, niet gevoelig is voor posities en spaties en liefst aansluit bij een ander gangbaar formaat. Op wat langere termijn komen er naar alle waarschijnlijkheid vrij algemeen geaccepteerde en efficiënte standaard formaten beschikbaar. Een van de mogelijkheden is HDF wat op dit moment het meeste steun lijkt te verwerven. Dit komt mede doordat dit formaat door een aantal grote instituten gebruikt zal gaan worden. De HDF bibliotheken zijn vrijelijk beschikbaar. Een goede middenweg wordt geboden door het HAIF formaat, een ASCII formaat dat eenvoudig naar HDF is te converteren. Dit maakt aansluiting op HDF in de toekomst gemakkelijker. Bovendien kunnen er diverse applicaties gratis van internet worden geplukt om de gegevens te bekijken.
Version 1.0
7
28-6-06
Uitwisselingsformaten gegevensbestanden
6
Meer informatie op het internet
HDF home page: http://hdf.ncsa.uiuc.edu/ HDF inleiding http://cyclone.swa.com/hdf HDF links http://www.hdfinfo.com/links.html Data in HDF format http://petes.gso.uri.edu/~pete (Oceanografie) ftp://podaac.jpl.nasa.gov/pub/ocean_wind (bergen data van allerlei soort) EOS HDF extensie http://sposun.gsfc.nasa.gov/InfoArch.html JHV: http://hdf.ncsa.uiuc.edu/java-hdf-html/ HAIF: http://hdf.ncsa.uiuc.edu/java-hdf-html/jhv/UsersGuide/JHV2.2/guide10-ascii2hdf.html CDF op diverse manieren BUFR via WMO GRIB http://ncardata.ucar.edu/libraries/grib
Version 1.0
8
28-6-06
Uitwisselingsformaten gegevensbestanden
7
Huidige ASCII Wind- en luchtdruk formaat
7.1 Voorbeeld zoals geleverd door Albert Jacobs WAQH_INP_980740000_00000_LC =========================== 19 11 34773 99 2 255 128 1 103 0 98 7 24 0 0 1 0 0 0 0 0 0 0 201 173 48000 -12000 128 62333 13000 125 83 96 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1027E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 0.1026E+06 ... WAQH_INU_980740000_00000_LC =========================== 19 11 34773 99 2 255 128 33 105 10 98 7 24 0 0 1 0 0 0 0 0 0 0 201 173 48000 -11938 128 62333 13063 125 83 96 0.5448E+00 0.6737E+00 0.8026E+00 0.9325E+00 0.1061E+01 0.1190E+01 0.1324E+01 0.1461E+01 0.1599E+01 0.1736E+01 0.1874E+01 0.2012E+01 0.2139E+01 0.2258E+01 0.2378E+01 0.2498E+01 0.2617E+01 0.2737E+01 0.2851E+01 0.2961E+01 0.3070E+01 0.3179E+01 0.3288E+01 0.3397E+01 0.3484E+01 0.3553E+01 0.3622E+01 0.3690E+01 0.3759E+01 0.3827E+01 0.3899E+01 0.3975E+01 0.4050E+01 0.4125E+01 0.4199E+01 0.4273E+01 0.4350E+01 0.4433E+01 0.4514E+01 0.4595E+01 0.4677E+01 0.4758E+01 0.4817E+01 0.4858E+01 0.4899E+01 0.4940E+01 0.4981E+01 0.5023E+01 0.5039E+01 ...
7.2 Voorbeeld WAQWND invoer op dit moment (binair) 0.125 0.083 -12 48 101200 0.54 -3.93 102700.00 0.57 -4.03 102700.00 0.60 -4.13 102700.00
Version 1.0
9
28-6-06
Uitwisselingsformaten gegevensbestanden
8
Omschrijving van het huidige ASCII formaat (Jacobs)
Interpolation of wind and pressure fields on Waqua/csm8 grid: ============================================================ Purpose: # -------# # Interpolation of Hirlam mean sea level pressure (pmsl) fields # and Hirlam winds (u10 and v10) on Waqua/csm8 grid. # The u and v components of the wind are destaggered before # the interpolation on the u and v velocity gridpoints of the Waqua/csm8 # grid is performed. A weight file, containing the weights used # for the interpolation is added to take into account land/sea # interactions, and to add 10% in certain areas. #-----------------------------------------------------------------------------# Define Waqua/csm8 grid #-----------------------------------------------------------------------------set NX = 201 set NY = 173 set SOUTH = 48000 set WEST = -12000 set EAST = 13000 set NORTH = 62333 #-----------------------------------------------------------------------------# Set list of parameters and list of output levels for destaggering, and # for interpolating the wind to the Waqua/csm8 grid. #-----------------------------------------------------------------------------set upar = 33, set vpar = 34, set mslev1 = 10, We select pmsl (1) and u,v (33,34) at levels 0 and 10 for projection: projection: reg lat/lon (pole at 90). area: 62.333n,12.000w to 48.000n,12.750e scanned from s to n, resolution 1/8 degree along a parallel (West-East direction), 1/12 degrees along a meridian (South-North direction). Destagger the HIRLAM u10 and v10 fields Interpolate destaggered u10 and v10 components to Waqua-u/csm8 grid with interpolation weights taking into account land/sea transistions 'GRID' = 0,$NX,0,$NY,0,48000,0,0,-11938,0,0,128,62333,0,0,13063,0,0, Interpolate destaggered u10 and v10 components to Waqua-v/csm8 grid with interpolation weights taking into account land/sea transistions 'GRID' = 0,$NX,0,$NY,0,48042,0,0,-12000,0,0,128,62375,0,0,13000,0,0, Interpolate mean sealevel pressure to 0 m height level on Waqua/csm8 grid 'GRID' = 0,$NX,0,$NY,0,$SOUTH,0,0,$WEST,0,0,128,$NORTH,0,0,$EAST,0,0,
Version 1.0
10
28-6-06
Uitwisselingsformaten gegevensbestanden
Description of ascii output files: ================================= There are two ascii output files for the wind components, WAQH_INU_9807240000_00000_LC and WAQH_INV_9807240000_00000_LC, and one for the pressure, WAQH_INP_9807240000_00000_LC. The WAQH_INU_9807240000_00000_LC file contains all wind information (u and v components) on the Waqua-u/csm8 grid. The grid is as defined above, and the forecasting leadtimes have a timestep of 3 hours. The WAQH_INV_9807240000_00000_LC file contains all wind information (u and v components) on the Waqua-v/csm8 grid. The grid is as defined above, and the forecasting leadtimes have a timestep of 3 hours. The WAQH_INP_9807240000_00000_LC file contains all wind information (u and v components) on the Waqua/csm8 grid (on the waterlevel points). The grid is as defined above, and the forecasting leadtimes have a timestep of 3 hours. Each of the files consists of several sections starting with a header which explains of what comes next. Such a header has the format: N1 N2 NX*NY BK1(i), i=1,N1 BK2(i), i=1,N2 Explanation of parameters: N1 = Number of points in block BK1 N2 = Number of points in block BK2 NX = Number of points along a parallel (West-East direction). NY = Number of points along a meridian (South-North direction).
BK1(1) : Identification of centre (not important). BK1(2) : Generating process identification number (not important). BK1(3) : Grid definition (not important). BK1(4) : Flag (not important). BK1(5) : Identification of parameter 33 = u-comp. wind speed (m/s) 34 = v-comp. wind speed (m/s) 1 = pressure 124 = u-comp. wind stress 125 = v-comp. wind stress BK1(6) : Indicator of type of level (105 = specified height level above ground or sea) BK1(7) : Height of level (m) BK1(8) : Year of start forecast BK1(9) : Month of start forecast BK1(10): Day of start forecast BK1(11): Hour of start forecast BK1(12): Minute of start forecast BK1(13): Indicator of unit of time range (1 = hour) BK1(14): Forecast leadtime (0 = +00h, 3 = +03h, etc.)
Version 1.0
11
28-6-06
Uitwisselingsformaten gegevensbestanden
BK1(15): Time indicator for accumulation time (not important). BK1(16): Time range indicator (not important). BK1(17): Not important. BK1(18): Not important. BK1(19): Not important.
BK2(1) : Data representation type (0 = Latitude/Longitude grid) BK2(2) : Number of points along a parallel BK2(3) : Number of points along a meridian BK2(4) : Latitude of first grid point BK2(5) : Longitude of first grid point BK2(6) : Resolution and component flags (128 = direction increments given) BK2(7) : Latitude of last gridpoint BK2(8) : Longitude of last gridpoint BK2(9) : X-direction increment BK2(10): Y-direction increment BK2(11): Scanning mode (96 = points scanned in +X direction, +Y direction, and adjacent points in Y direction are consecutive)
The format (in fortran) of the header is: format(11i7) After the header the data of each section is presented: FLD(k), k = 1,NX*NY It's corresponding fortran format is: format(7(1x,e10.4))
Version 1.0
12
28-6-06
Uitwisselingsformaten gegevensbestanden
9
HDF ASCII formaat
From online manual of NCSA Appendix A: Specification of the HDF ASCII Interchange Format (HAIF) A.1 Introduction A.2 Specification of the HDF ASCII Interchange Format A.3 An Example
A.1 Introduction Many times it is useful to extract data from an HDF file, and store it in a simple ASCII format suitable for use by scripts and programs. For instance, it is often desireable to select a subset of an array or table, and save it as tab-delimited columns, suitable for use with a standard spreadsheet such as Microsoft Excel. To facilitate this function, the NCSA HDF group has defined a standard format, the HDF ASCII Interchange Format (HAIF) which will be used by all of our tools that support this feature. We will provide Java classes and other tools that generate and interpret this format. The first such tool is the Java HDF Viewer (JHV). Note: The HAIF is a simple format, intended for the limited purpose described above. This format does not provide all the features of HDF, nor will it be practically useful for unintended uses. In particular, the user should be aware that this format will not conveniently or efficiently support: access to data of greater than 2 dimensions multi-megabyte datasets subsetting, subsampling, chunking, or compression A.2 Specification of the HDF ASCII Interchange Format The HDF ASCII Interchange Format (HAIF) is a structured format for unabiguously storing and reading HDF objects. Almost every kind of data object that can be stored in HDF can be stored in the HAIF. This document specifies the HAIF. General Format If the input file format is ASCII text, it must have the following input fields. Items in [] are optional and required only by some kinds of data objects. format name [dimension] dim_1 dim_2 [...] [dim_k] data_type [col_type2 col_type3 ...] [col_name1 col_name2 col_name3 ...] [col_order1 col_oreder2 col_order3 ...] data1 data2 data3 ... ... Where the fields are defined as follows: format Data format (HDF_ANNOTATION, HDF_RASTER, HDF_SDS, HDF_VDATA). name The name of the data set. dim_1 The size of the first dimension. dim_2 The size of the second dimension. data_type The name of the data set. name The type(s) of data (HDF_CHAR, HDF_INT8, HDF_UINT8, HDF_INT16, HDF_UINT16, HDF_INT32, HDF_UINT32, HDF_INT64, HDF_UINT64, HDF_FLOAT32, HDF_FLOAT64). col_name1 col_name2 col_name3 ... Names of columns, required by Vdata. col_order1 col_oreder2 col_order3 ...
Version 1.0
13
28-6-06
Uitwisselingsformaten gegevensbestanden
Data orders of columns, required by Vdata. data1 data2 data3 ... The actual data. Formats of Data Objects Each type of data object has its own required fields. The following table gives the data formats for HDF Annotation, Raster Image, SDS and Vdata objects. Annotation Raster Image SDS Vdata HDF_ANNOTATION annotation HDF_RIS8/HDF_RIS24/HDF_GR name image_height image_width data_type data1 data2 ... HDF_SDS name rank dim[0] ... dim[rank-1] type data1 data2 ... HDF_VDATA name no. of records no. of fields field types field names field orders data1 data2 ...
A.3 An Example The following example contains five data objects: a file annotation, two raster images, an SDS, and a Vdata table. HDF_ANNOTATION This is a test file. This ASCII file contains two GR images, one SDS, and one Vdata table. HDF_RIS8 Image 1 5 5 UINT8 10 20 30 11 21 31 12 22 32 13 23 33 14 24 34
40 41 42 43 44
HDF_GR Image 2 5 5 FLOAT32 10.0 20.0 11.0 21.0 12.0 22.0 13.0 23.0 14.0 24.0
50 51 52 53 54
30.0 31.0 32.0 33.0 34.0
40.0 41.0 42.0 43.0 44.0
50.0 51.0 52.0 53.0 54.0
HDF_SDS Test SDS 4 2 2 5 5 FLOAT32
Version 1.0
14
28-6-06
Uitwisselingsformaten gegevensbestanden
1.111 1.121 1.131 1.141 1.151 1.211 1.221 1.231 1.241 1.251 2.111 2.121 2.131 2.141 2.151 2.211 2.221 2.231 2.241 2.251
1.112 1.122 1.133 1.142 1.152 1.212 1.222 1.233 1.242 1.252 2.112 2.122 2.133 2.142 2.152 2.212 2.222 2.233 2.242 2.252
1.113 1.123 1.134 1.143 1.153 1.213 1.223 1.234 1.243 1.253 2.113 2.123 2.134 2.143 2.153 2.213 2.223 2.234 2.243 2.253
HDF_VDATA Test Vdata 20 7 CHAR8 INT16 Character Short 1 1 T 0 L 1 P 2 Q 3 E 4 S 5 L 6 E 7 W 8 D 9 X 10 R 11 W 12 F 13 R 14 O 15 T 16 K 17 P 18 P 19
Version 1.0
1.114 1.123 1.134 1.144 1.154 1.214 1.223 1.234 1.244 1.254 2.114 2.123 2.134 2.144 2.154 2.214 2.223 2.234 2.244 2.254
INT32 Integer 1 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190
1.115 1.125 1.135 1.145 1.155 1.215 1.225 1.235 1.245 1.255 2.115 2.125 2.135 2.145 2.155 2.215 2.225 2.235 2.245 2.255
FLOAT32 Float 1 0.1 9.40666 2.333204 12.411581 62.24897 32.764236 82.766525 29.776112 122.28739 70.87407 188.73654 22.491457 147.20348 199.45923 37.88339 166.89705 118.7182 308.60443 78.33775 22.951778
CHAR8 String 10 MXUSQEQLKD UIRUFIGBRE QKAWUITQSX KIWBYPUUON YOJLVFQWLI CXEXMMDXKP ASHDUCGCCJ OKLOIKKCOK LEDLTAXDWO JXIDYILSKJ BUKJKXYIPV FKGNLNWNGM LQJWDSMCIR DSVUFRNWBG ULWJLEAGED FPEWXXOOHQ PXBGBBPVBR EUCUGXBDQH PUFKLDFLON IYKNMVXOTK
INT32 Integer_Array 4 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
15
FLOAT32 Float_Array 2 9.664938 69.680336 2.7655008 68.7495 30.750593 52.72032 57.724598 98.232124 22.25887 20.134 12.895663 32.894978 32.652016 2.5141788 42.52368 16.930979 92.989006 2.335157 88.31287 62.97705 78.15055 32.27772 78.551674 40.73911 10.464083 52.854168 66.23777 90.11705 2.6287615 67.433266 52.203053 2.8297963 72.840485 22.365297 12.23866 76.54023 92.41686 8.207025 32.219948 39.98024
28-6-06
Uitwisselingsformaten gegevensbestanden
10 Een voorbeeld windveld in HAIF formaat HDF_ANNOTATION # Description of origin (not obligatory)) File_name = knmiwind.txt Data_object = Space varyind wind and pressure Hirlam forecast Created = Dec 07 10:49:42 CET 1998 Owner_data = KNMI Contact = A. Jacobs / M. Verlaan # Data description (obligatory) # Global Projection = Spherical Time_zone = CET T_varname = time T_unit = Hours T_longname = Time since reference time T_reference = (1998,7,24,0,0) Var_list = (P,U,V) # Data P_varname = Pressure P_mean = 101400.0 P_unit = kg/m^2 P_longname = Pressure at mean sea level P_dimlist = (Longitude,Latitude,Time) P_grid1 = (-12.000,0.125,13.000) P_grid2 = (48.000,0.083,62.333) P_grid3 = Time U_varname = Uvelocity U_unit = m/s U_longname = U (east) component of 10m wind velocity U_dimlist = (Longitude,Latitude,Time) U_grid1 = (-11.938,0.125,13.063) U_grid2 = (48.000,0.083,62.333) U_grid3 = Time V_varname = Vvelocity V_unit = m/s V_longname = V (north) component of 10m wind velocity V_dimlist = (Longitude,Latitude,Time) V_grid1 = (-12.000,0.125,13.000) V_grid2 = (48.083,0.083,62.417) V_grid3 = Time HDF_SDS Time 1 17 FLOAT32 0 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 HDF_SDS Pressure 3 17 173 201 FlOAT32 102700.00 102700.00 102700.00 ... ... HDF_SDS Uvelocity 3 17 173 201 FlOAT32 0.54 ...
0.57
0.60
...
HDF_SDS Vvelocity 3 17 173 201
Version 1.0
16
28-6-06
Uitwisselingsformaten gegevensbestanden
FlOAT32 -3.93 ...
Version 1.0
-4.03
-4.13 ...
17
28-6-06
Uitwisselingsformaten gegevensbestanden
11 DONAR ASCII uitwisselingsformaat 11.1 Grid type 1 [IDT;*DIF*;A;;19981203] [W3H] WNS;204 PAR;BODHTE;Bodemhoogte;J CPM;40;Bodem/Sediment EHD;I;cm HDH;MSL;T.o.v. Mean Sea Level ORG;NVT;Niet van toepassing SGK;NVT IVS;NVT;Niet van toepassing BTX;NVT;NVT;Niet van toepassing BTN;Niet van toepassing ANI;NZXXMTZRWK;Dir. Noordzee - afdeling MTZ te Rijswijk BHI;NZXXMTZRWK;Dir. Noordzee - afdeling MTZ te Rijswijk BMI;NZXXMTZRWK;Dir. Noordzee - afdeling MTZ te Rijswijk OGI;NZXXREG_LDS;Dir. Noordzee - Registratie LDS GBD;NOORDZE;Noordzee (internationaal) LOC;MAASGL05;Maasgeul 0-5 kilometer;G;31U;56698500;576029500 GRD;0 ANA;F003;Bodemhoogte als knikpunten mbv stereofotogrammetrie BEM;VELDMTG;Veldmeting, directe bepaling in het veld BEW;NVT;Niet van toepassing VAT;ECHOLD01;Lodingsysteem - echogram op afstandsbasis/sextant TYP;GG [RKS] TYD;19960102;0000;19960107;2359 PLT;NVT;-999999999 SYS;CENT STA;D BGS;56698588;576029575;57195205;576296956 [WRD] 56698588;576209168;-1976/0:56698880;576209888;-1956/0:56699005;576210225;-1979/0:56699125;576210513;-2003/0: 56699475;576211356;-1990/0:56699563;576211625;-1978/0:56699813;576212181;-1979/0:56699944;576212525;-1997/0: 56700025;576212706;-2001/0:56700294;576213350;-1986/0:56700380;576213538;-1970/0:56700513;576213818;-1987/0: 56700744;576214306;-1995/0:56700888;576214638;-2023/0:56701025;576214931;-2026/0:56701080;576215068;-2025/0: 56701313;576215543;-2045/0:56701550;576216106;-2064/0:56701819;576198625;-1911/0:56701869;576216888;-2082/0: 56701980;576217138;-2093/0:56701988;576199100;-1928/0:56702025;576217238;-2095/0:56702125;576199475;-1915/0: 56702213;576199743;-1904/0:56702250;576217738;-2096/0:56702300;576218006;-2111/0:56702313;576200025;-1923/0: 56702488;576200593;-1942/0:56702555;576218550;-2154/0:56702600;576200968;-1929/0:56702675;576201156;-1937/0: 56702825;576219400;-2193/0:56702955;576219668;-2213/0:56702969;576201993;-1942/0:56703088;576202275;-1933/0: 56703105;576219943;-2226/0:56703150;576220031;-2226/0:56703200;576202556;-1946/0:56703380;576220888;-2258/0: 56703463;576203356;-1941/0:56703488;576221056;-2268/0:56703500;576203456;-1947/0:56703513;576221113;-2278/0: 56703655;576203831;-1940/0:56703725;576204025;-1942/0:56703769;576221700;-2280/0:56703900;576222150;-2339/0: 56703994;576204838;-1919/0:56703994;576222518;-2353/0:56704105;576205125;-1907/0:56704105;576222768;-2363/0:
Version 1.0
18
28-6-06
Uitwisselingsformaten gegevensbestanden
11.2 Grid type 2 [IDT;*DIF*;A;;19981203] [W3H] WNS;4 PAR;BODHTE;Bodemhoogte;J CPM;40;Bodem/Sediment EHD;I;cm HDH;NAP;T.o.v. Normaal Amsterdams Peil ORG;NVT;Niet van toepassing SGK;NVT IVS;NVT;Niet van toepassing BTX;NVT;NVT;Niet van toepassing BTN;Niet van toepassing ANI;NZXXMTZRWK;Dir. Noordzee - afdeling MTZ te Rijswijk BHI;RIKZITSDHG;RIKZ - afdeling ITS te Den Haag BMI;NZXXMTZRWK;Dir. Noordzee - afdeling MTZ te Rijswijk OGI;RIKZVOORBEELD;RIKZ - Voorbeeld gegevens opslag in DONAR GBD;NOORDZE;Noordzee (internationaal) LOC;MEETPNWK.10;Meetpost Noordwijk (90 bij 390);G;RD;10238957;51965962 GRD;3100 ANA;F025;Bodemhoogte gecorrigeerd voor omstandigheden tijdens opname BEM;VELDMTG;Veldmeting, directe bepaling in het veld BEW;SCHEM_G2;Schematisatie naar equidistante punten in grid (DIGIPOL) VAT;RWSLOD01;Lodingsysteem RWSLOD - digitaal echolood/Decca TYP;GL [RKS] TYD;19920504;0000;19920504;2350 PLT;NVT;-999999999 VGS;2500 SYS;CENT STA;O BGS;10238957;51851366;10930551;52799557 BLS;0;0;89;389 [WRD] 0;0;2617/0:0;1;2616/0:0;2;2618/0:0;3;2617/0:0;4;2622/0:0;5;2616/0:0;6;2611/0:0;7;2603/0:0;8;2598/0:0;9;2589/0: 0;10;2582/0:0;11;2570/0:0;12;2562/0:0;13;2555/0:0;14;2540/0:0;15;2528/0:0;16;2517/0:0;17;2492/0:0;18;2467/0:0;19;2442/0: 0;20;2406/0:0;21;2374/0:0;22;2327/0:0;23;2295/0:0;24;2271/0:0;25;2279/0:0;26;2284/0:0;27;2292/0:0;28;2295/0:0;29;2307/0: 0;30;2311/0:0;31;2320/0:0;32;2324/0:0;33;2324/0:0;34;2326/0:0;35;2333/0:0;36;2340/0:0;37;2345/0:0;38;2346/0:0;39;2347/0: 0;40;2349/0:0;41;2352/0:0;42;2355/0:0;43;2351/0:0;44;2345/0:0;45;2338/0:0;46;2336/0:0;47;2331/0:0;48;2328/0:0;49;2322/0: 0;50;2324/0:0;51;2323/0:0;52;2326/0:0;53;2324/0:0;54;2326/0:0;55;2324/0:0;56;2325/0:0;57;2322/0:0;58;2325/0:0;59;2323/0: 0;60;2318/0:0;61;2315/0:0;62;2311/0:0;63;2310/0:0;64;2311/0:0;65;2313/0:0;66;2316/0:0;67;2319/0:0;68;2323/0:0;69;2324/0: 0;70;2328/0:0;71;2326/0:0;72;2326/0:0;73;2328/0:0;74;2325/0:0;75;2326/0:0;76;2329/0:0;77;2328/0:0;78;2328/0:0;79;2327/0: 0;80;2327/0:0;81;2333/0:0;82;2337/0:0;83;2340/0:0;84;2342/0:0;85;2345/0:0;86;2346/0:0;87;2352/0:0;88;2357/0:0;89;2360/0: 0;90;2362/0:0;91;2365/0:0;92;2369/0:0;93;2373/0:0;94;2376/0:0;95;2382/0:0;96;2383/0:0;97;2386/0:0;98;2395/0:0;99;2400/0: 0;100;2407/0:0;101;2410/0:0;102;2415/0:0;103;2420/0:0;104;2420/0:0;105;2425/0:0;106;2428/0:0;107;2433/0:0;108;2431/0: 0;109;2434/0:0;110;2434/0:0;111;2438/0:0;112;2439/0:0;113;2441/0:0;114;2444/0:0;115;2443/0:0;116;2440/0:0;117;2444/0:
Version 1.0
19
28-6-06