diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ZoomScale.java @ 4618:e8c6fbed889b

New class storing configuration about zoom dependent filter levels.
author Raimund Renkert <rrenkert@intevation.de>
date Mon, 03 Dec 2012 16:53:22 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ZoomScale.java	Mon Dec 03 16:53:22 2012 +0100
@@ -0,0 +1,75 @@
+package de.intevation.flys.artifacts.model;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+
+import org.apache.log4j.Logger;
+
+import de.intevation.flys.artifacts.math.Linear;
+
+
+public class ZoomScale
+{
+    private static Logger logger = Logger.getLogger(ZoomScale.class);
+
+    private HashMap<String, TreeMap<Double, Double>> rivers;
+
+    public ZoomScale() {
+        this.rivers = new HashMap<String, TreeMap<Double, Double>>();
+    }
+
+    public ZoomScale(String river) {
+        this();
+        rivers.put(river, new TreeMap<Double, Double>());
+    }
+
+    public double getRadius(String river, double lower, double upper) {
+        double range = Math.abs(upper) - Math.abs(lower);
+        TreeMap<Double, Double> ranges = rivers.get(river);
+        if (ranges == null) {
+            return 0.001;
+        }
+        Map.Entry<Double, Double> next = ranges.higherEntry(range);
+        Map.Entry<Double, Double> prev = ranges.lowerEntry(range);
+        double x0 = 0d;
+        double x1 = 0d;
+        double y0 = 0d;
+        double y1 = 0d;
+        if (prev == null && next != null) {
+            x1 = next.getKey();
+            y1 = next.getValue();
+        }
+        else if (prev != null && next == null) {
+            return prev.getValue();
+        }
+        else {
+            x0 = prev.getKey();
+            x1 = next.getKey();
+            y0 = prev.getValue();
+            y1 = next.getValue();
+        }
+        return Linear.linear(range, x0, x1, y0, y1);
+    }
+
+    public void addRiver(String river) {
+        if (!this.rivers.containsKey(river)) {
+            this.rivers.put(river, new TreeMap<Double, Double>());
+        }
+    }
+
+    public Set<String> getRivers() {
+        return this.rivers.keySet();
+    }
+
+    public void addRange(String river, double range, double radius) {
+        if (this.rivers.containsKey(river)) {
+            this.rivers.get(river).put(range, radius);
+        }
+        else {
+            this.rivers.put(river, new TreeMap<Double, Double>());
+            this.rivers.get(river).put(range, radius);
+        }
+    }
+}

http://dive4elements.wald.intevation.org