Mercurial > dive4elements > river
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 ) { |