comparison artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentDensity.java @ 7200:483cae8915f6

issue1435: Add methods to get data in StyledSeriesBuilder-friendly format, doc.
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Mon, 30 Sep 2013 17:28:58 +0200
parents 7be97faf5848
children fe32a7f9655e
comparison
equal deleted inserted replaced
7199:baf04164fcc6 7200:483cae8915f6
12 import java.util.Collections; 12 import java.util.Collections;
13 import java.util.HashMap; 13 import java.util.HashMap;
14 import java.util.List; 14 import java.util.List;
15 import java.util.Map; 15 import java.util.Map;
16 import java.util.Set; 16 import java.util.Set;
17 import java.util.TreeMap;
17 18
18 import org.apache.log4j.Logger; 19 import org.apache.log4j.Logger;
19 20
20 21
22 /** Sediment Densities for multiple years. */
21 public class SedimentDensity 23 public class SedimentDensity
22 { 24 {
23 private static final Logger logger = Logger 25 private static final Logger logger = Logger
24 .getLogger(SedimentDensity.class); 26 .getLogger(SedimentDensity.class);
25 27
65 this.years = years; 67 this.years = years;
66 } 68 }
67 69
68 /** 70 /**
69 * Get the density at year. 71 * Get the density at year.
70 * measured densities are valid until the next measurement. 72 * Measured densities are valid until the next measurement.
71 * if no measurement was found 1.8 is returned. 73 * If no measurement was found 1.8 is returned.
72 */ 74 */
73 public double getDensity(double km, int year) { 75 public double getDensity(double km, int year) {
74 Collections.sort(this.years); 76 Collections.sort(this.years);
75 if (this.years.size() == 1 && years.get(0) <= year) { 77 if (this.years.size() == 1 && years.get(0) <= year) {
76 logger.debug("get density from year " + year + " at km " + km); 78 logger.debug("get density from year " + year + " at km " + km);
89 } 91 }
90 } 92 }
91 return 1.8d; 93 return 1.8d;
92 } 94 }
93 95
96 /** Get (sorted) map of km to density of all years. */
97 protected double[][] getAllDensities()
98 {
99 TreeMap<Double, Double> map = new TreeMap<Double,Double>();
100 for (int year: years) {
101 for (SedimentDensityValue sdv: densities.get(year)) {
102 map.put(sdv.getKm(), sdv.getDensity());
103 }
104 }
105 double[][] points = new double[2][map.keySet().size()];
106 int i = 0;
107 for (Map.Entry<Double, Double> kmDens: map.entrySet()) {
108 points[0][i] = kmDens.getKey();
109 points[2][i] = kmDens.getValue();
110 i++;
111 }
112
113 return points;
114 }
115
116 /** Get points km,density (sorted by km), for a given year. */
117 public double[][] getDensities(int year)
118 {
119 TreeMap<Double, Double> map = new TreeMap<Double,Double>();
120 for (SedimentDensityValue sdv: densities.get(year)) {
121 map.put(sdv.getKm(), sdv.getDensity());
122 }
123 double[][] points = new double[2][map.keySet().size()];
124 int i = 0;
125 for (Map.Entry<Double, Double> kmDens: map.entrySet()) {
126 points[0][i] = kmDens.getKey();
127 points[1][i] = kmDens.getValue();
128 i++;
129 }
130
131 return points;
132 }
133
134 /** Get value at km, interpolated. */
94 private double getDensityAtKm( 135 private double getDensityAtKm(
95 List<SedimentDensityValue> values, 136 List<SedimentDensityValue> values,
96 double km 137 double km
97 ) { 138 ) {
98 SedimentDensityValue prev = null; 139 SedimentDensityValue prev = null;
109 prev = sdv; 150 prev = sdv;
110 } 151 }
111 return spline(prev, next, km); 152 return spline(prev, next, km);
112 } 153 }
113 154
155 /** Linearly interpolate between density values. */
114 private static double spline( 156 private static double spline(
115 SedimentDensityValue prev, 157 SedimentDensityValue prev,
116 SedimentDensityValue next, 158 SedimentDensityValue next,
117 double km 159 double km
118 ) { 160 ) {

http://dive4elements.wald.intevation.org