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.
Ian Barrodale wrote:
Please see lower down for our response to John's comments of yesterday. At 03:25 PM 2/12/2007, John Caron wrote:Ian Barrodale wrote:Hi All: Based on your feedback (John and Ted), we've been talking and have an interesting project idea - brought up today by Peter. If we were able to put GRD database support into the Java netCDFlibrary and use THREDDS and TDS to serve data, we may also be able to provide gridded data reprojection support. What do you think of this idea please? Some details follow below.If a grd:// URL was allowed to contain a bit of spatial reference text so that not only did it specify the database server, login info, database name, and variable name, but also the projection and its parameters (sort of like an OPeNDAP subset specification) then the GRD could reproject any of the gridded data (including satellite swath data such as from a POES satellite) to a projection of the user's choice. The spatial reference text could be tacked onto the grd:// URL in the records returned by THREDDS according to some number of pre-specified projections that we create. Such a capability would help to support users like Dave Foley andRoy Mendelssohn (copied) who have expressed an interest to us in storing unmapped satellite data in a spatial database, as well as other groups such as the NOAA/NESDIS CLASS archive. According to Peter,the NOAA CoastWatch technical group has been talking for years abouthow nice it would be to be able to pull unmapped satellite data out of CLASS in a user- specified projection rather than having to create mapped products.Have a great weekend. Regards, Ian ====================Its a very interesting possibility. The core question is, *how does the user specify the reprojection?*The Current Plan is:A special database table would be populated with a list of "projections of interest" and the geographic extents to which they should be applied (either expressed as a GRDBox or as a lat-lon rectangle). The THREDDS catalog would then be populated with an entry for each grid paired up with each projection whose geographical extent overlapped the grid. As a refinement, the "projection of interest" table could also include a list of table names so that certain projections were only applied to grids from certain tables.This means that the burden of specifying the set of "projections of interest" would be on the administrator of the database. If the interest is present, we could provide a variation of our map projection applet (see http://www.barrodale.com/projectionDemo/index.html ) that allowed trusted external users to interactively define projections and their regions of interests, in essence, removing even this burden.We welcome any comments on this Plan of course. Regards, Ian
Hello all: Certainly this plan will work when there are a reasonable number of projections. This allows the user transparent access of the data using the netcdf API. I would like to clarify/amplify my answer to the following question in the context of using TDS:2) How does the I/O SP architecture determine the I/O SP for a given file:// <file://\> style URL? How would it know to handle a grd:// URL differently?
Lets suppose that you hava a dataset with logical name "SatMet" with 3 projections, so perhaps we name these "SatMet/proj1", "SatMet/proj2", "SatMet/proj3". If you were serving these up through opendap, the URL would look something like: http://server:port/thredds/dodsC/barrodale/SatMet/proj1 now we need to map "barrowdale/SatMet/proj1" to your dataset. We are adding a way for implementors to do this, called a DatasetSource (preliminary doc is at http://www.unidata.ucar.edu/projects/THREDDS/tech/reference/DatasetSource.html ; note this is still experimental) you could implement something like: public class BarrodaleDataSource implements thredds.servlet.DatasetSource { HashMap hash = new HashMap(); public boolean isMine(HttpServletRequest req) { String path = req.getPathInfo(); return path.startsWith("/barrodale/"); } public NetcdfFile getNetcdfFile(HttpServletRequest req, HttpServletResponse res) throws IOException { String path = req.getPathInfo(); path = path.substring("/barrodale/".length()); String databaseURL = (String) hash.get(path); if (databaseURL == null) { res.sendError(HttpServletResponse.SC_NOT_FOUND); return null; } return new BarrodaleNetcdfFile(req.getRequestURI(), databaseURL); } private class BarrodaleNetcdfFile extends NetcdfFile { BarrodaleNetcdfFile(String location, String databaseURL) throws IOException { super( new BarrodaleIOSP(databaseURL), null, location, null); } }}
public class BarrodaleIOSP implements IOServiceProvider { ... } This is in the context of servlets, something similar can be done on the client. We may end up doing both with a common mechanism. I thought it would be useful to give a concrete possibility. John
netcdf-java
archives: