Re: [netcdf-java] Problem with findXYindexFromLatLon() on a Geogrid subset

  • To: franck.reinquin@xxxxxxx
  • Subject: Re: [netcdf-java] Problem with findXYindexFromLatLon() on a Geogrid subset
  • From: John Caron <caron@xxxxxxxx>
  • Date: Wed, 11 Mar 2015 10:40:03 -0600
Hi Franck:

yes, its a bug in GeoGrid.makeSubset(). Im working on a fix.

thanks for the nice unit test, made it easy to find.

John

On Wed, Mar 11, 2015 at 6:15 AM, <franck.reinquin@xxxxxxx> wrote:

> Hello,
>
> I have problems with the findXYindexFromLatLon() method used with a
> Geogrid subset.
> gcs.getLatLon(0,0) gives me lat/long coordinates that I try to convert
> back to XY coordinates.
> But I get -1 for the X coordinate.
> On the original grid, everything is fine.
>
> The attached example reads one of the sample netCDF files from the Unidata
> website. I'm using netcdfAll-4.5.jar dated March, 6 (v 4.5.5).
>
> Does anyone see what I did wrong ? Code and output below. The "start"
> members look strange.
>
> Thanks,
> Franck
>
> ------------------------------
> *Output :*
>
> Grid name =area
> WHOLE GRID
> is lat/lon system ? true
> gcs bounding box : latmin=-88.927734375 latmax=88.927734375 lonmin=0.0
> lonmax=358.59375
> projection       : LatLonProjection
> width =256, height=128
> X is regular     ? true
> X is contiguous  ? true
> X start          : 0.0
> X increment      : 1.40625
> Y is regular     ? false
> Y is contiguous  ? true
> Y start          : -88.927734375
> Y increment      : 1.4004367618110236
> index (0,0) --> lat/lon : -88.927734375 ; 0.0
> index (1,1) --> lat/lon : -87.53870391845703 ; 1.40625
> looking up lat=-87.53870391845703  lon=1.40625
> index= (1, 1)
>
> SUBGRID (latmin=-20.0  latmax=-10.0  lonmin=35.0  lonmax=45.0)
> is lat/lon system ? true
> gcs bounding box : latmin=-20.31112289428711 latmax=-10.505756378173828
> lonmin=35.15625 lonmax=45.0
> projection       : LatLonProjection
> width =8, height=8
> X is regular     ? true
> X is contiguous  ? true
> X start          : 0.0
> X increment      : 1.40625
> Y is regular     ? false
> Y is contiguous  ? true
> Y start          : 0.0
> Y increment      : 1.4004367618110236
> index (0,0) --> lat/lon : -20.31112289428711 ; 35.15625
> index (1,1) --> lat/lon : -18.910356521606445 ; 36.5625
> looking up lat=-18.910356521606445  lon=36.5625
> index= (-1, 1)
>
> -------------------------
> try {
> GridDataset dataset = GridDataset.open("
> http://www.unidata.ucar.edu/software/netcdf/examples/sresa1b_ncar_ccsm3_0_run1_200001.nc
> ");
>
> GridDatatype firstGridInfo = dataset.getGrids().get(0);
>
> System.out.println("Grid name ="+firstGridInfo.getName());
>
> GeoGrid firstGrid = (GeoGrid) dataset.getGrids().get(0);
>
>
> System.out.println("WHOLE GRID");
> GridCoordSystem gcs    = firstGrid.getCoordinateSystem();
> System.out.println("is lat/lon system ? "+gcs.isLatLon());
>
> LatLonRect rect = gcs.getLatLonBoundingBox();
> System.out.println("gcs bounding box : latmin="+rect.getLatMin()+"
> latmax="+rect.getLatMax()+" lonmin="+rect.getLonMin()+"
> lonmax="+rect.getLonMax());
> System.out.println("projection       : "+gcs.getProjection());
> System.out.println("width ="+gcs.getXHorizAxis().getSize()+",
> height="+gcs.getYHorizAxis().getSize());
> System.out.println("X is regular     ? "+((CoordinateAxis1D)
> gcs.getXHorizAxis()).isRegular());
> System.out.println("X is contiguous  ?
> "+gcs.getXHorizAxis().isContiguous());
> System.out.println("X start          : "+((CoordinateAxis1D)
> gcs.getXHorizAxis()).getStart()) ;
> System.out.println("X increment      : "+((CoordinateAxis1D)
> gcs.getXHorizAxis()).getIncrement()) ;
> System.out.println("Y is regular     ? "+((CoordinateAxis1D)
> gcs.getYHorizAxis()).isRegular());
> System.out.println("Y is contiguous  ?
> "+gcs.getYHorizAxis().isContiguous());
> System.out.println("Y start          : "+((CoordinateAxis1D)
> gcs.getYHorizAxis()).getStart()) ;
> System.out.println("Y increment      : "+((CoordinateAxis1D)
> gcs.getYHorizAxis()).getIncrement()) ;
>
> LatLonPoint p = gcs.getLatLon(0,0);
> System.out.println("index (0,0) --> lat/lon : "+p.getLatitude()+" ;
> "+p.getLongitude());
> p = gcs.getLatLon(1,1);
> System.out.println("index (1,1) --> lat/lon : "+p.getLatitude()+" ;
> "+p.getLongitude());
>
> System.out.println("looking up lat="+p.getLatitude()+"
>  lon="+p.getLongitude());
> int[] xy = gcs.findXYindexFromLatLon(p.getLatitude(), p.getLongitude(),
> null);
> System.out.println("index= ("+xy[0]+", "+xy[1]+")");
>
>
> //
> --------------------------------------------------------------------------
> double latMin=-20.D, latMax=-10.D, lonMin=35.D, lonMax=45.D ;
> System.out.println("\nSUBGRID (latmin="+latMin+"  latmax="+latMax+"
>  lonmin="+lonMin+"  lonmax="+lonMax+")");
>
> LatLonRect    latLonRect = new LatLonRect(
>                     new LatLonPointImpl(latMin, lonMin),
>                     new LatLonPointImpl(latMax, lonMax)) ;
>
> GeoGrid   gridSubset = firstGrid.subset(null, null, latLonRect, 0, 1, 1) ;
>
> GridCoordSystem gcs2    = gridSubset.getCoordinateSystem();
>
> rect = gcs2.getLatLonBoundingBox();
> System.out.println("is lat/lon system ? "+gcs2.isLatLon());
> System.out.println("gcs bounding box : latmin="+rect.getLatMin()+"
> latmax="+rect.getLatMax()+" lonmin="+rect.getLonMin()+"
> lonmax="+rect.getLonMax());
> System.out.println("projection       : "+gcs.getProjection());
> System.out.println("width ="+gcs2.getXHorizAxis().getSize()+",
> height="+gcs2.getYHorizAxis().getSize());
> System.out.println("X is regular     ? "+((CoordinateAxis1D)
> gcs2.getXHorizAxis()).isRegular());
> System.out.println("X is contiguous  ?
> "+gcs2.getXHorizAxis().isContiguous());
> System.out.println("X start          : "+((CoordinateAxis1D)
> gcs2.getXHorizAxis()).getStart()) ;
> System.out.println("X increment      : "+((CoordinateAxis1D)
> gcs2.getXHorizAxis()).getIncrement()) ;
> System.out.println("Y is regular     ? "+((CoordinateAxis1D)
> gcs2.getYHorizAxis()).isRegular());
> System.out.println("Y is contiguous  ?
> "+gcs2.getYHorizAxis().isContiguous());
> System.out.println("Y start          : "+((CoordinateAxis1D)
> gcs2.getYHorizAxis()).getStart()) ;
> System.out.println("Y increment      : "+((CoordinateAxis1D)
> gcs2.getYHorizAxis()).getIncrement()) ;
>
> p = gcs2.getLatLon(0,0);
> System.out.println("index (0,0) --> lat/lon : "+p.getLatitude()+" ;
> "+p.getLongitude());
> p = gcs2.getLatLon(1,1);
> System.out.println("index (1,1) --> lat/lon : "+p.getLatitude()+" ;
> "+p.getLongitude());
>
> System.out.println("looking up lat="+p.getLatitude()+"
>  lon="+p.getLongitude());
> xy = gcs2.findXYindexFromLatLon(p.getLatitude(), p.getLongitude(), null);
> System.out.println("index= ("+xy[0]+", "+xy[1]+")");
>
> } catch (IOException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> } catch (InvalidRangeException e) {
> // TODO Auto-generated catch block
> e.printStackTrace();
> }
>
> _______________________________________________
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit:
> http://www.unidata.ucar.edu/mailing_lists/
>
  • 2015 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: