CoastWatch
CoastWatch HDF
Caribbean Regional Node

Information | Data | Software | Sites | Education | Feedback | News


Binary CoastWatch HDF (Hierarchical Data Format) is designed as a compact alternative to the standard CoastWatch format. HDF is a scientific data format supported by a large number of display and analysis packages. The HDF conversion creates an HDF file that conforms to the CoastWatch HDF Metadata Specification (see below) -- that is, a standard HDF scientific dataset with information describing the date, time, and geolocation of the satellite data. CoastWatch HDF datasets contain 16-bit signed integer image data and 8-bit graphics data.


CoastWatch HDF Metadata Specification
-------------------------------------

CoastWatch HDF files created by cwftohdf follow a number of
conventions for storing CoastWatch satellite data in HDF format:

1) Multiple channels and derived varibles can be stored in one HDF
   file.  A standard CoastWatch product file contains data from one
   time (ie: satellite pass) and CoastWatch region only.

2) A standard set of global attributes is encoded with the data,
   describing the time, location, satellite, sensor, etc. from which
   the data originated.

3) A standard set of variable attributes is encoded with each
   variable, describing the variable units, scaling factor, etc. as
   well as any other important information such as the equations and
   corrections used in data processing.

The following table lists the standard set of global attributes for
CoastWatch HDF.  Since all map projection calculations in the HCWF
library are performed using the General Cartographic Transformation
Package (GCTP) from the USGS National Mapping Division, a number of
global attributes are dedicated to storing GCTP-related parameters.
See the GCTP documentation for details on the values of GCTP
parameters.

NAME             TYPE        DESCRIPTION
--------------------------------------------------------------------

satellite        CHAR8       Satellite name, eg: noaa-12, noaa-14, 
                             noaa-15, goes-8, orbview-2.
sensor           CHAR8       Sensor name, eg: avhrr, seawifs.
pass_date        INT32       Date of satellite pass in days since 
                             January 1, 1970.
start_time       FLOAT64     Start time of satellite pass in seconds 
                             since 00:00:00 UTC.
pass_type        CHAR8       Satellite pass time: day, night.
projection       CHAR8       Descriptive projection name, eg: mercator, 
                             geographic, polar stereographic.
gctp_sys         INT32       GCTP projection system code.
gctp_zone        INT32       GCTP zone for UTM projections.
gctp_parm        FLOAT64     GCTP projection parameters (15).
gctp_datum       INT32       GCTP spheroid code.
et_affine        FLOAT64     Earth transform affine parameters (6) -
                             see below for details.
rows             INT32       Number of data rows.
cols             INT32       Number of data columns.
origin           CHAR8       Original data source, eg: USDOC/NOAA/NESDIS 
                             CoastWatch.
history          CHAR8       Newline separated list of utilities and
                             command line parameters used to create
                             the file and perform subsequent 
                             processing.


The et_affine attribute is used to calculate projection (x,y)
coordinates from image (i,j).  GCTP is then used to calculate
(latitude,longitude) from (x,y).  Given the six affine transform
parameters as follows:

  a = et_affine[0]           e = et_affine[4]
  b = et_affine[1]           f = et_affine[5]
  c = et_affine[2]
  d = et_affine[3]

the following vector calculation is performed:

  |x|   |a b|  |i|       |e|
  | | = |   |  | |   +   | |           ( or  Y = AX + B )
  |y|   |c d|  |j|       |f|

where (x,y), (i,j), and (e,f) are column vectors, (a,b,c,d) is a 2x2
matrix, and:

  x = easting
  y = northing
  i = column (1-relative)
  j = row (1-relative)

The inverse operation may be performed by inverting the affine
transform:

  det(A) = ad - bc
  a' = d / det(A)  
  b' = -b / det(A)
  c' = -c / det(A)
  d' = a / det(A)
  e' = -(a'e + b'f)
  f' = -(c'e + d'f)

so that:

  |i|   |a' b'|  |x|       |e'|
  | | = |     |  | |   +   |  |        ( or  X = A'Y + B' )
  |j|   |c' d'|  |y|       |f'|


The following table shows the standard set of variable attributes for
CoastWatch HDF.  Some attribute groups are created by HDF SD
convenience functions, denoted in brackets (), in order to make data
more readable and usable by generic HDF viewing programs.  A <var> in
the TYPE field indicates that the attribute type is the same as the
variable data type.

NAME             TYPE        DESCRIPTION
--------------------------------------------------------------------

(SDsetdatastrs)
long_name        CHAR8       Descriptive variable name, eg: AVHRR
                             channel 4, sea surface temperature.
units            CHAR8       Descriptive units name, eg: celsius,
                             albedo*100%, degrees.
format           CHAR8       FORTRAN-77 notation for data value
                             printing, eg: F7.2.
coordsys         CHAR8       Coordinate system - same as global
                             projection attribute.

(SDsetfillvalue)
_FillValue       <var>       Value used to fill in for unwritten 
                             data.

(SDsetcal)
scale_factor     FLOAT64     Calibration scale factor.
scale_factor_err FLOAT64     Calibration scale error.
add_offset       FLOAT64     Calibration offset.
scale_factor     FLOAT64     Calibration offset error.
calibrated_nt    INT32       Code for HDF data type of uncalibrated 
                             data.

C_format         CHAR8       C notation for data value printing,
                             eg: %7.2f.
missing_value    <var>       Value used for missing data, same as
                             _FillValue attribute.
solar_corr       CHAR8       For AVHRR channel 1 and 2 data, whether 
                             the solar zenith angle correction was
                             performed: yes, no.
limb_corr        CHAR8	     For AVHRR channel 4 and 5 data, whether 
                             the limb correction was performed: yes, 
                             no.
nonlinear_corr   CHAR8       For AVHRR channel 4 and 5 data, whether 
                             the nonlinearity correction was performed:
                             yes, no.
sst_equation     CHAR8       For sea surface temperature, the SST
                             equation used, eg: nonlinear split-window.
percent_good     INT16       Good pixels / total pixels * 100%.


The calibration attributes are used to read and write channel and
ancillary data as follows:

  float = scale_factor*(int - add_offset)         ( on read )
  int = float/scale_factor + add_offset           ( on write )

where float and int are the floating-point and integer values
respectively.  See the HDF User's Guide for more details on data
calibration.

Note that not all variable attributes are required for any given
CoastWatch variable; for example the calibration attributes are not
needed for graphics data since graphics planes are encoded as 8-bit
bytes and require no calibration.  Also some attributes such as
solar_corr, limb_corr, nonlinear_corr, and sst_equation only have
meaning with certain variables.


^ Back to main page USDOC | NOAA | NESDIS | CoastWatch