# HG changeset patch # User gernotbelger # Date 1516296145 -3600 # Node ID 6823991e1ed17302b2f070da479eba01fe7a185f # Parent e4aadc953665a39dc8e25058392c7fc31d921ee7 Better helper for acessing gauges by station diff -r e4aadc953665 -r 6823991e1ed1 artifacts/src/main/java/org/dive4elements/river/utils/GaugeIndex.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/utils/GaugeIndex.java Thu Jan 18 18:22:25 2018 +0100 @@ -0,0 +1,52 @@ +/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde + * Software engineering by + * Björnsen Beratende Ingenieure GmbH + * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ +package org.dive4elements.river.utils; + +import java.util.List; + +import org.dive4elements.river.model.Gauge; + +/** + * Allows performant access to gauges by station. + * @author Gernot Belger + */ +public class GaugeIndex { + private List gauges; + + private Gauge lastGauge = null; + + public GaugeIndex( List gauges) { + this.gauges = gauges; + } + + public Gauge findGauge(double km) { + + // REMARK: this is code copied from WaterlevelExporter, which is honestly not very fast/good. + // Instead we need to index by range with an RTree and directly acccess the right gauge. + + if( lastGauge != null && lastGauge.getRange().contains(km) ) + return lastGauge; + + final Gauge gauge = findGauge(km, gauges); + + lastGauge = gauge; + + return gauge; + } + + private static Gauge findGauge(double km, List gauges) { + for (Gauge gauge: gauges) { + if (gauge.getRange().contains(km)) { + return gauge; + } + } + return null; + } +} \ No newline at end of file