<dependency>
<groupId>edu.ucar</groupId>
<artifactId>netcdfAll</artifactId>
<version>4.6.6</version>
</dependency>
1、读取
NetcdfFile ncfile = NetcdfFile.open("test.nc");
Variable variable = ncfile.findVariable("TEM");
2、获取scale_factor等
// double scale = ncfile.readAttributeDouble(variable,"scale_factor",1);
float scale = 1f;
for(Attribute attr : variable.getAttributes()) {
String shortName = attr.getShortName();
if (shortName.equals("scale_factor")) {
scale = (float) attr.getValue(0);
}
}
3、读取三维数组
time从0开始读只取1个,lat从1458开始读,取后面的537个,lon从3977开始读,取后面的1107个
int[] ori = new int[]{0,1458,3977};
int[] size = new int[]{1,537,1107};
ArrayShort.D3 data2D = (ArrayShort.D3)variable.read(ori,size);
ArrayFloat.D3 data3D = new ArrayFloat.D3(1,537,1107);
for (int i=0;i<537;i++){
for(int j=0;j<1107;j++){
short vv = data2D.get(0,i,j);
if(vv == -9999){
data3D.set(0,i,j,vv);
}else{
data3D.set(0,i,j,vv * scale);
}
}
}
4、输出二维数组
String s = NCdumpW.toString(data3D, "", null);
String x =s.replaceAll("=","").replaceAll(",","").replaceAll("\\{","").replaceAll("\\}","").replaceAll(" ","").trim();