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.

[netcdf-java] findXYindexFromLatLon issues where lat and lon are extracted from two other dimensions

  • To: netcdf-java@xxxxxxxxxxxxxxxx
  • Subject: [netcdf-java] findXYindexFromLatLon issues where lat and lon are extracted from two other dimensions
  • From: "Aleksander Vines" <alevin@xxxxxxxx>
  • Date: Fri, 22 Nov 2013 15:33:50 +0100
Hi all,


We're using the NetCDF-Java library to read some data from some netCDF files. 
Some of these files have been remapped to an approximately 1 degree lat/lon 
grid, due to this the lat/lon are on an unusual format, and not an actual 
dimension in the file (see netcdf output right below). This file seems to work 
in thredds data server, I can view the map nicely in godiva2, and it supposedly 
seems to cover all oceans, with values everywhere.
---------------------------------------------------------------------------------------------------------

netcdf -h dump:

netcdf Variable_merged_mesh {
dimensions:
        x = 182 ;
        y = 149 ;
        lev = 31 ;
        time = UNLIMITED ; // (72 currently)
variables:
        double lev(lev) ;
                lev:long_name = "generic" ;
                lev:units = "level" ;
                lev:axis = "Z" ;
        double time(time) ;
                time:standard_name = "time" ;
                time:units = "months since 1990-01-01 00:00:00" ;
                time:calendar = "standard" ;
        float SomeVar(time, lev, y, x) ;
                SomeVar:long_name = "SomeVar" ;
                SomeVar:units = "m" ;
                SomeVar:_FillValue = 1.91e+026f ;
                SomeVar:coordinates = "nav_lon nav_lat time" ;
        float nav_lon(y, x) ;
                nav_lon:long_name = "longitude" ;
                nav_lon:units = "degrees_east" ;
        float nav_lat(y, x) ;
                nav_lat:long_name = "latitude" ;
                nav_lat:units = "degrees_north" ;


// global attributes:
                :Conventions = "CF-1.0" ;
}
---------------------------------------------------------------------------------------------------------
Now, I want to be able to extract values on a lot of lon/lat coordinates, so in 
this example I cover the larger part of the north-Atlantic with lat from 12 to 
45 and lon from -57 to 21. Here is a test sample of a function that does not 
work, and I have no idea why:
---------------------------------------------------------------------------------------------------------

NetcdfDataset ncfile = NetcdfDataset.openDataset(filename);
GridDataset gds = new GridDataset(ncfile);
GridDatatype grid = gds.findGridDatatype("SomeVar");
GridCoordSystem gcs = grid.getCoordinateSystem();
double lat = -15;
double lon = -40;
int count = 0;
int countHits = 0;
for (int i = 12; i <= 45; i++) {
 for (int j = -57; j <= 21; j++) {
  count++;
  lat = i;
  lon = j;
  int[] xy = gcs.findXYindexFromLatLon(lat, lon, null);
  if (xy[0] != -1 && xy[1] != -1) {
   Array data = grid.readDataSlice(0, 0, xy[1], xy[0]);
   double val = data.getDouble(0);
   if (!Double.isNaN(val)) {
    System.out.println("x,y:" + xy[0] + "," + xy[1]);
    System.out.printf("Value at %f %f == %f%n", lat, lon, val);
    LatLonPoint p = gcs.getLatLon(xy[0], xy[1]);


    // System.out.println(data.toString());
    System.out.println(p.getLatitude());
    System.out.println(p.getLongitude());
    countHits++;
   }
  }
 }
}
System.out.println("hits/count:"+countHits+"/"+count);


---------------------------------------------------------------------------------------------------------
This function would print out hits/count:0/2686 - so it found no values on all 
those coordinates. If I extend the search to -90 to 90 and -180 to 180, then I 
find some valid data: hits/count:10341/65341.


What am I missing here? Is it something wrong on the netCDF format? Am I using 
the library wrong? Is it a bug in the library with this specific format? This 
functions works well for a bunch of other netCDF files on other formats.


I would greatly appreciate any help with this.



Many thanks,
Aleksander Vines
Programmer


Nansen Environmental and Remote Sensing Center
E-MAIL: aleksander.vines@xxxxxxxx, WEB: http://www.nersc.no
PHONE: +47 55 20 58 00,
ADDRESS: Thormøhlens gate 47, 5006 Bergen, Norway  
  • 2013 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: