Gridded Data
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