RangeΒΆ
GeoTools includes a Range
class to represent a numeric, or value, range. This is handy when expressing scales a data set is useful for.
// simple range of one value
Range<Double> zero = new Range<>(Double.class, 0.0);
System.out.println(zero); // [0.0, 0.0]
// range include two values
Range<Double> from1to5 = new Range<>(Double.class, 1.0, 5.0);
System.out.println(from1to5); // [1.0, 5.0]
// range from one value up to a limit
Range<Double> from1upto10 = new Range<>(Double.class, 1.0, true, 10.0, false);
System.out.println(from1upto10); // [1.0, 10.0)
// range between two values
Range<Double> between6and8 = new Range<>(Double.class, 6.0, false, 8.0, false);
System.out.println(between6and8); // (6.0, 8.0)
// range details
from1to5.getMinValue();
from1to5.isMinIncluded();
from1to5.getMaxValue();
from1to5.isMaxIncluded();
// range operations
from1upto10.subtract(between6and8); // returns two ranges
from1upto10.subtract(from1to5); // returns one range
from1to5.union(between6and8); // returns [1.0,8.0)
// range check
from1to5.contains(3.0); // true
from1upto10.contains(between6and8); // true
This actually works with any Comparable such as Strings or enumerations.
Range<Date> today = new Range<>(Date.class, new Date());
We have a special NumericRange
that uses the fact that numbers can work together to allow comparisons between NumericRange<Double>
and NumericRange<Integer>
.
NumberRange<Double> positive = NumberRange.create(0.0, Double.MAX_VALUE);
NumberRange<Double> negative = NumberRange.create(0.0, false, Double.MIN_VALUE, true);
NumberRange<Integer> decimal = NumberRange.create(1, 10);
positive.contains(decimal);
positive.contains((Number) 3.0); // test double
positive.contains((Number) 3); // test integer