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();
}