[PATCH] Better helper for acessing gauges by station

Wald Commits scm-commit at wald.intevation.org
Thu Jan 18 18:22:29 CET 2018


# 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<Gauge> gauges;
+	
+	private Gauge lastGauge = null;
+
+	public GaugeIndex( List<Gauge> 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<Gauge> gauges) {
+        for (Gauge gauge: gauges) {
+            if (gauge.getRange().contains(km)) {
+                return gauge;
+            }
+        }
+        return null;
+    }
+}
\ No newline at end of file


More information about the Dive4Elements-commits mailing list