public static Map<String, Metadata> readFile(String file) throws Exception { NetcdfFile n = NetcdfFile.open(file); System.out.println("Opened: " + file); /* Determine the size of our grid */ int xLen = n.findDimension("x").getLength(); int yLen = n.findDimension("y").getLength(); System.out.println("Grid size: " + xLen + "x" + yLen); /* What time is this set of readings for? */ Variable timeVar = n.findVariable("time"); String timeStr = timeVar.getUnitsString().toUpperCase(); timeStr = timeStr.replace("HOURS SINCE ", ""); timeStr = timeStr.replace("HOUR SINCE ", ""); /* Find the base date (the day) the reading was taken */ Date baseDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX").parse(timeStr); /* Get the number of hours since the base date this reading was taken */ int offset = timeVar.read().getInt(0); /* Generate the actual date for this reading */ Calendar calendar = Calendar.getInstance(); calendar.setTime(baseDate); calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + offset); System.out.println("Time of collection: " + calendar.getTime()); /* We'll keep a mapping of geolocations -> Galileo Metadata */ Map<String, Metadata> metaMap = new HashMap<>(); /* Determine the lat, lon coordinates for the grid points, and get each * reading at each grid point. */ NetcdfDataset dataset = new NetcdfDataset(n); @SuppressWarnings("resource") GridDataset gridData = new GridDataset(dataset); for (GridDatatype g : gridData.getGrids()) { /* Let's look at 3D variables: these have WxH dimensions, plus a * single plane. A 4D variable would contain elevation * and multiple planes as a result */ if (g.getShape().length == 3) { convert3DVariable(g, calendar.getTime(), metaMap); } } return metaMap; }