Re: [Fwd: multi band tiff from netCDF]

_From owner-netcdf-java@xxxxxxxxxxxxxxxx Wed Apr 20 11:08:50 2005
Received: (from majordo@localhost)
        by unidata.ucar.edu (UCAR/Unidata) id j3KH7Qxx015661
        for netcdf-java-out; Wed, 20 Apr 2005 11:07:26 -0600 (MDT)
Received: from crow.rsinc.com (crow.rsinc.com [192.5.156.11])
        by unidata.ucar.edu (UCAR/Unidata) with ESMTP id j3KH6mv2015629;
        Wed, 20 Apr 2005 11:06:48 -0600 (MDT)
Organization: UCAR/Unidata
Keywords: 200504201706.j3KH6mv2015629
Received: from mack.corp.rsinc.com (nis1.bldr.rsinc.com [10.17.10.11])
        by crow.rsinc.com (8.12.11/8.12.10) with ESMTP id j3KH6lJs007463;
        Wed, 20 Apr 2005 11:06:48 -0600 (MDT)
Received: from apollo.rsinc.com (apollo.rsinc.com [10.17.10.67])
        by mack.corp.rsinc.com (8.12.11/8.12.10) with ESMTP id j3KH6lir028793;
        Wed, 20 Apr 2005 11:06:47 -0600 (MDT)
Received: from bath.uk.rsinc.com ([192.168.202.5]) by apollo.rsinc.com with 
Microsoft SMTPSVC(6.0.3790.211);
         Wed, 20 Apr 2005 11:07:04 -0600
X-MimeOLE: Produced By Microsoft Exchange V6.5.7226.0
Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: text/plain;
        charset="iso-8859-1"
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: [Fwd: multi band tiff from netCDF]
Thread-Index: AcVE6e6gLbhBLk7IRKaLRK6JFsuGkgA4IHuw
Cc: "Yuan Ho" <yuanho@xxxxxxxxxxxxxxxx>, <netcdf-java@xxxxxxxxxxxxxxxx>,
        <support-netcdf-java@xxxxxxxxxxxxxxxx>
X-OriginalArrivalTime: 20 Apr 2005 17:07:04.0890 (UTC) 
FILETIME=[607539A0:01C545CB]
Content-Transfer-Encoding: 8bit
X-MIME-Autoconverted: from quoted-printable to 8bit by unidata.ucar.edu id 
j3KH6nv2015630
Sender: owner-netcdf-java@xxxxxxxxxxxxxxxx
Precedence: bulk

Hi,

I have added geotiff tags, I have hacked this code into a class that you can 
use (it has a main method)
but it isn't particulary nicely written (I have spent two days going through 
the JAI source code to
understand it!!)

I have currently restricted the data to WGS84(LL) and floating point variables, 
but this is a restriction on my code, not the method, so it would be fairly 
easy to extend this.  I have commented
out the section that added the time stamp from the netCDF file since it will 
vary from netCDF to netCDF
but it is there to look at.

class usage is java TestGeotiffWriter netCDFFile varName 
and the result is the netCDFFile name with the extension changed to .tif.


Hope this helps,

Norman Barker

p.s. (apologies top posted again, since not sure whether this newsgroup accepts 
attachments and (long) file below)


import java.awt.image.ColorModel;
import java.awt.image.DataBuffer;
import java.awt.image.DataBufferFloat;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import javax.media.jai.JAI;
import javax.media.jai.ParameterBlockJAI;
import javax.media.jai.PlanarImage;
import javax.media.jai.TiledImage;

import ucar.ma2.Array;
import ucar.nc2.DataType;
import ucar.nc2.dataset.CoordinateAxis1D;
import ucar.nc2.dataset.NetcdfDataset;
import ucar.nc2.dataset.grid.GeoGrid;
import ucar.nc2.dataset.grid.GridCoordSys;
import ucar.nc2.dataset.grid.GridDataset;
import ucar.unidata.geoloc.ProjectionPoint;
import ucar.unidata.geoloc.ProjectionRect;

import com.rsinc.data.IngestFile;
import com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet;
import com.sun.media.imageio.plugins.tiff.GeoTIFFTagSet;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
import com.sun.media.jai.codec.TIFFEncodeParam;
import com.sun.media.jai.codec.TIFFField;
import com.sun.media.jai.codecimpl.util.RasterFactory;

