Hi John -
Looks like I might have found another bug, this time with server-side
Netcdf data
that's natively in a lat/lon grid (seems to work if non-LL grid).
The method on GridCoordSys:
public List getRangesFromLatLonRect(LatLonRect rect)
has this snippet of code near the beginning of the method:
if (isLatLon()) {
minx = getMinOrMaxLon( llpt.getLongitude(), ulpt.getLongitude(),
true);
miny = Math.min( llpt.getLatitude(), lrpt.getLatitude());
maxx = getMinOrMaxLon( urpt.getLongitude(), lrpt.getLongitude(),
false);
maxy = Math.min( ulpt.getLatitude(), urpt.getLatitude());
} else {...}
If I try to geoGrid.subset(....) with a lat/lon bbox that is *bigger*
than the data
(say I zooom waaaay out, strides = 1), the above code will return, say,
a minx and maxx that would
extend outside of the data. That's good (i think). But then a few
lines later, the following
code will have problems:
if ((xaxis instanceof CoordinateAxis1D) && (yaxis instanceof
CoordinateAxis1D)) {
CoordinateAxis1D xaxis1 = (CoordinateAxis1D) xaxis;
CoordinateAxis1D yaxis1 = (CoordinateAxis1D) yaxis;
int minxIndex = xaxis1.findCoordElementBounded(minx);
int minyIndex = yaxis1.findCoordElementBounded(miny);
int maxxIndex = xaxis1.findCoordElementBounded(maxx);
int maxyIndex = yaxis1.findCoordElementBounded(maxy);
ArrayList list = new ArrayList();
try {
list.add(new Range(Math.min(minyIndex, maxyIndex),
Math.max(minyIndex, maxyIndex)));
list.add(new Range(Math.min(minxIndex, maxxIndex),
Math.max(minxIndex, maxxIndex)));
} catch (InvalidRangeException e) {
e.printStackTrace();
}
If the minx/maxx etc fall outside of the data, then for example,
xaxis1.findCoordElementBounded(minx) might return -1, in which
case the new Range(....) will throw an exception.
Havent tried non-1 strides yet...
Here's the url (with tunnel ;-( that I am using:
http://www.rap.ucar.edu/projects/rdwx_mdss/thredds.php/dodsC/data/decIR
geoGridName = "micron11"
And an example data file is attached.
;-) Thanks for listening, and whatever you can do ;-))
Enjoying the conference??
;-)