private static List<TemporalBin> doTemporalBinning(BinningContext binningContext, SortedMap<Long, List<SpatialBin>> spatialBinMap) throws IOException { StopWatch stopWatch = new StopWatch(); stopWatch.start(); final TemporalBinner temporalBinner = new TemporalBinner(binningContext); final ArrayList<TemporalBin> temporalBins = new ArrayList<TemporalBin>(); for (Map.Entry<Long, List<SpatialBin>> entry : spatialBinMap.entrySet()) { final TemporalBin temporalBin = temporalBinner.processSpatialBins(entry.getKey(), entry.getValue()); temporalBins.add(temporalBin); } stopWatch.stopAndTrace("Temporal binning took"); return temporalBins; }
private static SortedMap<Long, List<SpatialBin>> doSpatialBinning(BinningContext binningContext, File[] sourceFiles) throws IOException { final SpatialBinStore spatialBinStore = new SpatialBinStore(); final SpatialBinner spatialBinner = new SpatialBinner(binningContext, spatialBinStore); for (File sourceFile : sourceFiles) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); System.out.println("reading " + sourceFile); final Product product = ProductIO.readProduct(sourceFile); System.out.println("processing " + sourceFile); final long numObs = SpatialProductBinner.processProduct(product, spatialBinner, new HashMap<Product, List<Band>>(), ProgressMonitor.NULL); System.out.println("done, " + numObs + " observations processed"); stopWatch.stopAndTrace("Spatial binning of product took"); } return spatialBinStore.getSpatialBinMap(); }
public static void main(String[] args) throws Exception { String sourceDirFile = args[0]; String regionWktFile = args[1]; String binnerConfigFile = args[2]; String[] outputterConfigFiles = new String[args.length - 3]; System.arraycopy(args, 3, outputterConfigFiles, 0, outputterConfigFiles.length); File[] sourceFiles = new File(sourceDirFile).listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".N1"); } }); String regionWkt = FileUtils.readText(new File(regionWktFile)); BinningConfig binningConfig = BinningConfig.fromXml(FileUtils.readText(new File(binnerConfigFile))); Debug.setEnabled(true); StopWatch stopWatch = new StopWatch(); stopWatch.start(); BinningContext binningContext = binningConfig.createBinningContext(null, null, null); // 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> SortedMap<Long, List<SpatialBin>> spatialBinMap = doSpatialBinning(binningContext, sourceFiles); // Step 2: Temporal binning - creates a list of temporal bins, sorted by bin ID List<TemporalBin> temporalBins = doTemporalBinning(binningContext, spatialBinMap); // Step 3: Formatting for (String outputterConfigFile : outputterConfigFiles) { FormatterConfig formatterConfig = FormatterConfig.fromXml(FileUtils.readText(new File(outputterConfigFile))); doOutputting(regionWkt, formatterConfig, binningContext, temporalBins); } stopWatch.stopAndTrace(String.format("Total time for binning %d product(s)", sourceFiles.length)); }
stopWatch.stopAndTrace("createValidMask");
stopWatch.stopAndTrace(String.format("Total time for binning %d product(s)", numProductsAggregated));
private static void doOutputting(String regionWKT, FormatterConfig formatterConfig, BinningContext binningContext, List<TemporalBin> temporalBins) throws Exception { StopWatch stopWatch = new StopWatch(); stopWatch.start(); PlanetaryGrid planetaryGrid = binningContext.getPlanetaryGrid(); String[] resultFeatureNames = binningContext.getBinManager().getResultFeatureNames(); org.esa.beam.binning.operator.Formatter.format(planetaryGrid, new MyTemporalBinSource(temporalBins), resultFeatureNames, formatterConfig, new WKTReader().read(regionWKT), new ProductData.UTC(), new ProductData.UTC(), new MetadataElement("TODO_add_metadata_here") ); stopWatch.stopAndTrace("Writing output took"); }