package ucar.nc2; import ucar.ma2.DataType; import ucar.nc2.constants.CDM; import java.io.IOException; /** * Describe * * @author caron * @since Jun 11, 2009 */ public class TestWriteString { String variableName = "dataVar"; String units = "units"; String latVar = "lat"; String lonVar = "lon"; String timeVar = "time"; String unitsAttName = "units"; String axisAttName = "axis"; String standardNameAttName = "standard_name"; String longNameAttName = CDM.LONG_NAME; String missingValueAttName = CDM.MISSING_VALUE; String fillValueAttName = "_FillValue"; private void defineHeader(NetcdfFileWriteable writeableFile, Dimension timeDim, Dimension latDim, Dimension lonDim, Dimension[] dim3) { Dimension[] spatialDim = new Dimension[]{latDim, lonDim}; writeableFile.addVariable(latVar, DataType.FLOAT, new Dimension[]{latDim}); writeableFile.addVariableAttribute(latVar, unitsAttName, "degrees_north"); writeableFile.addVariableAttribute(latVar, axisAttName, "Y"); writeableFile.addVariableAttribute(latVar, standardNameAttName, "latitude"); // could add bounds, but not familiar how it works writeableFile.addVariable(lonVar, DataType.FLOAT, new Dimension[]{lonDim}); writeableFile.addVariableAttribute(lonVar, unitsAttName, "degrees_east"); writeableFile.addVariableAttribute(lonVar, axisAttName, "X"); writeableFile.addVariableAttribute(lonVar, standardNameAttName, "longitude"); // could add bounds, but not familiar how it works writeableFile.addVariable(variableName, DataType.FLOAT, dim3); writeableFile.addVariableAttribute(variableName, longNameAttName, variableName); writeableFile.addVariableAttribute(variableName, unitsAttName, units); writeableFile.addVariable("cellId", DataType.STRING, spatialDim); // now illegal writeableFile.addVariableAttribute("cellId", longNameAttName, "Cell ID"); writeableFile.addVariable(timeVar, DataType.INT, new Dimension[]{timeDim}); writeableFile.addVariableAttribute(timeVar, axisAttName, "T"); writeableFile.addVariableAttribute(timeVar, standardNameAttName, timeVar); writeableFile.addVariableAttribute(timeVar, longNameAttName, timeVar); writeableFile.setFill(true); // could add bounds, but not familiar how it works } private NetcdfFileWriteable createTimeLatLonDataCube(String filename, double[] latitudes, double[] longitudes) throws IOException { NetcdfFileWriteable writeableFile = NetcdfFileWriteable.createNew(filename); // define dimensions, including unlimited Dimension latDim = writeableFile.addDimension(latVar, latitudes.length); Dimension lonDim = writeableFile.addDimension(lonVar, longitudes.length); Dimension timeDim = writeableFile.addUnlimitedDimension(timeVar); // define Variables Dimension[] dim3 = new Dimension[]{timeDim, latDim, lonDim}; // order matters defineHeader(writeableFile, timeDim, latDim, lonDim, dim3); // create the file writeableFile.create(); writeableFile.close(); return writeableFile; } // this was succeeding, but it shoulnt - now fails in 4.0.26 public static void main(String[] args) throws IOException { TestWriteString test = new TestWriteString(); test.createTimeLatLonDataCube("D:/work/csiro/testWrite.nc", new double[] {1,2}, new double[] {10,20,30,40}); } }