예제 #1
0
  /**
   * Determines the storage directory for a file, using its spatial properties run through the
   * Geohash algorithm.
   *
   * <p>The resulting format is xx/xxx, which is specific to the NOAA NAM dataset, because this will
   * place each unique grid point in its own directory.
   */
  private static String getStorageDir(String outputDir, Metadata meta) {
    Coordinates coords = meta.getSpatialProperties().getCoordinates();
    String location = GeoHash.encode(coords.getLatitude(), coords.getLongitude(), 10);

    String subDir = location.substring(0, 2) + "/" + location.substring(2, 5);
    return outputDir + "/" + subDir;
  }
예제 #2
0
  /** 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);
      }
    }
  }