public class TestGeotiffWriter {
        public static String EXTENSION = "tif";

        public void convertToGeotiff(String ncdfFilename, String varName) {

                String outGTif = String.copyValueOf(ncdfFilename.toCharArray(), 
0,
                                ncdfFilename.lastIndexOf('.') + 1);
                outGTif = outGTif.concat(TestGeotiffWriter.EXTENSION);
                System.out.println("converting to " + outGTif);

                try {
                        NetcdfDataset ncDataset = 
NetcdfDataset.openDataset(ncdfFilename);

                        GridDataset gSet = new GridDataset(ncDataset);
                        GeoGrid grid = 
gSet.findGridByName(IngestFile.GRID_NAME);
                        GridCoordSys gcs = grid.getCoordinateSystem();

                        if (!gcs.isLatLon()) {
                                System.out.println("Only converting WGS84 (LL) 
at the mo");
                                return;
                        }

                        ProjectionRect bb = gcs.getBoundingBox();
                        ProjectionPoint minPt = bb.getMinPoint();
                        ProjectionPoint maxPt = bb.getMaxPoint();

                        // find the actual tie points of the data
                        double tlX = minPt.getX();
                        double tlY = maxPt.getY();

                        // lat and lon axes seem to get swapped so try this hack
                        // to find res in x and y
                        CoordinateAxis1D xaxis = (CoordinateAxis1D) 
gcs.getXHorizAxis();
                        CoordinateAxis1D yaxis = (CoordinateAxis1D) 
gcs.getYHorizAxis();
                        double xStart = xaxis.getCoordValue(0);
                        double yStart = yaxis.getCoordValue(0);
                        double xEnd = xaxis
                                        
.getCoordValue(grid.getXDimension().getLength() - 1);
                        double yEnd = yaxis
                                        
.getCoordValue(grid.getYDimension().getLength() - 1);
                        double xScale = (xEnd - xStart) / xaxis.getSize();
                        double yScale = (yEnd - yStart) / yaxis.getSize();

                        List list = ncDataset.getCoordinateAxes();
                        Iterator itr = list.iterator();
            boolean found = false;
                        while (itr.hasNext()) {
                                CoordinateAxis1D dim = (CoordinateAxis1D) 
itr.next();
                                String dimName = dim.getName();

                                if (dimName.equals(varName)) {
                                        found = true;
                                        int nBands = (int) dim.getSize();

                                        // do some checks before progressing
                                        if (dim.isUnlimited()) {
                                                // we can't do anything, log
                                                System.out
                                                                
.println("unlimited dimension can write infinite no of bands.");
                                                return;
                                        }

                                        if (dim.getDataType() != 
DataType.FLOAT) {
                                                System.out
                                                                .println("only 
converting variables of floating point at the moment");
                                                return;
                                        }

                                        int width = 
grid.getXDimension().getLength();
                                        int height = 
grid.getYDimension().getLength();

                                        ParameterBlockJAI pbjai = new 
ParameterBlockJAI("bandmerge");

                                        for (int i = 0; i < nBands; i++) {
                                                Array arr = 
grid.readDataSlice(-1, i, -1, -1);
                                                float[] data = (float[]) 
arr.getStorage();
                                                DataBufferFloat dbuffer = new 
DataBufferFloat(data,
                                                                width * height);

                                                // create a float data sample 
model
                                                SampleModel sampleModel = 
RasterFactory
                                                                
.createBandedSampleModel(DataBuffer.TYPE_FLOAT,
                                                                                
width, height, 1);

                                                // create a compatible colour 
model
                                                ColorModel colorModel = 
PlanarImage
                                                                
.createColorModel(sampleModel);

                                                // create a writable raster
                                                Raster raster = 
RasterFactory.createWritableRaster(
                                                                sampleModel, 
dbuffer, null);

                                                // create a tiled image using 
the float sample model
                                                TiledImage tiledImage = new 
TiledImage(0, 0, width,
                                                                height, 0, 0, 
sampleModel, colorModel);

                                                // set the data of the tiled 
image to be the raster
                                                tiledImage.setData(raster);

                                                pbjai.setSource(tiledImage, i);
                                        }

                                        // write to file
                                        PlanarImage result = 
JAI.create("bandmerge", pbjai, null);

                                        File file = new File(outGTif);
                                        FileOutputStream out = new 
FileOutputStream(file);

                                        //Then we create the image encoder and 
encode the buffered image in TIFF.

                                        // write geotiff information, in our 
case WGS84 (LL)
                                        TIFFEncodeParam params = new 
TIFFEncodeParam();

                                        // only dealing with Lat Lon (WGS84)
                                        if (gcs.isLatLon()) {
                                                String[] desc = { 
IngestFile.DIM_NAME + " Bands" };
                                                TIFFField descField = new 
TIFFField(
                                                                
BaselineTIFFTagSet.TAG_IMAGE_DESCRIPTION,
                                                                
TIFFField.TIFF_ASCII, 1, desc);

                                                double[] tiePts = { 0, 0, 0, 
tlX, tlY, 0 };

                                                TIFFField tiePtField = new 
TIFFField(
                                                                
GeoTIFFTagSet.TAG_MODEL_TIE_POINT,
                                                                
TIFFField.TIFF_DOUBLE, tiePts.length, tiePts);

                                                double[] pixelScales = { 
xScale, yScale, 0 };
                                                TIFFField pixelSclField = new 
TIFFField(
                                                                
GeoTIFFTagSet.TAG_MODEL_PIXEL_SCALE,
                                                                
TIFFField.TIFF_DOUBLE, pixelScales.length,
                                                                pixelScales);

                                                char[] geoKeyArr = { 1, 1, 2, 
3, // version, key major, key minor, no. keys
                                                                1024, 0, 1, 2, 
// GTModelTypeGeoKey 1024
                                                                1025, 0, 1, 1, 
// GTRasterTypeGeoKey 1025
                                                                2048, 0, 1, 
4326 // GeographicTypeGeoKey 2048
                                                };
                                                TIFFField geoKeyDir = new 
TIFFField(
                                                                
GeoTIFFTagSet.TAG_GEO_KEY_DIRECTORY,
                                                                
TIFFField.TIFF_SHORT, geoKeyArr.length,
                                                                (Object) 
geoKeyArr);

                                                TIFFField dateField = null;
                                                // get the first time stamp in 
the file
                                                /*                              
                        if (grid.getTimes() != null)
                                                 {
                                                 NamedObject dateObj = 
(NamedObject)grid.getTimes().get(0);
                                                 String dateStr = 
dateObj.getDescription();
                                                 // dateStr should be formatted 
to 20 chars
                                                 // time format in our netCDF 
files 
                                                 // days_since_20 10101.06
                                                 // format in tiff is 
YYYY:MM:DD HH:MM:SS
                                                 dateStr = dateStr.replace(' ', 
'0');
                                                 DateFormat formatter = new 
SimpleDateFormat("'days_since_'yyyyMMdd'.'HH");
                                                 Date date = 
formatter.parse(dateStr);
                                                 DateFormat tiffFormatter = new 
SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
                                                 // null terminated string
                                                 String[] tiffDateStr = 
{tiffFormatter.format(date)};
                                                 dateField = new 
TIFFField(BaselineTIFFTagSet.TAG_DATE_TIME, TIFFField.TIFF_ASCII, 1, 
tiffDateStr);
                                                 }*/
                                                if (dateField != null) {
                                                        TIFFField[] fields = { 
descField, geoKeyDir,
                                                                        
tiePtField, pixelSclField, dateField };
                                                        
params.setExtraFields(fields);
                                                } else {
                                                        TIFFField[] fields = { 
descField, geoKeyDir,
                                                                        
tiePtField, pixelSclField };
                                                        
params.setExtraFields(fields);
                                                }

                                        }

                                        
params.setCompression(TIFFEncodeParam.COMPRESSION_NONE);
                                        ImageEncoder encoder = 
ImageCodec.createImageEncoder(
                                                        "TIFF", out, params);

                                        if (encoder == null) {
                                                
System.out.println("imageEncoder is null");
                                                System.exit(0);
                                        }
                                        encoder.encode(result);
                                        out.close();
                                }
                        }  // end of while
                        if (!found)
                        {
                                System.out.println("failed to find named 
variable in dataset");
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }

        }
        
        public static void printUsage()
        {
                System.out.println("Usage: java TestGeotiffWriter netCDFFile 
variableName");
        }
        
        public static void main(String[] args)
        {
                if (args.length < 2)
                {
                        TestGeotiffWriter.printUsage();
                }
                else
                {
                        TestGeotiffWriter writer = new TestGeotiffWriter();
                        writer.convertToGeotiff(args[0], args[1]);
                        System.out.println("Finished conversion");
                }
        }

}


-----Original Message-----
Sent: Tuesday, April 19, 2005 3:13 PM
Cc: Yuan Ho; netcdf-java@xxxxxxxxxxxxxxxx;
support-netcdf-java@xxxxxxxxxxxxxxxx


Hi Norman:

Thanks for the code. We looked at using JAI to write TIFF, but failed to 
get it working ("JAI documentation is a bit sparse"). Is the code the 
complete way to do that? Are there any problems with it that you know 
of? It doesnt appear that youve added the geotiff tags, is that correct? 
Any advice you can give us on using or not using JAI?

thanks again!




Norman Barker wrote:

>Thanks for the reply, I will top post (apologies) since the file is long.
>
>I wrote some test code before I integrated into my app, and using netcdf-java 
>and
>JAI the following creates a multiband tif file. (there are some redundant 
>variables in
>there, apologies again).  JAI documentation is a bit sparse, so hope this 
>helps.
>
>Norman
>
>       public static void main(String[] args) {
>               String testNC = "/temp/test.nc";
>               String outGTif = "/temp/out.tif";
>               String gridName = "ta";
>               try {
>                       NetcdfDataset ncDataset = 
> NetcdfDataset.openDataset(testNC);
>                       
>                       GridDataset gSet = new GridDataset(ncDataset);
>                       GeoGrid grid = gSet.findGridByName(gridName);
>            GridCoordSys gcs = grid.getCoordinateSystem();
>                       
>                   //latlon coord does not need to be scaled
>                   double scaler = (gcs.isLatLon()) ? 1.0 : 1000.0;
>
>                   CoordinateAxis1D xaxis = (CoordinateAxis1D) 
> gcs.getXHorizAxis();
>                   CoordinateAxis1D yaxis = (CoordinateAxis1D) 
> gcs.getYHorizAxis();
>                   double xStart = xaxis.getCoordValue(0) * scaler;
>                   double yStart = yaxis.getCoordValue(0) * scaler;
>                       double xEnd = 
> xaxis.getCoordValue(grid.getXDimension().getLength()-1) * scaler;
>                       double yEnd = 
> yaxis.getCoordValue(grid.getYDimension().getLength()-1) * scaler;
>                       double xInc = (xEnd - xStart)/xaxis.getElementSize();
>                       double yInc = (yEnd - yStart)/yaxis.getElementSize();
>                       
>                       
>                       
>                       List list = ncDataset.getCoordinateAxes();
>                       Iterator itr = list.iterator();
>
>                       while (itr.hasNext()) {
>                               CoordinateAxis1D dim = (CoordinateAxis1D) 
> itr.next();
>                               String dimName = dim.getName();
>
>                               if (dimName.equals(IngestFile.DIM_NAME)) {
>                                       int nBands = (int) dim.getSize();
>                                       if (dim.isUnlimited()) {
>                                               // we can't do anything, log
>                                               return;
>                                       }
>                                       
>                                       int width = 
> grid.getXDimension().getLength();
>                                       int height = 
> grid.getYDimension().getLength();
>               
>                                       ParameterBlockJAI pbjai = new 
> ParameterBlockJAI("bandmerge");
>                                       
>                                       for (int i = 0; i < nBands; i++)
>                                       {
>                                               Array arr = 
> grid.readDataSlice(-1, i, -1, -1);
>                                               float[] data = (float[]) 
> arr.getStorage();
>                                               DataBufferFloat dbuffer = new 
> DataBufferFloat(data, width*height);
>                                               
>                                               // create a float data sample 
> model
>                                               SampleModel sampleModel = 
> RasterFactory.createBandedSampleModel(DataBuffer.TYPE_FLOAT, width, height, 
> 1);
>                                               
>                                               // create a compatible colour 
> model
>                                               ColorModel colorModel = 
> PlanarImage.createColorModel(sampleModel);
>                                               
>                                               // create a writable raster
>                                               Raster raster = 
> RasterFactory.createWritableRaster(sampleModel, dbuffer, null);
>                                               
>                                               // create a tiled image using 
> the float sample model
>                                               TiledImage tiledImage = new 
> TiledImage(0, 0, width, height, 0, 0, sampleModel, colorModel);
>                                               
>                                               // set the data of the tiled 
> image to be the raster
>                                               tiledImage.setData(raster);
>                                               
>                                               pbjai.setSource(tiledImage, i);
>                                       }
>                                       // save the image on a file
>                                       PlanarImage result = 
> JAI.create("bandmerge", pbjai, null);
>                                       JAI.create("filestore", result, 
> outGTif, "TIFF");
>                                       break;
>                               }
>                       }
>               } catch (Exception e) {
>                       e.printStackTrace();
>               }
>
>       }
>
>-----Original Message-----
>From: Yuan Ho [mailto:yuanho@xxxxxxxxxxxxxxxx]
>Sent: Monday, April 18, 2005 5:27 PM
>To: Norman Barker
>Cc: netcdf-java@xxxxxxxxxxxxxxxx; support-netcdf-java@xxxxxxxxxxxxxxxx
>Subject: Re: [Fwd: multi band tiff from netCDF]
>
>
>John Caron wrote:
>
>  
>
>>can you answer this?
>>cc to netcdf-java@xxxxxxxxxxxxxxxx and 
>>support-netcdf-java@xxxxxxxxxxxxxxxx
>>
>>-------- Original Message --------
>>Subject:     multi band tiff from netCDF
>>Date:     Mon, 18 Apr 2005 16:01:21 +0100
>>From:     Norman Barker <nbarker@xxxxxxxxx>
>>Organization:     UCAR/Unidata
>>To:     <netcdf-java@xxxxxxxxxxxxxxxx>
>>
>>
>>
>>Hi,
>>
>>I am using the java classes  to convert a netcdf file for one time 
>>instance, with 27 levels in Z (atmospheric pressure levels).
>>
>>I have created a loop with variable i, and attempting to write a band 
>>in the tif file
>>for each iteration. What seems to happen is the first band gets 
>>written ok, but then after that
>>the page number gets messed up?
>>
>>Array data = grid.readDataSlice(0, i, -1, -1);
>>writer.writeGrid(grid, data, false, xStart, yStart, xInc, yInc, i);
>>
>>Has anyone got any pseudo code for writing multiband tif files from 
>>netCDF?
>>
>>Many thanks,
>>
>>Norman Barker
>>    
>>
>
>Norman,
>               The code was not designed for multiband tiff files. We 
>originally believed that multipage was better to store multi variables 
>and/or multi vertical levels.
>We just realized that multiband was probably better embraced because of 
>the existing tiff readers and the concept of tiff community. This will 
>be my next task to change the
>software to use multiband to store tiff files, it will be released 
>sometime in the Summer.
>
>Yuan
>
>  
>


>From owner-netcdf-java@xxxxxxxxxxxxxxxx Thu 5  2005 May 15:35:45
Message-ID: <1115303745.427a2f41a616a@xxxxxxxxxxxxxxxxxxx>
Date: Thu,  5 May 2005 15:35:45 +0100
From: Adityarajsingh Santokhee <ads@xxxxxxxxxxxxxxxxxxxx>
To: netcdf-java@xxxxxxxxxxxxxxxx
Subject: Problem Reading GRIB Data


_From owner-netcdf-java@xxxxxxxxxxxxxxxx Thu May  5 08:37:24 2005
Received: (from majordo@localhost)
        by unidata.ucar.edu (UCAR/Unidata) id j45Ea0Ue001144
        for netcdf-java-out; Thu, 5 May 2005 08:36:00 -0600 (MDT)
Received: from vimg3.rdg.ac.uk (vimg3.rdg.ac.uk [134.225.1.80])
        by unidata.ucar.edu (UCAR/Unidata) with ESMTP id j45EZwP3001131
        for <netcdf-java@xxxxxxxxxxxxxxxx>; Thu, 5 May 2005 08:35:59 -0600 (MDT)
Organization: UCAR/Unidata
Keywords: 200505051435.j45EZwP3001131
Received: from vimp2.rdg.ac.uk ([134.225.16.91])
        by vimg3.rdg.ac.uk (Exim: gateway)
        with esmtp id 1DThSD-0004UM-00
        for netcdf-java@xxxxxxxxxxxxxxxx; Thu, 05 May 2005 15:35:53 +0100
Received: from vimh1.rdg.ac.uk ([134.225.16.83])
        by vimp2.rdg.ac.uk (Exim: virusscanner)
        with esmtp id 1DThS7-0000Eq-00
        for netcdf-java@xxxxxxxxxxxxxxxx; Thu, 05 May 2005 15:35:47 +0100
Received: from mercury.nerc-essc.ac.uk ([192.171.166.1])
        by vimh1.rdg.ac.uk (Exim: host)
        with esmtp id 1DThS7-0002JB-00; Thu, 05 May 2005 15:35:47 +0100
Received: from sweeney.nerc-essc.ac.uk (sweeney.nerc-essc.ac.uk 
[192.171.166.116])
        by mercury.nerc-essc.ac.uk (8.12.10/8.12.10) with ESMTP id 
j45EZkBW016460;
        Thu, 5 May 2005 15:35:46 +0100 (BST)
Received: from localhost.localdomain (sweeney [127.0.0.1])
        by sweeney.nerc-essc.ac.uk (8.12.8/8.12.8) with ESMTP id j45EZjwX000594;
        Thu, 5 May 2005 15:35:45 +0100
Received: (from apache@localhost)
        by localhost.localdomain (8.12.8/8.12.8/Submit) id j45EZjHc000592;
        Thu, 5 May 2005 15:35:45 +0100
Received: from brahman.nerc-essc.ac.uk (brahman.nerc-essc.ac.uk 
[192.171.166.139]) 
        by www.nerc-essc.ac.uk (IMP) with HTTP 
        for <ads@xxxxxxxxxxxxxxxxxxxxxxx>; Thu,  5 May 2005 15:35:45 +0100
Cc: support-netcdf-java@xxxxxxxxxxxxxxxx
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
User-Agent: Internet Messaging Program (IMP) 3.2.2
X-Originating-IP: 192.171.166.139
X-Scanner: exiscan *1DThS7-0000Eq-00*gHzch6aQTI.* (The University of Reading)
Sender: owner-netcdf-java@xxxxxxxxxxxxxxxx
Precedence: bulk


Hello,

I am trying to read a variable's data from a GRIB file. The read(java.util.List
section) function is giving an array out of bounds error message for any
section apart from the whole range. Are there any workarounds to this problem
or should I load whole data for that variable and then do subsetting. This
might be a problem if I have to read hundred's of files. 

Error Message:

java.lang.ArrayIndexOutOfBoundsException: 4
        at ucar.ma2.ArrayFloat.setFloat(ArrayFloat.java:193)
        at ucar.ma2.IteratorFast.setFloatNext(IteratorFast.java:61)
        at
ucar.nc2.iosp.grib.GribServiceProvider.readXY(GribServiceProvider.java:177)
        at
ucar.nc2.iosp.grib.GribServiceProvider.readLevel(GribServiceProvider.java:150)
        at
ucar.nc2.iosp.grib.GribServiceProvider.readData(GribServiceProvider.java:134)
        at ucar.nc2.NetcdfFile.readData(NetcdfFile.java:848)
        at ucar.nc2.Variable._read(Variable.java:737)
        at ucar.nc2.Variable.read(Variable.java:451)
        at ucar.nc2.dataset.VariableDS._read(VariableDS.java:206)
        at ucar.nc2.Variable.read(Variable.java:451)
        at ucar.nc2.dataset.VariableDS._read(VariableDS.java:206)
        at ucar.nc2.Variable.read(Variable.java:475)
        at Test2netcdf.readData(Test2netcdf.java:76)
        at Test2netcdf.main(Test2netcdf.java:128)


Cheers,

Adit.

>From owner-netcdf-java@xxxxxxxxxxxxxxxx Fri 6  2005 May 19:12:16
Message-ID: <1115403136.427bb38010be0@xxxxxxxxxxxxxxxxxxx>
Date: Fri,  6 May 2005 19:12:16 +0100
From: Adityarajsingh Santokhee <ads@xxxxxxxxxxxxxxxxxxxx>
In-Reply-To: <1115303745.427a2f41a616a@xxxxxxxxxxxxxxxxxxx>
To: netcdf-java@xxxxxxxxxxxxxxxx, support-netcdf-java@xxxxxxxxxxxxxxxx
Subject: Problem with GRIB files

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

_From owner-netcdf-java@xxxxxxxxxxxxxxxx Fri May  6 12:13:58 2005
Received: (from majordo@localhost)
        by unidata.ucar.edu (UCAR/Unidata) id j46ICZLq007071
        for netcdf-java-out; Fri, 6 May 2005 12:12:35 -0600 (MDT)
Received: from vimg3.rdg.ac.uk (vimg3.rdg.ac.uk [134.225.1.80])
        by unidata.ucar.edu (UCAR/Unidata) with ESMTP id j46ICTP3007055;
        Fri, 6 May 2005 12:12:30 -0600 (MDT)
Organization: UCAR/Unidata
Keywords: 200505061812.j46ICTP3007055
Received: from vimp2.rdg.ac.uk ([134.225.16.91])
        by vimg3.rdg.ac.uk (Exim: gateway)
        with esmtp id 1DU7JH-0007Up-00; Fri, 06 May 2005 19:12:23 +0100
Received: from vimh1.rdg.ac.uk ([134.225.16.83])
        by vimp2.rdg.ac.uk (Exim: virusscanner)
        with esmtp id 1DU7JB-0003k7-00; Fri, 06 May 2005 19:12:17 +0100
Received: from mercury.nerc-essc.ac.uk ([192.171.166.1])
        by vimh1.rdg.ac.uk (Exim: host)
        with esmtp id 1DU7JB-0002D1-00; Fri, 06 May 2005 19:12:17 +0100
Received: from sweeney.nerc-essc.ac.uk (sweeney.nerc-essc.ac.uk 
[192.171.166.116])
        by mercury.nerc-essc.ac.uk (8.12.10/8.12.10) with ESMTP id 
j46ICGBW010088;
        Fri, 6 May 2005 19:12:17 +0100 (BST)
Received: from localhost.localdomain (sweeney [127.0.0.1])
        by sweeney.nerc-essc.ac.uk (8.12.8/8.12.8) with ESMTP id j46ICGwX010635;
        Fri, 6 May 2005 19:12:16 +0100
Received: (from apache@localhost)
        by localhost.localdomain (8.12.8/8.12.8/Submit) id j46ICGuC010628;
        Fri, 6 May 2005 19:12:16 +0100
Received: from brahman.nerc-essc.ac.uk (brahman.nerc-essc.ac.uk 
[192.171.166.139]) 
        by www.nerc-essc.ac.uk (IMP) with HTTP 
        for <ads@xxxxxxxxxxxxxxxxxxxxxxx>; Fri,  6 May 2005 19:12:16 +0100
References: <1115303745.427a2f41a616a@xxxxxxxxxxxxxxxxxxx>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
User-Agent: Internet Messaging Program (IMP) 3.2.2
X-Originating-IP: 192.171.166.139
X-Scanner: exiscan *1DU7JB-0003k7-00*dPyNsTSw0ik* (The University of Reading)
Sender: owner-netcdf-java@xxxxxxxxxxxxxxxx
Precedence: bulk

Hello,

I have a few questions concerning reading GRIB files using the netcdf2.2
library:

1. are there any problems when using the grib.jar library with jakarta tomcat
server ? Netcdf files can be correctly read and data extracted. Grib files can
be opened only but it is failing each time i wish to extract data (all data as
well as section of it).

2. Are there any easier ways to reading data for a particular variable using its
internal name instead of the variable name. Currently, I have to get list of
all variables and then for each variable get its attributes and thereafter
check the attribute name for GRIB_param_number.

e.g:

for (int i=0; i<myVarList.size(); i++)
{
                Variable myVar = (Variable) myVarList.get(i);
                List attList = myVar.getAttributes();
                        
                for (int j=0; j<attList.size(); j++)
                {
                        Attribute att = (Attribute) attList.get(j);
                        if (att.getName().equals("GRIB_param_number")) 
                        {
                                //get the correct variable
                                if (att.getNumericValue().intValue() == var)
                                {
                                 .......
                                }
                        }
                }
}

Thanks in advance,

Adit.