diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 642:2dbbb5be30a1

Re-eanbled the calculation of the backjump correction. flys-artifacts/trunk@2026 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 27 May 2011 16:52:37 +0000
parents f0c1250d1e7b
children a9bde508824a
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java	Fri May 27 10:09:46 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java	Fri May 27 16:52:37 2011 +0000
@@ -497,6 +497,28 @@
         return wqkms;
     }
 
+    private static final double [] getBounds(double [][] segments) {
+        boolean down = true;
+        double min =  Double.MAX_VALUE;
+        double max = -Double.MAX_VALUE;
+
+        for (double [] segment: segments) {
+            if (down = segment[0] > segment[1]) {
+                if (segment[1] < min) min = segment[1];
+                if (segment[0] > max) max = segment[0];
+            }
+            else {
+                if (segment[0] < min) min = segment[0];
+                if (segment[1] > max) max = segment[1];
+            }
+        }
+
+        return down
+            ?  new double [] { max, min }
+            :  new double [] { min, max };
+
+    }
+
     /**
      * Returns the data computed by the discharge longitudinal section
      * computation.
@@ -554,12 +576,12 @@
         double [] boundKms;
 
         if (segments.length == 2) {
-            boundKms = new double [] { segments[0][0], segments[1][1] };
+            boundKms = getBounds(segments);
         }
         else {
             TDoubleArrayList bounds = new TDoubleArrayList();
 
-            bounds.add(segments[0][0]);
+            bounds.add(Math.min(segments[0][0], segments[0][1]));
 
             for (int i = 1; i < segments.length-1; ++i) {
                 double [] segment = segments[i];
@@ -576,7 +598,10 @@
                 }
             }
 
-            bounds.add(segments[segments.length-1][1]);
+            bounds.add(Math.max(
+                segments[segments.length-1][0],
+                segments[segments.length-1][1]));
+
             boundKms = bounds.toNativeArray();
         }
 
@@ -654,16 +679,14 @@
 
             wst.interpolate(okms, ows, oqs, qPosition, remap);
 
-            /*
             BackJumpCorrector bjc = new BackJumpCorrector();
             if (bjc.doCorrection(okms, ows)) {
                 logger.debug("Discharge longitudinal section has backjumps.");
                 results.add(new WQCKms(okms, oqs, ows, bjc.getCorrected()));
             }
             else {
-            */
                 results.add(new WQKms(okms, oqs, ows));
-            //}
+            }
         }
 
         WQKms [] wqkms = results.toArray(new WQKms[results.size()]);

http://dive4elements.wald.intevation.org