# HG changeset patch # User Raimund Renkert # Date 1354550002 -3600 # Node ID e8c6fbed889b5229f28a56842f53444ac9f8b33f # Parent 95e23bcf6a5038a4c052314b6c62247cc5c5f162 New class storing configuration about zoom dependent filter levels. diff -r 95e23bcf6a50 -r e8c6fbed889b flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/ZoomScale.java --- /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> rivers; + + public ZoomScale() { + this.rivers = new HashMap>(); + } + + public ZoomScale(String river) { + this(); + rivers.put(river, new TreeMap()); + } + + public double getRadius(String river, double lower, double upper) { + double range = Math.abs(upper) - Math.abs(lower); + TreeMap ranges = rivers.get(river); + if (ranges == null) { + return 0.001; + } + Map.Entry next = ranges.higherEntry(range); + Map.Entry 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()); + } + } + + public Set 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()); + this.rivers.get(river).put(range, radius); + } + } +}