Mercurial > dive4elements > river
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); + } + } +}