/** Creates a block/metadata pair subset for indexing. */ public static Block createBlock(String name, Metadata meta) throws IOException { Metadata m = new Metadata(name); addIndexField("visibility", meta, m); addIndexField("pressure", meta, m); addIndexField("total_precipitation", meta, m); addIndexField("precipitable_water", meta, m); addIndexField("temperature_surface", meta, m); addIndexField("total_cloud_cover", meta, m); addIndexField("snow_depth", meta, m); m.setTemporalProperties(meta.getTemporalProperties()); m.setSpatialProperties(meta.getSpatialProperties()); Block block = new Block("samples", m, Serializer.serialize(meta)); return block; }
/** Converts a 3D variable to a {@link Metadata} representation */ private static void convert3DVariable(GridDatatype g, Date date, Map<String, Metadata> metaMap) throws IOException { Variable v = g.getVariable(); System.out.println("Reading: " + v.getFullName()); Array values = v.read(); int h = v.getShape(1); int w = v.getShape(2); for (int i = 0; i < h; ++i) { for (int j = 0; j < w; ++j) { LatLonPoint pt = g.getCoordinateSystem().getLatLon(j, i); String hash = GeoHash.encode((float) pt.getLatitude(), (float) pt.getLongitude(), 10).toLowerCase(); Metadata meta = metaMap.get(hash); if (meta == null) { /* We need to create Metadata for this location */ meta = new Metadata(); UUID metaUUID = UUID.nameUUIDFromBytes(hash.getBytes()); meta.setName(metaUUID.toString()); SpatialProperties location = new SpatialProperties((float) pt.getLatitude(), (float) pt.getLongitude()); meta.setSpatialProperties(location); TemporalProperties time = new TemporalProperties(date.getTime()); meta.setTemporalProperties(time); metaMap.put(hash, meta); } String featureName = v.getFullName().toLowerCase(); float featureValue = values.getFloat(i * w + j); Feature feature = new Feature(featureName, featureValue); meta.putAttribute(feature); } } }