如何从NetCDF文件中获取恒定时间和深度的单层纬度和经度?

时间:2019-01-08 06:36:21

标签: java gis netcdf

我试图读取具有4个参数(时间,深度,纬度,经度)的NetCDF文件,我想以恒定的时间和深度读取文件。

现在,我正在读取整个文件,然后在 4D网格中获取值,然后解析该网格以将恒定深度和时间的值转换为 2D阵列

Parameter Name

如果行//I have read the values of time and depth in TimeArr and depthArr respectively int depthIndex = binarySearchInArray(depthArr, d); int timeIndex = binarySearchInArray(timeArr, d); ArrayFloat.D4 tempArr = (ArrayFloat.D4) v.read(); float[][] grid = new float[(int) latArr.getSize()][(int) lonArr.getSize()]; for (int i = 0; i < latArr.getSize(); i++) { for (int j = 0; j < lonArr.getSize(); j++) { grid[i][j] = tempArr.get(timeIndex, depthIndex, i, j); } } return grid; 过大,则会花费很多时间。 另外,当我只需要一个尺寸时,读取所有尺寸是没有意义的。

是否可以直接沿2个维度(具有2个维度,时间和深度,保持不变)直接读取文件?

非常感谢您。

1 个答案:

答案 0 :(得分:1)

一种可以读取所需数据的方法是在read(int[] origin, int[] shape)上使用Variable方法:

// define the indexes where you would like the array
// subset to start
int[] origin = new int[] {timeIndex, depthIndex, 0, 0};

// define the overall size of the read to be done, starting
// at origin
int[] size = new int[] {1, 1, latSize, lonSize};

// read the subset
Array data4D = v.read(origin, size);

// remove any dimensions of size 1
Array data2D = data4D.reduce();

其中latSizelonSize分别是这些尺寸的大小。

有关更多信息以及其他一些方法,请参见netCDF-Java tutorial(特别是从变量中读取数据部分)。

干杯!