DSS can store gridded data such as precipitation, and snow water equivalent. DSS grid records contain the coordinate system definition, units, datatype, cells size, position of row and column origin. Different classes are used to work with Grid data as shown in the table below.

Class

Use

GriddedData

DSS file wrapper (HecDataManager) customized for reading and wirting grids from DSS flies.

GridData

Container for the grid cell values.

GridInfo

Contains the detailed grid data, including properties such as compression method, and cell size.

The sample program below reads a SHG grid from a DSS file.

package hec.dss.testing;

 
import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.Test;

import hec.heclib.grid.GridData;
import hec.heclib.grid.GridInfo;
import hec.heclib.grid.GriddedData;
 
public class GridTestSWE {

	@Test
	void test() {
		
		try {
			 
			String filename = "swegrid.dss";
			String path = "/SHG/SAN_JOAQUIN/SWE/01APR2006:0600//SNODAS/";
			GriddedData gd = new GriddedData();
			GridData data1=new GridData();
			
			int[] status = new int[1];

		   	gd.setDSSFileName(filename);
			gd.setPathname(path);
			GridInfo info  = gd.retrieveGriddedData(); // read grid info without only
			if( info == null)
			{
			 assertNotNull(info,"\"Could not find path: \"+path+\" in file :\"+filename");
			}
			
			// print some specific info
			System.out.println("GridInfoSize = "+info.getGridInfoSize());
			System.out.println("Units = "+info.getDataUnits());
			System.out.println("NumberOfCellsX = "+info.getNumberOfCellsX());
			System.out.println("NumberOfCellsY = "+info.getNumberOfCellsY());
			
			
			System.out.println(info.toString()); // print all info 
			
			
			info = gd.retrieveGriddedData(true, data1, status); // read info and the data.
			
			int originX = info.getLowerLeftCellX(); 
			int cellsX = info.getNumberOfCellsX(); 
			int extentX = originX + cellsX;
			int originY = info.getLowerLeftCellY();
			int cellsY = info.getNumberOfCellsY();
			int extentY = originY + cellsY;
			
			// print out grid values.
			for(int x=originX; x<= extentX; x++)
				for (int y=originY; y<extentY; y++)
				{
					info.getLowerLeftCellX();
					double val = data1.getValueAt(x, y);
					if ( val == hec.lang.Const.UNDEFINED_DOUBLE )
						continue;
					if( val >1500)
					System.out.println("("+x+","+y+") = "+val);
				}
		
			
			GriddedData.closeAllFiles();   
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			fail(e.toString());
		}
	}
}

JAVA