NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

[netcdfgroup] What attributes/dimensions are required to be set on a variable to make it georeferenced?

I have a variable that I've created in a file which I want to be able to
read as a georeferenced data set, i.e. using something like this with the
Java API:

        GridDataset gridDataset = GridDataset.open(netcdfFile);
        GeoGrid geoGrid = gridDataset.findGridByShortName(variableName);

Currently the NetCDF variable looks like this (from ncdump):

float available_water_capacity(time=1, lon=1385, lat=596);
  :_FillValue = -999.9f; // float
  :least_significant_digit = 3; // int
  :_ChunkSize = 1, 1385, 596; // int

I assume that I have not set either sufficient attributes and/or dimensions
on the data variable (available_water_capacity), so I'm fishing for ideas
as to how I can flesh this out when creating/writing the files in my Python
code.  The NetCDF file is currently created like so:

    # open the output file for writing, set its dimensions and variables
    output_dataset = netCDF4.Dataset(output_file, 'w')
    output_dataset.createDimension('time', None)
    output_dataset.createDimension('lon', len(input_lon_dimension))
    output_dataset.createDimension('lat', len(input_lat_dimension))

    # create lon dimension variable
    output_lon_variable = output_dataset.createVariable('lon','f4',('lon',))
    if 'units' in input_lon_variable.ncattrs():
        output_lon_variable.units = input_lon_variable.units
    output_lon_variable[0:len(input_lon_dimension):1] =
input_lon_variable[0:len(input_lon_dimension):1]

    # create lat dimension variable
    output_lat_variable = output_dataset.createVariable('lat','f4',('lat',))
    if 'units' in input_lat_variable.ncattrs():
        output_lat_variable.units = input_lat_variable.units
    output_lat_variable[0:len(input_lat_dimension):1] =
input_lat_variable[0:len(input_lat_dimension):1]

    # create a time variable with a single value
    output_time_variable =
output_dataset.createVariable('time','i4',('time',))
    output_time_variable.units = 'days since 1900-01-01 00:00:00'
    output_time_variable[0:1:1] = numpy.array([0])

    # create the soil constant variable
    output_soil_variable =
output_dataset.createVariable('available_water_capacity','f4',('time',
'lon', 'lat'),

 fill_value=fill_value,
                                                         zlib=True,

 least_significant_digit=3)

    attributeDictionary = { "Conventions":"CF-1.3" }
    output_dataset.setncatts(attributeDictionary)


The trouble is that when I read this NetCDF file in Java code which uses
the approach outlined above it does not find the variable as a grid in the
GridDataset, however I'm using this approach with other NetCDF variables
which are correctly georeferenced (they show up as Geo2D types in Panoply),
so I assume that I've failed to completely flesh out this variable so that
it'll be recognized as a grid. What more might I add in order to make this
variable discoverable as a georeferenced grid?

Thanks in advance if anyone has suggestions on this.

--James
  • 2015 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: