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

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(); 
} 
  • 2015 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: