Re: [netcdf-java] Unable to get a GeoGrid from a GridDataset

  • To: Sean Arms <sarms@xxxxxxxx>
  • Subject: Re: [netcdf-java] Unable to get a GeoGrid from a GridDataset
  • From: Christian Ward-Garrison <cwardgar@xxxxxxxx>
  • Date: Thu, 30 Jun 2016 13:57:58 -0600
Hi James,

This question was reposted to the list one day after this one. In that 2nd
thread, Ben Caradoc-Davies correctly identified the issue: the units for
latitude and longitude are incorrect. To be CF-compliant, longitude should
have the unit "degrees_east" and latitude should have the unit
"degrees_north". NetCDF-Java uses that information to identify coordinate
axes and build a coordinate system. If a coordinate system can't be built,
then "pet" can't be recognized as a grid.

There are other issues with this file as well: "Conventions" should be
"CF-1.6" and "pet" should have a "coordinates" attribute with value "time
lon lat", among others. But the units are the main problem here.

-Christian

On Wed, Jun 29, 2016 at 3:41 PM, Sean Arms <sarms@xxxxxxxx> wrote:

> Greetings James,
>
> I think you need to add the following attribute to the pet variable:
>
> coordinates = "time lon lat"
>
> If that does not work, would you have a sample file that you could share?
>
> Thanks!
>
> Sean
>
>
> On Fri, Jun 24, 2016 at 1:28 PM, James Adams <monocongo@xxxxxxxxx> wrote:
>
>> I have Java code which gets a GeoGrid object from a NetCDF GridDataset
>> via the variable name. It normally works correctly but for the input NetCDF
>> file I currently need to work with I get an error when this code runs, in
>> that the GeoGrid is not found, even though you can see the variable in the
>> NetCDF dataset using other tools such as ncdump and/or when stepping
>> through the code with a debugger.
>>
>> This code works as expected with other NetCDF files so I assume that
>> there must be something in the NetCDF file itself which is preventing the
>> fetch of a variable's grid via a lookup of the variable name. When I view
>> the NetCDF file I can see the variable and it displays as a Geo2D type in
>> Panoply. The ncdump -h output for the file is below:
>>
>>     File "prism_nidis_pet.nc"
>>     Dataset type: NetCDF-3/CDM
>>
>>     netcdf file:/C:/home/prism/prism_nidis_pet.nc {
>>       dimensions:
>>         lon = 1405;
>>         lat = 621;
>>         time = UNLIMITED;   // (1457 currently
>>       variables:
>>         int time(time=1457);
>>           :long_name = "time";
>>           :standard_name = "time";
>>           :units = "days since 1800-1-1 00:00:00";
>>           :calendar = "gregorian";
>>
>>         float lon(lon=1405);
>>           :long_name = "longitude";
>>           :standard_name = "longitude";
>>           :units = "degrees_north";
>>
>>         float lat(lat=621);
>>           :long_name = "latitude";
>>           :standard_name = "latitude";
>>           :units = "degrees_west";
>>
>>         float pet(time=1457, lon=1405, lat=621);
>>           :calibration_start_year_month = "full";
>>           :calibration_end_year_month = "full";
>>           :_FillValue = -999.9f; // float
>>           :missing_value = -999.9f; // float
>>           :valid_min = 0.0f; // float
>>           :valid_max = 3.4028235E38f; // float
>>           :units = "millimeters";
>>           :cell_methods = "time: potential evapotranspiration estimate,
>> Thornthwaite equation";
>>           :long_name = "Potential evapotranspiration estimate,
>> Thornthwaite equation";
>>           :standard_name = "Potential evapotranspiration estimate,
>> Thornthwaite equation";
>>
>>       // global attributes:
>>       :date_created = "2016-06-23  11:52:37";
>>       :date_modified = "2016-06-23  11:52:37";
>>       :standard_name_vocabulary = "CF Standard Name Table (v26, 08
>> November 2013)";
>>       :Conventions = "1.6";
>>       :geospatial_lon_min = -125.0f; // float
>>       :geospatial_lon_max = -66.5f; // float
>>       :geospatial_lat_min = 24.083334f; // float
>>       :geospatial_lat_max = 49.916668f; // float
>>     }
>>
>> Is there anything about the file described above which would prevent
>> being able to get a GeoGrid associated with the variable named "pet"?
>>
>> Below is the code which is failing when using the above file as input.
>>
>>
>>         private GeoGrid getGrid(final String netcdfFile,
>>                                 final String variableName)
>>             throws IOException
>>         {
>>             // open the NetCDF data set
>>             GridDataset gridDataset = GridDataset.open(netcdfFile);
>>
>>             // verify that we opened the GridDataset
>>             if (gridDataset == null)
>>             {
>>                 String errorMessage = "Error opening the NetCDF data set
>> using the file \'" + netcdfFile + "\'";
>>                 logger.error(errorMessage);
>>                 throw new RuntimeException(errorMessage);
>>             }
>>
>>             // THIS IS WHERE THE PROBLEM OCCURS
>>             // get the grid based on the associated variable name
>>             GeoGrid geoGrid =
>> gridDataset.findGridByShortName(variableName);
>>
>>             // verify that we found the GeoGrid
>>             if (geoGrid == null)
>>             {
>>                 String errorMessage = "Error finding the NetCDF grid from
>> the NetCDF file \'" + netcdfFile + "\' using the variable name \'" +
>> variableName + "\'";
>>                 logger.error(errorMessage);
>>                 throw new RuntimeException(errorMessage);
>>             }
>>
>>             // more code omitted...
>>         }
>>
>> When the above code runs and fails the arguments are the NetCDF file name
>> and "pet" which is the variable name in that NetCDF for which we're trying
>> to get the corresponding grid.
>>
>> Can anyone suggest what's going wrong here? Thanks in advance...
>>
>> _______________________________________________
>> NOTE: All exchanges posted to Unidata maintained email lists are
>> recorded in the Unidata inquiry tracking system and made publicly
>> available through the web.  Users who post to any of the lists we
>> maintain are reminded to remove any personal information that they
>> do not want to be made public.
>>
>>
>> netcdf-java mailing list
>> netcdf-java@xxxxxxxxxxxxxxxx
>> For list information or to unsubscribe, visit:
>> http://www.unidata.ucar.edu/mailing_lists/
>>
>
>
> _______________________________________________
> NOTE: All exchanges posted to Unidata maintained email lists are
> recorded in the Unidata inquiry tracking system and made publicly
> available through the web.  Users who post to any of the lists we
> maintain are reminded to remove any personal information that they
> do not want to be made public.
>
>
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit:
> http://www.unidata.ucar.edu/mailing_lists/
>
  • 2016 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: