diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 635:acf3b49ec31f

Take the flow direction into account. flys-artifacts/trunk@2010 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 26 May 2011 14:27:06 +0000
parents 929137ee8154
children 58276db49b16
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java	Thu May 26 09:41:57 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java	Thu May 26 14:27:06 2011 +0000
@@ -277,7 +277,7 @@
             throw new NullPointerException("No Wst found for selected river.");
         }
 
-        WQKms[] results = computeWaterlevelData(kms, qs, wst);
+        WQKms[] results = computeWaterlevelData(kms, qs, wst, river.getKmUp());
 
         // TODO Introduce a caching mechanism here!
 
@@ -315,8 +315,9 @@
     public static WQKms[] computeWaterlevelData(
         double[]      kms,
         double[]      qs,
-        WstValueTable wst)
-    {
+        WstValueTable wst,
+        boolean       up
+    ) {
         logger.info("WINFOArtifact.computeWaterlevelData");
 
         WQKms[] wqkms = new WQKms[qs.length];
@@ -326,7 +327,7 @@
         for (int i = 0; i < qs.length; i++) {
             double [] oqs = new double[kms.length];
             double [] ows = new double[kms.length];
-            int referenceIndex = 0; // TODO: Make depend on the flow direction
+            int referenceIndex = up ? 0 : kms.length-1; 
             WstValueTable.QPosition qPosition =
                 wst.interpolate(qs[i], referenceIndex, kms, ows, oqs);
             if (qPosition != null) {
@@ -511,6 +512,8 @@
             return new WQKms[0];
         }
 
+        boolean kmUp = river.getKmUp();
+
         WstValueTable wst = WstValueTableFactory.getTable(river);
         if (wst == null) {
             logger.error("No wst found for selected river.");
@@ -533,7 +536,7 @@
             }
             if (qs.length == 1) {
                 double [] kms = getKms(segments[0]);
-                return computeWaterlevelData(kms, qs, wst);
+                return computeWaterlevelData(kms, qs, wst, kmUp);
             }
         }
 
@@ -617,7 +620,9 @@
             double [] iqsi = iqs[i];
 
             QPosition qPosition = wst.interpolate(
-                iqsi[0], 0, boundKms, boundWs, boundQs);
+                iqsi[0],
+                kmUp ? 0 : boundKms.length-1,
+                boundKms, boundWs, boundQs);
 
             if (qPosition == null) {
                 logger.warn("interpolation failed for " + iqsi[i]);

http://dive4elements.wald.intevation.org