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