public ValueTransformerFactory (String name, ConfigurableFactory<?> parent, List<String> path) { super(name, getFactoryClass(), parent, path); addProperty(TRANSFORM_NAME); addProperty(TRANSFORM_MAXIMUM); addProperty(TRANSFORM_MINIMUM); addProperty(LAYER_MAXIMUM); addProperty(LAYER_MINIMUM); addProperty(LOG_MINIMUM); addProperty(TRANSFORM_SCALE); }
@Override protected ValueTransformer<?> create () throws ConfigurationException { String name = getPropertyValue(TRANSFORM_NAME); double layerMin = getPropertyValue(LAYER_MINIMUM); double layerMax = getPropertyValue(LAYER_MAXIMUM); layerMin = getPropertyValue(LOG_MINIMUM); return new Log10ValueTransformer(layerMin, layerMax); } else if ("minmax".equals(name)) { double max; if (hasPropertyValue(TRANSFORM_MAXIMUM)) max = getPropertyValue(TRANSFORM_MAXIMUM); else max = layerMax; if (hasPropertyValue(TRANSFORM_MINIMUM)) min = getPropertyValue(TRANSFORM_MINIMUM); else min = layerMin; return new LinearValueTransformer(min, max); } else if ("half-sigmoid".equals(name)) { return new HalfSigmoidValueTransformer(layerMin, layerMax); } else if ("sigmoid".equals(name)) { if (hasPropertyValue(TRANSFORM_SCALE)) { return new SigmoidValueTransformer(layerMin, layerMax, getPropertyValue(TRANSFORM_SCALE)); } else { return new SigmoidValueTransformer(layerMin, layerMax); return new LinearValueTransformer(layerMin, layerMax);
@Test public void testSimple () { Log10ValueTransformer t = new Log10ValueTransformer(1,100); Assert.assertEquals(0, t.transform(1.0), EPS); Assert.assertEquals(0.5, t.transform(10.0), EPS); Assert.assertEquals(1, t.transform(100.0), EPS); }
@Test public void testOutOfBounds () { LinearValueTransformer t = new LinearValueTransformer(100,200); Assert.assertEquals(0, t.transform(90.0), EPS); Assert.assertEquals(1, t.transform(5000.0), EPS); }
ValueTransformer<Double> t = new LinearValueTransformer(min, max); int colorInt = colorRamp.getRGB(t.transform(v)); g.setColor(new Color(colorInt, true)); g.drawLine(i, 0, i, height); for(int i = 0; i <= height; i++){ double v = ((double)(i+1)/(double)height) * levelMax; int colorInt = colorRamp.getRGB(t.transform(v)); g.setColor(new Color(colorInt, true)); int y = height-i;
/** * Set the tile index, and level minimum and maximum for the impending read * @param tileIndex The index of the tile to be rendererd. * @param levelMinimum The level minimum. * @param levelMaximum The level maximum. */ public void setLevelProperties (TileIndex tileIndex, String levelMinimum, String levelMaximum) { _tileCoordinate = tileIndex; _levelMaximum = levelMaximum; _levelMinimum = levelMinimum; try { TileTransformer<?> tileTransformer = produce(TileTransformer.class); if (null != tileTransformer) { Pair<Double, Double> extrema = tileTransformer.getTransformedExtrema(this); _transformFactory.setExtrema(extrema.getFirst(), extrema.getSecond()); Pair<Double, Double> rawExtrema = tileTransformer.getRawExtrema(this); _alphaTransformFactory.setExtrema(rawExtrema.getFirst(), rawExtrema.getSecond()/2); } } catch (ConfigurationException e1) { String layer; try { layer = getPropertyValue(LAYER_ID); } catch (ConfigurationException e2) { layer = "unknown layer"; } LOGGER.warn("Error determining layer-specific extrema for "+layer); } }
addProperty(LEVEL_MAXIMUMS); _transformFactory = new ValueTransformerFactory( "valueTransformer", this, VALUE_TRANSFORM_PATH ); addChildFactory(_transformFactory); _alphaTransformFactory = new ValueTransformerFactory( "alphaValueTransformer", this, ALPHA_VALUE_TRANSFORM_PATH ); addChildFactory( _alphaTransformFactory );
@Test public void testGeneral () { LinearValueTransformer t = new LinearValueTransformer(100,200); Assert.assertEquals(0, t.transform(100.0), EPS); Assert.assertEquals(0.5, t.transform(150.0), EPS); Assert.assertEquals(1, t.transform(200.0), EPS); }
@Test public void testOutOfBounds () { Log10ValueTransformer t = new Log10ValueTransformer(100,200); Assert.assertEquals(0, t.transform(90.0), EPS); Assert.assertEquals(1, t.transform(5000.0), EPS); }
@Test public void testNegativeSpan () { LinearValueTransformer t = new LinearValueTransformer(-10,20); Assert.assertEquals(0, t.transform(-10.0), EPS); Assert.assertEquals(0.5, t.transform(5.0), EPS); Assert.assertEquals(1, t.transform(20.0), EPS); } }
@Test public void testGeneral () { Log10ValueTransformer t = new Log10ValueTransformer(123,456); Assert.assertEquals(0, t.transform(123.0), EPS); Assert.assertEquals(1, t.transform(456.0), EPS); }