if (r1.equals(r2)) { return difference; // empty list difference.add( new Range<T>(r2) ); return difference; if (common.equals(r2)) { return difference; // empty list difference.add(new Range<T>(common.getMax(), !common.isMaxIncluded(), r2.getMax(), r2.isMaxIncluded())); } else { // minComp == GT if (maxComp == RangeExtendedComparator.EQ) { difference.add(new Range<T>(r2.getMin(), r2.isMinIncluded(), common.getMin(), !common.isMinIncluded())); } else { difference.add(new Range<T>(r2.getMin(), r2.isMinIncluded(), common.getMin(), !common.isMinIncluded())); difference.add(new Range<T>(common.getMax(), !common.isMaxIncluded(), r2.getMax(), r2.isMaxIncluded()));
if (r1.isPoint()) { if (r2.isPoint()) { if (r1.equals(r2)) { return new Range<T>(r1); } else { return null; if ((r1.isMinInf() && r2.isMaxOpen()) || (r1.isMinNegInf() && r2.isMinOpen()) || r2.contains(r1.getMin())) { return new Range<T>(r1); } else { return null; } else if (r2.isPoint()) { // r1 is an interval if ((r2.isMinInf() && r1.isMaxOpen()) || (r2.isMinNegInf() && r1.isMinOpen()) || r1.contains(r2.getMin())) { return new Range<T>(r2); } else { return null; switch (result.getAt(RangeExtendedComparator.MIN_MIN)) { case RangeExtendedComparator.LT: min = r2.getMin(); minIncluded = r2.isMinIncluded(); break; min = r1.getMin();
for (int i = 0; i < rc.getSize(); i++) { ranges.add( Range.create( (Double) rc.getMin(i), true,
public static RangeLookupTable getRangeLookupTable( List<Range> classificationRanges, final int[] outputPixelValues, final Number noDataValue, final Class<? extends Number> clazz) { final RangeLookupTable.Builder rltBuilder = new RangeLookupTable.Builder(); final int size = classificationRanges.size(); final boolean useCustomOutputPixelValues = outputPixelValues != null && outputPixelValues.length == size; Class<? extends Number> widestClass = noDataValue.getClass(); for (int i = 0; i < size; i++) { final Range range = classificationRanges.get(i); final Class<? extends Number> rangeClass = range.getMin().getClass(); if (widestClass != rangeClass) { widestClass = ClassChanger.getWidestClass(widestClass, rangeClass); } final int reference = useCustomOutputPixelValues ? outputPixelValues[i] : i + 1; rltBuilder.add(range, convert(reference, noDataValue.getClass())); } // Add the largest range that contains the no data value rltBuilder.add( new Range(getClassMinimum(widestClass), true, getClassMaximum(widestClass), true), noDataValue); return rltBuilder.build(); }
for (int i = 0; i < size; i++) { final Range range = classificationRanges.get(i); final Class<? extends Number> rangeClass = range.getMin().getClass(); RangeFactory.convert( RangeFactory.create( range.getMin().doubleValue(), range.isMinIncluded(), range.getMax().doubleValue(), range.isMaxIncluded()), rangeType); rltBuilder.add(rangeJaiext, convert(reference, noDataClass));
StringBuilder sb = new StringBuilder(); if (isMinClosed()) { sb.append(isMinIncluded() ? '[' : '('); sb.append(getMin()); } else { if (isPoint()) { sb.append(isMinInf() ? "(Inf" : "(-Inf"); } else { sb.append("(-Inf"); if (isPoint()) { sb.append(isMinIncluded() ? ']' : ')'); } else { sb.append(", "); if (isMaxClosed()) { sb.append(getMax()); sb.append(isMaxIncluded() ? ']' : ')'); } else { sb.append("Inf)");
/** * Creates a Range instance that is a point (degenerate) interval. If value * is null, for a point at infinity, the inf argument must be * provided and be one of Range.INF or Range.NEG_INF. * * @param <T> value type * @param value the value to set for both min and max end-points * @param inf either Range.INF or Range.NEG_INF (ignored if value is non-null) * @return the new instance */ public static <T extends Number & Comparable> Range<T> create(T value, int... inf) { return new Range<T>(value, inf); }
inputs.remove(j); inputs.remove(i); inputs.add(0, new Range<T>(r2.getMin(), r2.isMinIncluded(), r1.getMax(), r1.isMaxIncluded())); break; inputs.remove(j); inputs.remove(i); inputs.add(0, new Range<T>(r1.getMin(), r1.isMinIncluded(), r2.getMax(), r2.isMaxIncluded())); break; for (int i = 0; i < inputs.size() - 1 && !changed; i++) { Range<T> r1 = inputs.get(i); if (r1.isMaxClosed()) { for (int j = i + 1; j < inputs.size() && !changed; j++) { Range<T> r2 = inputs.get(j); if (r2.isMinClosed()) { if (r1.getMax().compareTo(r2.getMin()) == 0) { inputs.remove(j); inputs.remove(i); inputs.add(i, new Range<T>(r1.getMin(), r1.isMinIncluded(), r2.getMax(), r2.isMaxIncluded())); changed = true;
if (r1.isPoint() && r2.isPoint()) { if (r1.isMinNegInf()) { if (r2.isMinNegInf()) { compFlags[0] = compFlags[1] = compFlags[2] = compFlags[3] = EQ; } else { compFlags[0] = compFlags[1] = compFlags[2] = compFlags[3] = LT; } else if (r1.isMinInf()) { if (r2.isMinInf()) { compFlags[0] = compFlags[1] = compFlags[2] = compFlags[3] = EQ; } else { if (r2.isMinNegInf()) { compFlags[0] = compFlags[1] = compFlags[2] = compFlags[3] = GT; } else if (r2.isMinInf()) { compFlags[0] = compFlags[1] = compFlags[2] = compFlags[3] = LT; } else { compFlags[0] = compFlags[1] = compFlags[2] = compFlags[3] = validFlag(r1.getMin().compareTo(r2.getMin())); } else if (r1.isPoint()) { // r2 is a proper interval if (r1.isMinNegInf()) { if (r2.isMinNegInf()) { compFlags[0] = LT; compFlags[1] = EQ; } else if (r1.isMinInf()) { if (r2.isMaxInf()) {
Range<T> r = item.getRange(); if (r.contains(srcValue)) { return item; } else if (!r.isMinNegInf() && NumberOperations.compare(srcValue, r.getMin()) <= 0) { hi = mid - 1;
@Override public void encode(Object object, ContentHandler h) throws Exception { ClassificationStats results = (ClassificationStats) object; h.startDocument(); h.startElement("", "", "Results", null); for (int i = 0; i < results.size(); i++) { Range range = results.range(i); AttributesImpl atts = new AttributesImpl(); atts.addAttribute("", "", "lowerBound", null, range.getMin().toString()); atts.addAttribute("", "", "upperBound", null, range.getMax().toString()); atts.addAttribute("", "", "count", null, results.count(i).toString()); h.startElement("", "", "Class", atts); for (Statistic stat : results.getStats()) { h.startElement("", "", stat.name(), null); String value = String.valueOf(results.value(i, stat)); h.characters(value.toCharArray(), 0, value.length()); h.endElement("", "", stat.name()); } h.endElement("", "", "Class"); } h.endElement("", "", "Results"); h.endDocument(); }
/** * Finds the bin for the given value. * * @param value the value * * @return bin index or {@code NO_BIN} */ private int findBin(T value) { int index = 0; for (Bin bin : bins) { if (bin.range.contains(value)) { return index; } index++ ; } return NO_BIN; }
/** * {@inheritDoc} */ public void addRange(Range<Double> range) { if (range != null) { if (this.rangesType == Range.Type.UNDEFINED) { this.rangesType = Range.Type.EXCLUDE; } // copy the input Range defensively ranges.add(new Range<Double>(range)); } }
if (r1.isPoint() || r2.isPoint()) { return pointCompare(r1, r2); if (r1.isMinClosed()) { if (r2.isMaxClosed()) { int flag = validFlag(r1.getMin().compareTo(r2.getMax())); if (flag == EQ) { if (r1.isMinIncluded()) { if (r2.isMaxIncluded()) { compFlags[0] = EQ; } else { if (r1.isMinClosed()) { if (r2.isMinClosed()) { int flag = validFlag(r1.getMin().compareTo(r2.getMin())); if (flag == EQ) { if (r1.isMinIncluded()) { if (r2.isMinIncluded()) { compFlags[1] = EQ; } else { if (r2.isMinIncluded()) { compFlags[1] = GT; } else { if (r2.isMinClosed()) { compFlags[1] = LT; } else {
public static RangeLookupTable getRangeLookupTable(List<Range> classificationRanges, final int[] outputPixelValues, final Number noDataValue, final Class<? extends Number> clazz) { final RangeLookupTable.Builder rltBuilder = new RangeLookupTable.Builder(); final int size = classificationRanges.size(); final boolean useCustomOutputPixelValues = outputPixelValues != null && outputPixelValues.length == size; Class<? extends Number> widestClass = noDataValue.getClass(); for (int i = 0; i < size; i++) { final Range range = classificationRanges.get(i); final Class<? extends Number> rangeClass = range.getMin().getClass(); if (widestClass != rangeClass) { widestClass = ClassChanger.getWidestClass(widestClass, rangeClass); } final int reference = useCustomOutputPixelValues ? outputPixelValues [i] : i + 1; rltBuilder.add(range, convert(reference, noDataValue.getClass())); } // Add the largest range that contains the no data value rltBuilder.add(new Range(getClassMinimum(widestClass), true, getClassMaximum(widestClass), true), noDataValue); return rltBuilder.build(); }
/** * {@inheritDoc} */ public void addNoDataRange(Range<Double> noData) { if (noData != null) { // copy the input Range defensively noDataRanges.add(new Range<Double>(noData)); } }
/** * Tests if a value should be treated as NODATA. * Values that are NaN, infinite or equal to Double.MAX_VALUE * are always treated as NODATA. * * @param value the value to test * * @return {@code true} if a NODATA value; {@code false} otherwise */ private boolean isNoData(double value) { if (Double.isNaN(value) || Double.isInfinite(value) || Double.compare(value, Double.MAX_VALUE) == 0) { return true; } for (Double d : noDataNumbers) { if (CompareOp.aequal(value, d)) { return true; } } for (Range r : noDataRanges) { if (r.contains(value)) { return true; } } return false; } }
ranges.add(Range.create(breaks[i], true, breaks[i + 1], i == breaks.length - 2));