@Override protected Expression rescale(Expression expr) { // handle null values if (expr == null) { return null; } if (expr == Expression.NIL) { return Expression.NIL; } // delegate the handling of the rescaling to ValueAndUnit // to deal with local uom (px, m, ft suffixes) Measure v = new Measure(expr, defaultUnit); return RescalingMode.Pixels.rescaleToExpression(scale, v); }
/** * Used to rescaleDashArray the provided unscaled value. * * @param unscaled the unscaled value. * @param mapScale the mapScale in pixels per meter. * @param uom the unit of measure that will be used to scale. * @return the expression multiplied by the provided scale. */ protected String rescale(String unscaled, Unit<Length> uom) { if (unscaled == null) { return unscaled; } Measure v = new Measure(unscaled, uom); return RescalingMode.RealWorld.rescaleToString(mapScale, v); }
@Override protected void rescaleOption(Map<String, String> options, String key, double defaultValue) { double scaleFactor = (double) scale.evaluate(null, Double.class); String value = options.get(key); if (value == null) { value = String.valueOf(defaultValue); } Measure v = new Measure(value, defaultUnit); String rescaled = RescalingMode.Pixels.rescaleToString(scaleFactor, v); options.put(key, String.valueOf(rescaled)); }
@Override protected void rescaleOption(Map<String, String> options, String key, int defaultValue) { double scaleFactor = (double) scale.evaluate(null, Double.class); String value = options.get(key); if (value == null) { value = String.valueOf(defaultValue); } Measure v = new Measure(value, defaultUnit); String rescaled = RescalingMode.Pixels.rescaleToString(scaleFactor, v); options.put(key, String.valueOf(rescaled)); } }
/** * Used to rescale the provided expr. * * <p>We do optimize the case where the provided expression is a literal; no sense doing a * calculation each time if we don't have to. * * @param expr * @return expr multiplied by the provided scale */ protected Expression rescale(Expression expr) { if (expr == null) { return null; } if (expr == Expression.NIL) { return Expression.NIL; } Measure m = new Measure(expr, defaultUnit); return RescalingMode.KeepUnits.rescaleToExpression(scale, m); }
/** * Used to rescaleDashArray the provided unscaled value. * * @param unscaled the unscaled value. * @param mapScale the mapScale in pixels per meter. * @param uom the unit of measure that will be used to scale. * @return the expression multiplied by the provided scale. */ protected Expression rescale(Expression unscaled, Unit<Length> uom) { if (unscaled == null || unscaled.equals(Expression.NIL)) { return unscaled; } Measure m = new Measure(unscaled, uom); return RescalingMode.RealWorld.rescaleToExpression(ff.literal(mapScale), m); }
public Object evaluate(Object feature) { String value = getExpression(0).evaluate(feature, String.class); if (value == null || value.trim().isEmpty()) { return null; } Unit<Length> defaultUnit = getExpression(1).evaluate(feature, Unit.class); Double scaleFactor = getExpression(2).evaluate(feature, Double.class); if (scaleFactor == null) { throw new IllegalArgumentException("Invalid scale factor, it should be non null"); } RescalingMode mode = RescalingMode.KeepUnits; if (getParameters().size() >= 3) { RescalingMode theMode = getExpression(3).evaluate(feature, RescalingMode.class); if (theMode != null) { mode = theMode; } } // compute the rescaling now that we have all the details Measure measure = new Measure(value, defaultUnit); String result = mode.rescaleToString(scaleFactor, measure); return result; } }