Dear All,
I would like to write a netCDF4 file in Java based on
https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/tutorial/NetcdfWriting.html.
I have a lot of variables and I would like to select just some and
write only them to netcdf file. I tried to solve this by the the
following way:
publicclassJavaDB{
publicstaticVariabletime;
publicstaticVariablecloud_1st;
publicstaticVariablecloud_2nd;
publicstaticVariablecloud_3th;
publicstaticVariablecloud_4th;
publicstaticVariablecloud_5th;
publicstaticVariableLayer_1st;
publicstaticVariableLayer_2nd;
publicstaticVariableLayer_3th;
publicstaticVariableLayer_4th;
publicstaticVariableLayer_5th;
publicstaticVariableCBN;
publicstaticvoidgetDataNC(Stringlocation, ArrayList<Integer> Values)
throwsException{
Stringversion = System.getProperty("java.version");
NetcdfFileWriterncfile =
NetcdfFileWriter.createNew(NetcdfFileWriter.Version.netcdf4, location,
null);
// add dimensions
DimensionheightDim = ncfile.addDimension(null,"height",1539);
DimensiontimeDim = ncfile.addUnlimitedDimension("time");
//define variables
for(intk=0; k<Values.size(); k++){
switch(Values.get(k)){
case1: Variabletime = ncfile.addVariable(null, "time",
DataType.DOUBLE,"time");
time.addAttribute( newAttribute("units", "days since 1970-01-01"));
break;
case2: Variablecloud_1st = ncfile.addVariable(null,"cloud_1st",
DataType.INT,"time");
cloud_1st.addAttribute( newAttribute("long_name", "cloud amount in 1st
layer1"));
cloud_1st.addAttribute( newAttribute("units", "octa"));
cloud_1st.addAttribute(newAttribute("_FillValue",-9999));
cloud_1st.addAttribute(newAttribute("Vertical Visibility",9));
cloud_1st.addAttribute(newAttribute("No enough data",99));
break;
case3: Variablecloud_2nd = ncfile.addVariable(null,"cloud_2nd",
DataType.INT,"time");
cloud_2nd.addAttribute( newAttribute("long_name", "cloud amount in 2nd
layer"));
cloud_2nd.addAttribute( newAttribute("units", "octa"));
cloud_2nd.addAttribute(newAttribute("_FillValue",-9999));
cloud_2nd.addAttribute(newAttribute("Vertical Visibility",9));
cloud_2nd.addAttribute(newAttribute("No enough data",99));
break;
case4: Variablecloud_3th = ncfile.addVariable(null,"cloud_3th",
DataType.INT,"time");
cloud_3th.addAttribute( newAttribute("long_name", "cloud amount in 3th
layer"));
cloud_3th.addAttribute( newAttribute("units", "octa"));
cloud_3th.addAttribute(newAttribute("_FillValue",-9999));
cloud_3th.addAttribute(newAttribute("Vertical Visibility",9));
cloud_3th.addAttribute(newAttribute("No enough data",99));
break;
case5: Variablecloud_4th = ncfile.addVariable(null, "cloud_4th",
DataType.INT, "time");
cloud_4th.addAttribute( newAttribute("long_name", "cloud amount in 4th
layer"));
cloud_4th.addAttribute( newAttribute("units", "octa"));
cloud_4th.addAttribute(newAttribute("_FillValue",-9999));
cloud_4th.addAttribute(newAttribute("Vertical Visibility", 9));
cloud_4th.addAttribute(newAttribute("No enough data",99));
break;
case6: Variablecloud_5th = ncfile.addVariable(null, "cloud_5th",
DataType.INT, "time");
cloud_5th.addAttribute( newAttribute("long_name", "cloud amount in 5th
layer"));
cloud_5th.addAttribute( newAttribute("units", "octa"));
cloud_5th.addAttribute(newAttribute("_FillValue",-9999));
cloud_5th.addAttribute(newAttribute("Vertical Visibility",9));
cloud_5th.addAttribute(newAttribute("no enough data",99));
break;
case7: VariableLayer_1st=
ncfile.addVariable(null,"Layer_1st",DataType.INT,"time");
Layer_1st.addAttribute(newAttribute("long_name", "1st cloud layer
height"));
Layer_1st.addAttribute(newAttribute("units","meter"));
Layer_1st.addAttribute(newAttribute("_FillValue",-9999));
break;
case8: VariableLayer_2nd=
ncfile.addVariable(null,"Layer_2nd",DataType.INT,"time");
Layer_2nd.addAttribute(newAttribute("long_name", "2nd cloud layer
height"));
Layer_2nd.addAttribute(newAttribute("units","meter"));
Layer_2nd.addAttribute(newAttribute("_FillValue",-9999));
break;
case9: VariableLayer_3th=
ncfile.addVariable(null,"Layer_3th",DataType.INT,"time");
Layer_3th.addAttribute(newAttribute("long_name", "3th cloud layer
height"));
Layer_3th.addAttribute(newAttribute("units","meter"));
Layer_3th.addAttribute(newAttribute("_FillValue",-9999));
break;
case10: VariableLayer_4th=
ncfile.addVariable(null,"Layer_4th",DataType.INT,"time");
Layer_4th.addAttribute(newAttribute("long_name", "4th cloud layer
height"));
Layer_4th.addAttribute(newAttribute("units","meter"));
Layer_4th.addAttribute(newAttribute("_FillValue",-9999));
break;
case11: VariableLayer_5th=
ncfile.addVariable(null,"Layer_5th",DataType.INT,"time");
Layer_5th.addAttribute(newAttribute("long_name", "5th cloud layer
height"));
Layer_5th.addAttribute(newAttribute("units","meter"));
Layer_5th.addAttribute(newAttribute("_FillValue",-9999));
break;
case12: VariableCBN = ncfile.addVariable(null,"CBN",DataType.INT,"time");
CBN.addAttribute(newAttribute("long_name","cloud base number"));
CBN.addAttribute(newAttribute("units", "number"));
CBN.addAttribute(newAttribute("no significant backscatter",0));
CBN.addAttribute(newAttribute("obscuration but no cloud",4));
CBN.addAttribute(newAttribute("transparent obscuration",5));
CBN.addAttribute(newAttribute("_FillValue",-9));
break;
}
}
ncfile.create();
try{
ArrayDouble.D1 timeData = newArrayDouble.D1(countLinesResult);
ArrayInt.D1 cloudL1Data = newArrayInt.D1(countLinesResult);
Indexima = cloudL1Data.getIndex();
ArrayInt.D1 cloudL2Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cloudL3Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cloudL4Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cloudL5Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cLayer1Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cLayer2Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cLayer3Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cLayer4Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 cLayer5Data = newArrayInt.D1(countLinesResult);
ArrayInt.D1 CBNData= newArrayInt.D1(countLinesResult);
for(inttimeIdx = 0; timeIdx < countLinesResult;timeIdx++){
for(intk=0; k<Values.size(); k++){
// System.out.println(Values.get(k));
if(Values.get(k)==1){
timeData.setDouble(timeIdx,tdate.get(timeIdx));}
if(Values.get(k)==2){
cloudL1Data.setInt(ima.set(timeIdx), cloud_layer_1st.get(timeIdx));}
if(Values.get(k)==3){
cloudL2Data.setInt(ima.set(timeIdx), cloud_layer_2nd.get(timeIdx));}
if(Values.get(k)==4){
cloudL3Data.setInt(ima.set(timeIdx), cloud_layer_3th.get(timeIdx));}
if(Values.get(k)==5){
cloudL4Data.setInt(ima.set(timeIdx), cloud_layer_4th.get(timeIdx));}
if(Values.get(k)==6){
cloudL5Data.setInt(ima.set(timeIdx), cloud_layer_5th.get(timeIdx));}
if(Values.get(k)==7){
cLayer1Data.setInt(ima.set(timeIdx),
LayerC_1st.get(timeIdx));}
if(Values.get(k)==8){
cLayer2Data.setInt(ima.set(timeIdx), LayerC_2nd.get(timeIdx));}
if(Values.get(k)==9){
cLayer3Data.setInt(ima.set(timeIdx), LayerC_3th.get(timeIdx));}
if(Values.get(k)==10){
cLayer4Data.setInt(ima.set(timeIdx), LayerC_4th.get(timeIdx));}
if(Values.get(k)==11){
cLayer5Data.setInt(ima.set(timeIdx), LayerC_5th.get(timeIdx));}
if(Values.get(k)==12){
CBNData.setInt(ima.set(timeIdx),nbcb.get(timeIdx));}
}
}
// write the data into netCDF file
for(intk=0; k<Values.size(); k++){
if(Values.get(k)==1){
ncfile.write(time, timeData);}
if(Values.get(k)==2){
ncfile.write(cloud_1st, cloudL1Data);}
if(Values.get(k)==3){
ncfile.write(cloud_2nd, cloudL2Data);}
if(Values.get(k)==4){
ncfile.write(cloud_3th, cloudL3Data);}
if(Values.get(k)==5){
ncfile.write(cloud_4th, cloudL4Data);}
if(Values.get(k)==6){
ncfile.write(cloud_5th, cloudL5Data);}
if(Values.get(k)==7){
ncfile.write(Layer_1st, cLayer1Data);}
if(Values.get(k)==8){
ncfile.write(Layer_2nd, cLayer2Data);}
if(Values.get(k)==9){
ncfile.write(Layer_3th, cLayer3Data);}
if(Values.get(k)==10){
ncfile.write(Layer_4th, cLayer4Data);}
if(Values.get(k)==11){
ncfile.write(Layer_5th, cLayer5Data);}
if(Values.get(k)==12){
ncfile.write(CBN,CBNData);}
}
}catch(Exceptione){
e.printStackTrace();}
finally{
try{
ncfile.close();
}catch(IOExceptionex){
ex.printStackTrace();
}
}
But after I run the code I get java.lang.NullPointerException at
ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:939). I tried to
solve it with define global variables size e.g public static Variable
time = new Variable(); but it is not possible. Could you please
informe me how I should fix this issue?
Thank you for your help in adavnce!
Best regards,
Beata
_______________________________________________
NOTE: All exchanges posted to Unidata maintained email lists are
recorded in the Unidata inquiry tracking system and made publicly
available through the web. Users who post to any of the lists we
maintain are reminded to remove any personal information that they
do not want to be made public.
netcdf-java mailing list
netcdf-java@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit:
http://www.unidata.ucar.edu/mailing_lists/