view artifacts/src/main/java/org/dive4elements/river/utils/GaugeIndex.java @ 9295:385b52ccde23

Work on U-Info salix line calculation and chart (no scenario case)
author mschaefer
date Tue, 24 Jul 2018 18:51:47 +0200
parents 6823991e1ed1
children
line wrap: on
line source
/** 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 final List<Gauge> gauges;

    private Gauge lastGauge = null;

    public GaugeIndex(final List<Gauge> gauges) {
        this.gauges = gauges;
    }

    public Gauge findGauge(final 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( this.lastGauge != null && this.lastGauge.getRange().contains(km) )
            return this.lastGauge;

        final Gauge gauge = findGauge(km, this.gauges);

        this.lastGauge = gauge;

        return gauge;
    }

    private static Gauge findGauge(final double km, final List<Gauge> gauges) {
        for (final Gauge gauge: gauges) {
            if (gauge.getRange().contains(km)) {
                return gauge;
            }
        }
        return null;
    }

    public List<Gauge> getGauges() {
        return this.gauges;
    }
}

http://dive4elements.wald.intevation.org