/** * Calculate minimum (using FeatureCalc) - only one parameter is used. * * @param collection collection to calculate the minimum * @param expression Single Expression argument * @return An object containing the minimum value of the attributes * @throws IllegalFilterException * @throws IOException */ static CalcResult calculateMin(SimpleFeatureCollection collection, Expression expression) throws IllegalFilterException, IOException { MinVisitor minVisitor = new MinVisitor(expression); collection.accepts(minVisitor, null); return minVisitor.getResult(); }
@Test public void testCoverageViewGranuleSourceAggregation() throws Exception { final String VIEW_NAME = "viewAggregate"; CoverageInfo info = buildHeterogeneousResolutionView( VIEW_NAME, cv -> { cv.setSelectedResolution(SelectedResolution.BEST); }, "B02", "B03", "B04", "B01"); StructuredGridCoverage2DReader reader = (StructuredGridCoverage2DReader) info.getGridCoverageReader(null, null); GranuleSource source = reader.getGranules(VIEW_NAME, true); Query query = new Query(VIEW_NAME); // used to throw exception here SimpleFeatureCollection granules = source.getGranules(query); MinVisitor visitor = new MinVisitor("location"); granules.accepts(visitor, null); assertEquals("20170410T103021026Z_fullres_CC2.1989_T32TMT_B01.tif", visitor.getMin()); }
@Override public FeatureCalc create(Expression aggregateAttribute) { return new MinVisitor(aggregateAttribute); }
MinVisitor original = (MinVisitor) visitor; Expression transformedExpression = transformer.transformExpression(original.getExpression()); MinVisitor transformedVisitor = new MinVisitor(transformedExpression); delegateVisitor(transformedVisitor, progress); original.setValue(transformedVisitor.getResult().getValue()); } else if (visitor instanceof MaxVisitor) { MaxVisitor original = (MaxVisitor) visitor;
MinVisitor minVisitor = new MinVisitor(0, ft); fc.accepts(minVisitor, null); MinVisitor minVisitor2 = new MinVisitor(0, ft2); fc2.accepts(minVisitor2, null); Object result = minVisitor.getResult().getValue(); int value = ((Integer) result).intValue(); assertEquals(1, value); int value2 = minVisitor.getResult().toInt(); assertEquals(1, value2); CalcResult minResult1 = minVisitor.getResult(); CalcResult minResult2 = minVisitor2.getResult(); CalcResult minResult3 = minResult1.merge(minResult2); assertEquals(1, minResult3.toInt()); minVisitor.setValue(Integer.valueOf(-50)); minResult1 = minVisitor.getResult(); minResult7 = minResult7.merge(minResult1); assertEquals(-50, minResult7.toInt()); minVisitor.setValue(new Double(-100.0)); minResult1 = minVisitor.getResult(); minResult7 = minResult7.merge(minResult1); assertEquals(-100.0, minResult7.toDouble(), 0); assertEquals(-100, minResult7.toInt()); minVisitor.reset(); empty.accepts(minVisitor, null);
final MinVisitor min = new MinVisitor(time.getAttribute()); collection.accepts(min, null); CalcResult minResult = min.getResult(); result.add((Date) min.getMin()); final MaxVisitor max = new MaxVisitor(time.getAttribute()); collection.accepts(max, null);
public void testMin() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); MinVisitor v = new MyMinVisitor(p); dataStore.getFeatureSource(tname("ft1")).accepts(Query.ALL, v, null); assertFalse(visited); assertEquals(0.0, v.getResult().toDouble(), 0.01); }
(Collection<String>) minVisitor.getExpression().accept(filter, null); int acceptedCount = 0; for (final String attr : attrs) { for (final InternalDataStatistics<SimpleFeature, ?, ?> stat : reader.getStatsFor(attr)) { if (stat instanceof FeatureTimeRangeStatistics) { minVisitor.setValue( reader.convertToType(attr, ((FeatureTimeRangeStatistics) stat).getMinTime())); acceptedCount++; } else if (stat instanceof FeatureNumericRangeStatistics) { minVisitor.setValue( reader.convertToType(attr, ((FeatureNumericRangeStatistics) stat).getMin())); acceptedCount++;
List<Expression> expressions = minVisitor.getExpressions(); if (expressions.size() != 1 || !(expressions.get(0) instanceof PropertyName)) { return false; minVisitor.setValue(propertyName.evaluate(reader.next()));
} else if (MinVisitor.class.isInstance(visitor)) { Object lowest = uniqueValues.first(); ((MinVisitor) visitor).setValue(lowest); } else if (MaxVisitor.class.isInstance(visitor)) { Object highest = uniqueValues.last();
List<Expression> exprs = minVisitor.getExpressions(); if (exprs.size() != 1 || !(exprs.get(0) instanceof PropertyName)) { return false;
/** * @param metadataName * @param attributeName * @return * @throws IOException */ FeatureCalc createExtremaQuery(String metadataName, String attributeName) throws IOException { final Query query = new Query(typeName); query.setPropertyNames(Arrays.asList(attributeName)); final FeatureCalc visitor = metadataName.toLowerCase().endsWith("maximum") ? new MaxVisitor(attributeName) : new MinVisitor(attributeName); granuleCatalog.computeAggregateFunction(query, visitor); return visitor; }
final MinVisitor min = new MinVisitor(elevation.getAttribute()); collection.accepts(min, null); CalcResult calcResult = min.getResult(); if (calcResult != CalcResult.NULL_RESULT) { result.add(((Number) min.getMin()).doubleValue()); final MaxVisitor max = new MaxVisitor(elevation.getAttribute()); collection.accepts(max, null);
public void testMinWithFilter() throws Exception { FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); MinVisitor v = new MyMinVisitor(p); Filter f = ff.greater(ff.property(aname("doubleProperty")), ff.literal(1)); Query q = new Query(tname("ft1"), f); dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null); assertFalse(visited); assertEquals(1.1, v.getResult().toDouble(), 0.01); }
progress.started(); MinVisitor minCalc = (MinVisitor) visitor; Object min = min(minCalc.getExpression()); minCalc.setValue(min); isOptimized = true; progress.complete();
Comparable globalMax; try { MinVisitor minVisit = new MinVisitor(getParameters().get(0)); if (progress == null) progress = new NullProgressListener(); featureCollection.accepts(minVisit, progress); if (progress.isCanceled()) return null; globalMin = (Comparable) minVisit.getResult().getValue();
private Object findDefaultValue(Query query, String attribute) { FeatureCalc aggFunc; switch (NetCDFUtilities.getParameterBehaviour(attribute)) { case MAX: aggFunc = new MaxVisitor(attribute); break; case MIN: aggFunc = new MinVisitor(attribute); break; default: return null; } try { request.source.reader.getCatalog().computeAggregateFunction(query, aggFunc); return aggFunc.getResult().getValue(); } catch (IOException e) { LOGGER.log(Level.WARNING, e.getMessage(), e); return null; } }
granuleCatalog.computeAggregateFunction(query, maxVisitor); max = maxVisitor.getMax(); MinVisitor minVisitor = new MinVisitor(attribute); granuleCatalog.computeAggregateFunction(query, minVisitor); min = minVisitor.getMin(); } else { max = min = (Comparable) firstFeature.getAttribute(attribute);
public void testMinWithLimitOffset() throws Exception { if (!dataStore.getSQLDialect().isLimitOffsetSupported()) { return; } FilterFactory ff = dataStore.getFilterFactory(); PropertyName p = ff.property(aname("doubleProperty")); MinVisitor v = new MyMinVisitor(p); Query q = new Query(tname("ft1")); q.setStartIndex(0); q.setMaxFeatures(2); dataStore.getFeatureSource(tname("ft1")).accepts(q, v, null); assertFalse(visited); assertEquals(0.0, v.getResult().toDouble(), 0.01); }
Filter aboveFilter = ff.greater(ff.property(attribute), ff.literal(targetValue)); qAbove.setFilter(ff.and(query.getFilter(), aboveFilter)); MinVisitor min = new MinVisitor(attribute); handleVisitor(qAbove, min); Comparable minAbove = (Comparable) min.getResult().getValue(); nearest.setValue(maxBelow, minAbove);