annotate artifacts/src/main/java/org/dive4elements/river/utils/GaugeIndex.java @ 8850:6823991e1ed1

Better helper for acessing gauges by station
author gernotbelger
date Thu, 18 Jan 2018 18:22:25 +0100
parents
children 385b52ccde23
rev   line source
8850
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
2 * Software engineering by
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
5 *
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
9 */
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.utils;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
11
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
12 import java.util.List;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
13
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
14 import org.dive4elements.river.model.Gauge;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
15
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
16 /**
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
17 * Allows performant access to gauges by station.
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
18 * @author Gernot Belger
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
19 */
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
20 public class GaugeIndex {
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
21 private List<Gauge> gauges;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
22
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
23 private Gauge lastGauge = null;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
24
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
25 public GaugeIndex( List<Gauge> gauges) {
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
26 this.gauges = gauges;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
27 }
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
28
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
29 public Gauge findGauge(double km) {
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
30
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
31 // REMARK: this is code copied from WaterlevelExporter, which is honestly not very fast/good.
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
32 // Instead we need to index by range with an RTree and directly acccess the right gauge.
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
33
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
34 if( lastGauge != null && lastGauge.getRange().contains(km) )
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
35 return lastGauge;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
36
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
37 final Gauge gauge = findGauge(km, gauges);
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
38
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
39 lastGauge = gauge;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
40
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
41 return gauge;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
42 }
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
43
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
44 private static Gauge findGauge(double km, List<Gauge> gauges) {
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
45 for (Gauge gauge: gauges) {
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
46 if (gauge.getRange().contains(km)) {
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
47 return gauge;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
48 }
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
49 }
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
50 return null;
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
51 }
6823991e1ed1 Better helper for acessing gauges by station
gernotbelger
parents:
diff changeset
52 }

http://dive4elements.wald.intevation.org