Re: netCDF files



Scheller, Robert M. wrote:

Dear John Caron:

I am a grad student at UW-Madison and I have been attempting
to work with a suite of VEMAP climate data files in the
netCDF format.  Although the User's Manual for NetCDF Java
has been helpful, I am utterly stuck.  It appears fairly
simple to create the NetcdFile class.  However, I want only
a very small subsection of the data.  It appears that ma2.Index
would provide this function but I haven't been able to
make the logical leap from creating the NetcdFile class to
creating a MultiArray that I can index on.  Specifically, it
isn't clear to me how to use the MultiArray read() functions
on a netcdfile.

Hi Rob: you dont directly manipulate Index, the read() is done on the Variable to get an in-memory Array, see example below.

Also, what is the constructor for the Range
class?  Thanks very much for any information, advise or
references you could provide.

see http://www.unidata.ucar.edu/packages/netcdf-java/ and print out the "user documentation".
there's also online javadoc there, you can look up the Range class


Sincerely,

Rob Scheller

Robert M. Scheller
Dept. Forest Ecology & Management
University of Wisconsin - Madison
1630 Linden Dr., Madison, WI 53706
w: 608.265.6321

Visit my webpage! http://landscape.forest.wisc.edu/staff/rob/
Forest Landscape Ecology Lab  http://landscape.forest.wisc.edu


Here's an example that 1) reads a 2x2 subset of an array and then 2) reads the entire array and subsets it.


package test.nc2;

import ucar.ma2.*;
import ucar.nc2.*;

import java.io.*;

public class ExampleRead  {

  public static void main(String [] args) {
    new ExampleRead();
  }

  public ExampleRead() {

    try {
NetcdfFile ncfile = new NetcdfFile("E:/metapps/src/test/nc2/mydata.nc");
      System.out.println( "ncfile "+ ncfile);

      Variable temp = ncfile.findVariable("temperature");
      System.out.println( "temperature "+ temp);

      // read subset
      int[] origin = {1,3};// start at index [1,3]
      int[] shape = {2,2}; // 2x2 array

      Array As = temp.read( origin, shape);
      System.out.println( "physical subset");
      printArray( As);

      // read all the data and logically subset it
      Array A = temp.read();
      Range[] r = new Range[2];
      r[0] = new Range(1,2);
      r[1] = new Range(3,4);

      Array Ap = A.section( r); // logical subset
      System.out.println( "logical subset");
      printArray( Ap);


    } catch (InvalidRangeException e) {
      System.err.println("ERROR reading file "+e);
      return;
    } catch (IOException e) {
      System.err.println("ERROR reading file "+e);
      return;
    }

  }

  private void printArray( Array a) {
    IndexIterator iter = a.getIndexIterator();
    while (iter.hasNext())
      System.out.println( iter.getDoubleNext()+ ",");
  }
}


  • 2001 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: