I quite like NetCDF for continuous/array data (i.e. rasters). Pros for NetCDF are:
- NetCDF is self describing (i.e., data definitions are available through the file header) so you don't need to supply secondary metadata files
- NetCDF4 allows for storage of n-dimensional data (using the HDF5 data format on disk, which is a bonus as this allows files as big as your OS can handle). This comes with reasonable compression and fast access to the data. Note that NetCDF3 doesn't support n-dimensional data, and has a file size limit of roughly 2GB on a 32-bit system.
- NetCDF is an open format so accessing the data is generally not a problem as well through common libraries. For example, in python it's simple enough from scipy to read in a slice of data:
from scipy.io import netcdf
f = netcdf.netcdf_file('source.nc')
print(nc.dimensions) #take a look at the dimensions of the data
print(nc.variables) #A dictionary containing all the variables
nc.variables["some_data"].dimensions #The dimensions this variable is in, e.g. lat, lon
out_array = nc.variables["some_data"].data
f.close() #and we're done
The only downside to NetCDF4 that I can see is the not-great support in standard GIS packages like ArcGIS and QGIS (though I dearly would love to be corrected on this!).
EDIT Some other packages that support NetCDF
Some standard programming languages that support NetCDF (though to be fair, anything that can read HDF can read NetCDF4):
For maths and stats users you have:
Specifically in GIS:
- GDAL will convert the data for you
- Likewise FME
- ArcGIS supports NetCDF (though it's not the best level of support in my experience)
- There is a QGIS Plugin in development
If you want to quickly look at a NetCDF file I'd use the cross-platform Panoply from NASA. And if you're interested in more, UCAR Unidata has a list of software.