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.