/* * GridLimitMinimumOperator.java * * Created on February 3, 2006, 11:58 AM * */ package ika.geo.grid; import ika.geo.GeoGrid; /** * Replaces grid values that are smaller than a limit by another value. * @author Bernhard Jenny, Institute of Cartography, ETH Zurich. */ public class GridLimitMinimumOperator implements GridOperator{ private float limit = 0.f; private float replacementValue = 0.f; /** Creates a new instance of GridLimitMinimumOperator */ public GridLimitMinimumOperator() { } public String getName() { return "Limit Minimum"; } public void operate(GeoGrid geoGrid, GeoGrid newGrid) { if (geoGrid == null || newGrid == null) throw new IllegalArgumentException(); final int nrows = geoGrid.getRows(); final int ncols = geoGrid.getCols(); newGrid.setWest(geoGrid.getWest()); newGrid.setNorth(geoGrid.getNorth()); float[][] srcGrid = geoGrid.getGrid(); float[][] dstGrid = newGrid.getGrid(); for (int row = 0; row < nrows; ++row) { final float[] srcRow = srcGrid[row]; final float[] dstRow = dstGrid[row]; for (int col = 0; col < ncols; ++col) { final float v = srcRow[col]; dstRow[col] = srcRow[col] < limit ? replacementValue : v; } } } public GeoGrid operate(GeoGrid geoGrid) { final int nrows = geoGrid.getRows(); final int ncols = geoGrid.getCols(); final double meshSize = geoGrid.getCellSize(); GeoGrid newGrid = new GeoGrid(ncols, nrows, meshSize); this.operate(geoGrid, newGrid); return newGrid; } public GeoGrid operate(GeoGrid geoGrid, float limit, float replacementValue) { setLimit(limit); setReplacementValue(replacementValue); return this.operate(geoGrid); } public float getReplacementValue() { return replacementValue; } public void setReplacementValue(float replacementValue) { this.replacementValue = replacementValue; } public float getLimit() { return limit; } public void setLimit(float limit) { this.limit = limit; } }