comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/StaticWKmsArtifact.java @ 2745:b63017afbca8

Add helper to allow for points at duration curve facet. flys-artifacts/trunk@4480 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 23 May 2012 19:31:26 +0000
parents 10e6400d4166
children 2f7fed1eb4bf
comparison
equal deleted inserted replaced
2744:c1f2e792704a 2745:b63017afbca8
15 15
16 import de.intevation.artifacts.Artifact; 16 import de.intevation.artifacts.Artifact;
17 import de.intevation.artifacts.ArtifactFactory; 17 import de.intevation.artifacts.ArtifactFactory;
18 import de.intevation.artifacts.ArtifactNamespaceContext; 18 import de.intevation.artifacts.ArtifactNamespaceContext;
19 import de.intevation.artifacts.CallMeta; 19 import de.intevation.artifacts.CallMeta;
20 import de.intevation.flys.artifacts.math.Linear;
20 21
21 import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet; 22 import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
22 import de.intevation.flys.artifacts.model.FacetTypes; 23 import de.intevation.flys.artifacts.model.FacetTypes;
23 import de.intevation.flys.artifacts.model.RelativePointFacet; 24 import de.intevation.flys.artifacts.model.RelativePointFacet;
24 import de.intevation.flys.artifacts.model.WKms; 25 import de.intevation.flys.artifacts.model.WKms;
232 Integer.valueOf(getDataAsString("wst_id"))); 233 Integer.valueOf(getDataAsString("wst_id")));
233 } 234 }
234 235
235 236
236 /** 237 /**
238 * Returns W at Km of WKms, linearly interpolated.
239 * Returns -1 if not found.
240 */
241 public static double getWAtKmLin(WKms wkms, double km) {
242 // Uninformed search.
243 int size = wkms.size();
244 int idx = 0;
245 boolean kmIncreasing = (wkms.getKm(0) < wkms.getKm(wkms.size()-1))
246 ? true : false;
247 if (kmIncreasing) {
248 while (idx < size && wkms.getKm(idx) < km) {
249 idx++;
250 }
251 }
252 else {
253 idx = wkms.size() -1;
254 while (idx > 0 && wkms.getKm(idx) > km) {
255 idx--;
256 }
257 }
258
259 if (idx == size -1 || idx == 0) {
260 return -1;
261 }
262
263 // Do linear interpolation
264 int mod = kmIncreasing ? -1 : +1;
265 return Linear.linear(km, wkms.getKm(idx+mod), wkms.getKm(idx), wkms.getW(idx+mod), wkms.getW(idx));
266 }
267
268
269 /**
237 * Returns W at Km of WKms, searching linearly. 270 * Returns W at Km of WKms, searching linearly.
238 * Returns -1 if not found. 271 * Returns -1 if not found.
239 */ 272 */
240 public double getWAtKm(WKms wkms, double km) { 273 public static double getWAtKm(WKms wkms, double km) {
241 // Uninformed search. 274 // Uninformed search.
242 int size = wkms.size(); 275 int size = wkms.size();
243 for (int i = 0; i < size; i++) { 276 for (int i = 0; i < size; i++) {
244 if (wkms.getKm(i) == km) { 277 if (wkms.getKm(i) == km) {
245 return wkms.getW(i); 278 return wkms.getW(i);

http://dive4elements.wald.intevation.org