Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static boolean writeNetCDFHFiveThree(String fileName, float[] allLat, float[] allLon, float[] allDepth,
- int[] timeArray, int[] allTimes, float[][] valArrays, String[][] valDescr, float[] latArray,
- float[] lonArray, float[] depthArray) throws IOException, InvalidRangeException {
- NetcdfFileWriteable writeableFile = NetcdfFileWriteable.createNew(fileName, false);
- // define dimensions, including unlimited
- Map<Station, Station> stationMap = findStations(latArray, lonArray, timeArray);
- int numberOfStations = stationMap.size();
- int numberOfProfiles = 0;
- Collection<Station> stationCollection = stationMap.values();
- for (Station s : stationCollection) {
- numberOfProfiles += s.timeIndexMap.size();
- }
- Dimension stationsDim = writeableFile.addDimension("stations", numberOfStations);
- Dimension profilesDim = writeableFile.addDimension("profiles", numberOfProfiles);
- int name_strlen = 23;
- Dimension name_strlenDim = writeableFile.addDimension("name_strlen", name_strlen);
- Dimension obsDim = writeableFile.addUnlimitedDimension("obs");
- // define Variables
- // TODO: perhaps something is D3 or D2
- writeableFile.addVariable("lat", DataType.FLOAT, new Dimension[] { stationsDim });
- writeableFile.addVariableAttribute("lat", "units", "degrees_north");
- writeableFile.addVariableAttribute("lat", "standard_name", "latitude");
- writeableFile.addVariable("lon", DataType.FLOAT, new Dimension[] { stationsDim });
- writeableFile.addVariableAttribute("lon", "units", "degrees_east");
- writeableFile.addVariableAttribute("lon", "standard_name", "longitude");
- writeableFile.addVariable("station_name", DataType.CHAR, new Dimension[] { stationsDim, name_strlenDim });
- writeableFile.addVariableAttribute("station_name", "long_name", "station name");
- writeableFile.addVariableAttribute("station_name", "cf_role", "timeseries_id");
- writeableFile.addVariable("station_info", DataType.CHAR, new Dimension[] { stationsDim, name_strlenDim });
- writeableFile.addVariableAttribute("station_info", "long_name", "some kind of station info");
- writeableFile.addVariable("profile", DataType.INT, new Dimension[] { profilesDim });
- writeableFile.addVariableAttribute("profile", "cf_role", "profile_id");
- writeableFile.addVariable("time", DataType.INT, new Dimension[] { profilesDim });
- writeableFile.addVariableAttribute("time", "standard_name", "time");
- writeableFile.addVariableAttribute("time", "units", "minutes since 1900-01-01");
- writeableFile.addVariableAttribute("time", "calendar", "Standard");
- writeableFile.addVariable("station_index", DataType.INT, new Dimension[] { profilesDim });
- writeableFile.addVariableAttribute("station_index", "long_name", "which station this profile is for");
- writeableFile.addVariableAttribute("station_index", "instance_dimension", "station");
- writeableFile.addVariable("row_size", DataType.INT, new Dimension[] { profilesDim });
- writeableFile.addVariableAttribute("row_size", "long_name", "number of obs for this profile ");
- writeableFile.addVariableAttribute("row_size", "sample_dimension", "obs");
- writeableFile.addVariable("z", DataType.FLOAT, new Dimension[] { obsDim });
- writeableFile.addVariableAttribute("z", "long_name", "Depth");
- writeableFile.addVariableAttribute("z", "standard_name", "Depth");
- writeableFile.addVariableAttribute("z", "units", "meters");
- writeableFile.addVariableAttribute("z", "positive", "down");
- writeableFile.addVariableAttribute("z", "axis", "z");
- int numberOfObs = timeArray.length;
- float[][] values = new float[valDescr.length][];
- int valuesIndex = 0;
- for (String[] valD : valDescr) {
- writeableFile.addVariable(valD[0], DataType.FLOAT, new Dimension[] { obsDim });
- writeableFile.addVariableAttribute(valD[0], "long_name", valD[1]);
- writeableFile.addVariableAttribute(valD[0], "standard_name", valD[1]);
- writeableFile.addVariableAttribute(valD[0], "units", valD[2]);
- writeableFile.addVariableAttribute(valD[0], "coordinates", "time lon lat z");
- values[valuesIndex++] = new float[numberOfObs];
- }
- writeableFile.addGlobalAttribute("featureType", "timeSeriesProfile");
- // create the file
- writeableFile.create();
- float[] lat = new float[numberOfStations];
- float[] lon = new float[numberOfStations];
- ArrayChar.D2 stationName = new ArrayChar.D2(numberOfStations, name_strlen);
- int[] profile = new int[numberOfProfiles];
- int[] time = new int[numberOfProfiles];
- int[] station = new int[numberOfProfiles];
- int[] rowSize = new int[numberOfProfiles];
- float[] z = new float[numberOfObs];
- int stationIndex = 0, profileIndex = 0, obsIndex = 0;
- for (Station s : stationCollection) {
- stationName.set(stationIndex, 0, (char) ('a' + stationIndex));
- lat[stationIndex] = s.lat;
- lon[stationIndex] = s.lon;
- for (Integer currentTime : s.timeIndexMap.keySet()) {
- profile[profileIndex] = profileIndex;
- time[profileIndex] = currentTime;
- station[profileIndex] = stationIndex;
- int nObs = s.timeIndexMap.get(currentTime).size();
- rowSize[profileIndex++] = nObs;
- for (int i = 0; i < nObs; i++) {
- Integer currentObsIndex = s.timeIndexMap.get(currentTime).get(i);
- z[obsIndex] = depthArray[currentObsIndex];
- for (int j = 0; j < values.length; j++)
- values[j][obsIndex] = valArrays[j][currentObsIndex];
- obsIndex++;
- }
- }
- stationIndex++;
- }
- writeableFile.write("lat", Array.factory(lat));
- writeableFile.write("lon", Array.factory(lon));
- writeableFile.write("station_name", stationName);
- writeableFile.write("station_info", stationName);
- writeableFile.write("profile", Array.factory(profile));
- writeableFile.write("time", Array.factory(time));
- writeableFile.write("station_index", Array.factory(station));
- writeableFile.write("row_size", Array.factory(rowSize));
- writeableFile.write("z", Array.factory(z));
- for (int j = 0; j < values.length; j++)
- writeableFile.write(valDescr[j][0], Array.factory(values[j]));
- writeableFile.close();
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement