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.
Mark Rehbein wrote:
Hi John, I have made some excellent progress in our satellite imagery software which is using the netcdf java API you are actively developing. Our application is a web server based where images/maps are generated on the web server (tomcat) using the ESRI MapObjects Java Edition API, JAI and the NetCDF API. The generated maps are then sent to the clients web browser as a JPEG or PNG. The generated maps have GIS data/layers laid over the sattelite imagery retrieved from the netCDF file. I would like to know if you are planning to include in the netcdf API, a set of classes that could manage multiple netcdf files such that it would appear to clients of the classes that they were dealing with a single very large netcdf file. I have a need for this functionality as our imagery is currently taking up 2GB for each 6 months of imagery and we plan to host 15 years worth and as such we would like to split our imagery into netcdf files with 1 months worth of data in each. It would be expected that the system be able to retrieve a time series that would span multiple months/years. I will write my own set of classes to handle the multiple netcdfs, but it might be something that could be included in the netcdf java API in the future. Please let me know your comments on this. Also, I require functionality in the API that could read data from an image in the netcdf file as show in the following example: Data along a "diagonal" line from Point 1 (lat:-10,lon:149) to Point 2 (lat:-15,lon:156). At the moment, I plan to do this by reading all the data bounded by the above coordinates, using JAI to rotate the image (while applying pixel interpolation) such that the line between Point 1 and Point 2 is normal to the Y axis of the rotated image. Then I can read the data along the line easily. I may have missed something in the doco/manual, but I could not see anything in the API that could do this for me. Thanks for all your help so far as I understand that you are busy stabilising the API in preparation for production release. cheers Mark On Fri, 16 May 2003, John Caron wrote:Mark Rehbein wrote:Hi John, I have noticed that you are actively working on the API as I have seen the javadoc change on GridCoordSys in the last few hours. I have since downloaded the library again, as I was using this class for my program.yes, Im trying to get a stable version out. sorry for the changes.I have made some progress but have a question and wish to report a bug/problem. My question is: How do I easily convert a java.util.Date to an array index on the time axis? There is a method GridCoordSys.findXYCoordElement(double, double, int[]) which handles converting latitude and longitude to array indexes and I think it would be useful to have an equivalent for the time axis.how about: /** * Given a Date, find the corresponding time index on the time coordinate axis. * Can only call this is hasDate() is true. * This will return * <ul> * <li> i, if time(i) <= d < time(i+1). * <li> -1, if d < time(0) * <li> n-1, if d > time(n-1), where n is length of time coordinates * </ul> * * @param d date to look for * @param corresponding time index on the time coordinate axis * @throws UnsupportedOperationException is no time axis or isDate() false */ public int findTimeCoordElement(Date d) ;The bug or problem that I have discovered is a negative seek offset error as shown below: <error> java.io.IOException: Negative seek offset at java.io.RandomAccessFile.seek(Native Method) at ucar.netcdf.RandomAccessFile.read_(RandomAccessFile.java:508) at ucar.netcdf.RandomAccessFile.seek(RandomAccessFile.java:350) at ucar.netcdf.NetcdfFile$V1FloatIo.readArray(NetcdfFile.java:1447) at ucar.netcdf.NetcdfFile$V1Io.copyout(NetcdfFile.java:896) at ucar.netcdf.Variable.copyout(Variable.java:276) at ucar.nc2.Variable.read(Variable.java:184) at ucar.nc2.dataset.VariableDS.read(VariableDS.java:334) at aims.app.science.biodiv.sstAtlas.ImageLibrary.readData(ImageLibrary.java:166) at aims.app.science.biodiv.sstAtlas.ImageLibrary.main(ImageLibrary.java:423) done! </error> I have appended the method I have written below for your convenience, if needed. The method works fine when I use: latitude= -7.0 and longitude= 157.99 latitude= -27.0 and longitude= 157.99 latitude= -27.0 and longitude= 142.00 latitude= -7.0 and longitude= 142.00 but it throws the above error when using lat= -19.6 and lon= 150.5 which are coordinates within the bounds of coordinates which work!i assume you found this problemI have noticed that the *bottom* *left* corner of my images (in lat,lon coordinates) represents 0,0 in array index coordinates. I would have expected that the *top* *left* corner of my images (in lat,lon coordinates) would be represented by 0,0 in array index coordinates.latitudes are stored both ways: north to south ans south to north. I am going to add a routine to normalize this in GeoGrid, havent figured out the API yet.
Hi Mark:We are working on a thing called "NcML Dataset" that allows you to describe a dataset that consists of multiple netcdf files using an XML dialect called NcML. Im trying to get this API finalized also, and will announce it in the next few weeks so you can have a look, and try it out.
There may be some performance issues with very large datasets like you indicate above.I look forward to hearing your thoughts on what is needed, and perhaps we can work together on making it as fast as possible.
Currently we are only planning on continuing to provide an API that extracts rectangular subsets, not diagonals.
netcdf-java
archives: