Пример #1
0
 public BinningConfig createConfig() {
   final BinningConfig config = new BinningConfig();
   config.setNumRows(numRows);
   config.setSuperSampling(superSampling);
   config.setMaskExpr(maskExpr);
   config.setVariableConfigs(variableConfigs);
   config.setAggregatorConfigs(aggregatorConfigs);
   config.setPostProcessorConfig(postProcessorConfig);
   config.setMinDataHour(minDataHour);
   config.setMetadataAggregatorName(metadataAggregatorName);
   config.setStartDateTime(startDateTime);
   config.setPeriodDuration(periodDuration);
   config.setTimeFilterMethod(timeFilterMethod);
   config.setOutputFile(outputFile);
   config.setRegion(region);
   if (planetaryGridClass != null) {
     config.setPlanetaryGrid(planetaryGridClass);
   }
   if (compositingType != null) {
     config.setCompositingType(compositingType);
   }
   return config;
 }
Пример #2
0
  /**
   * Processes all source products and writes the output file. The target product represents the
   * written output file
   *
   * @throws org.esa.snap.framework.gpf.OperatorException If a processing error occurs.
   */
  @Override
  public void initialize() throws OperatorException {
    formatterConfig = new FormatterConfig();
    formatterConfig.setBandConfigurations(bandConfigurations);
    formatterConfig.setOutputFile(outputFile);
    formatterConfig.setOutputFormat(outputFormat);
    formatterConfig.setOutputType(outputType);
    formatterConfig.setProductCustomizerConfig(productCustomizerConfig);

    validateInput();

    ProductData.UTC startDateUtc = null;
    ProductData.UTC endDateUtc = null;
    if (startDateTime != null) {
      startDateUtc = parseStartDateUtc(startDateTime);
      double startMJD = startDateUtc.getMJD();
      double endMJD = startMJD + periodDuration;
      endDateUtc = new ProductData.UTC(endMJD);
    }

    StopWatch stopWatch = new StopWatch();
    stopWatch.start();

    if (region == null) {
      // TODO use JTS directly (nf 2013-11-06)
      regionArea = new Area();
    }

    final BinningConfig binningConfig = createConfig();

    binningContext = binningConfig.createBinningContext(region, startDateUtc, periodDuration);

    BinningProductFilter productFilter =
        createSourceProductFilter(binningContext.getDataPeriod(), startDateUtc, endDateUtc, region);

    metadataAggregator = MetadataAggregatorFactory.create(metadataAggregatorName);
    numProductsAggregated = 0;

    try {
      // Step 1: Spatial binning - creates time-series of spatial bins for each bin ID ordered by
      // ID. The tree map structure is <ID, time-series>
      SpatialBinCollection spatialBinMap = doSpatialBinning(productFilter);
      if (!spatialBinMap.isEmpty()) {
        // update region
        if (region == null && regionArea != null) {
          region = JTS.shapeToGeometry(regionArea, new GeometryFactory());
        }
        // Step 2: Temporal binning - creates a list of temporal bins, sorted by bin ID
        TemporalBinList temporalBins = doTemporalBinning(spatialBinMap);
        // Step 3: Formatting
        try {
          if (startDateTime != null) {
            writeOutput(temporalBins, startDateUtc, endDateUtc);
          } else {
            writeOutput(temporalBins, minDateUtc, maxDateUtc);
          }
        } finally {
          temporalBins.close();
        }
      } else {
        getLogger().warning("No bins have been generated, no output has been written");
      }
    } catch (OperatorException e) {
      throw e;
    } catch (Exception e) {
      throw new OperatorException(e);
    } finally {
      cleanSourceProducts();
    }

    stopWatch.stopAndTrace(
        String.format("Total time for binning %d product(s)", numProductsAggregated));

    globalMetadata.processMetadataTemplates(metadataTemplateDir, this, targetProduct, getLogger());
  }