private static class Index { final String entry; final int index; private Index(String entry, int index) { this.entry = entry; this.index = index; } } }
private void readRegion(final int offsetY, final int height, ProgressMonitor pm) throws IOException { for (RasterRegion rasterRegion : rasterRegions) { rasterRegion.readRegion(getOffsetX(), offsetY, getRegionWidth(), height, pm); } }
final int offsetY = getOffsetY(); final int width = getRegionWidth(); final int height = getRegionHeight(); final RasterDataEvalEnv env = rasterDataEvalEnv; message = (message == null) ? "Computing pixels..." : message; break; readRegion(y, 1, SubProgressMonitor.create(pm, 1)); for (int x = 0; x < width; x++) { env.setElemIndex(x);
/** * Creates an instance of this class for the given region and terms. * * @param rasterDataEvalEnv the raster data evaluation environment passed to the term evaluation * @param terms an array of terms. * @param pm a monitor to inform the user about progress */ public RasterDataLoop(final RasterDataEvalEnv rasterDataEvalEnv, final Term[] terms, final ProgressMonitor pm) { Guardian.assertNotNull("rasterDataEvalEnv", rasterDataEvalEnv); Guardian.assertNotNull("pm", pm); checkTerms(terms); checkRegion(rasterDataEvalEnv.getOffsetX(), rasterDataEvalEnv.getOffsetY(), rasterDataEvalEnv.getRegionWidth(), rasterDataEvalEnv.getRegionHeight(), terms); this.rasterDataEvalEnv = rasterDataEvalEnv; this.terms = terms; this.rasterRegions = createRasterRegions(terms, rasterDataEvalEnv.getRegionWidth(), 1); this.pm = pm; }
/** * Evaluates the <code>body</code> by calling its {@link Body#eval(RasterDataEvalEnv,int) eval()} method. * This method just delegates to {@link #forEachPixel(Body, String) forEachPixel(body, null)}. * * @param body the object whose <code>eval</code> method is called. * @throws IOException if the raster data could not be read. */ public void forEachPixel(final Body body) throws IOException { forEachPixel(body, "Performing raster data operation..."); /*I18N*/ }
final Term bitmaskTerm, final boolean[] bitmask, ProgressMonitor pm) throws IOException { final RasterDataLoop loop = new RasterDataLoop(offsetX, offsetY, width, height, new Term[]{bitmaskTerm}, pm); loop.forEachPixel(new RasterDataLoop.Body() { @Override public void eval(final RasterDataEvalEnv env, final int pixelIndex) {
stopWatch.start(); final RasterDataLoop loop = new RasterDataLoop(0, 0, productWidth, productHeight, new Term[]{term}, pm); loop.forEachPixel(new RasterDataLoop.Body() { @Override public void eval(final RasterDataEvalEnv env, final int pixelIndex) {
final int[] numInvalidPixels = new int[]{0}; final RasterDataLoop loop = new RasterDataLoop(offsetX, offsetY, width, height, validMaskTerm != null ? new Term[]{ } : new Term[]{term}, pm); loop.forEachPixel(new RasterDataLoop.Body() { @Override public void eval(RasterDataEvalEnv env, int pixelIndex) {