diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java @ 3596:6aea625190da

Handle former W calculations in fixA W/Q out. flys-artifacts/trunk@5218 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Thu, 16 Aug 2012 09:49:21 +0000
parents 1481322efc02
children deeda39ef01b
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java	Thu Aug 16 09:41:53 2012 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java	Thu Aug 16 09:49:21 2012 +0000
@@ -8,6 +8,7 @@
 import de.intevation.flys.artifacts.FLYSArtifact;
 
 import de.intevation.flys.artifacts.states.DefaultState.ComputeType;
+import de.intevation.flys.artifacts.math.Linear;
 
 import org.apache.log4j.Logger;
 
@@ -67,6 +68,38 @@
         }
 
         WQKms [] wqkms = getWQKms(res);
+        if (context.getContextValue("currentKm") != null) {
+            logger.debug("interpolate at given km");
+            // TODO handle exact match.
+
+            WQKms wqkmsI = wqkms[index];
+            double km = ((Double)context.getContextValue("currentKm")).doubleValue();
+
+            // TODO employ DataUtils interface to TDoubleArraList
+            int size = wqkmsI.size();
+            boolean kmIncreasing = (wqkmsI.getKm(0) < wqkmsI.getKm(wqkmsI.size()-1))
+                                 ? true : false;
+            int mod = kmIncreasing ? +1 : -1;
+            int idx = 0;
+            if (!kmIncreasing) {
+                while (idx < size && wqkmsI.getKm(idx) < km) {
+                    idx++;
+                }
+            }
+            else {
+                idx = size-1;
+                while (idx > 0 && wqkmsI.getKm(idx) > km) {
+                    idx--;
+                }
+            }
+            WQKms resultWQKms = new WQKms();
+            if (idx != -1 && idx < size) {
+                double inW = Linear.linear(km, wqkmsI.getKm(idx), wqkmsI.getKm(idx-mod), wqkmsI.getW(idx), wqkmsI.getW(idx-mod));
+                double inQ = Linear.linear(km, wqkmsI.getKm(idx),wqkmsI.getKm(idx-mod), wqkmsI.getQ(idx), wqkmsI.getQ(idx-mod));
+                resultWQKms.add(inW, inQ, km);
+            }
+            return resultWQKms;
+        }
 
         return wqkms != null ? wqkms[index] : null;
     }

http://dive4elements.wald.intevation.org