[Dive4elements-commits] [PATCH 3 of 4] SedimentLoadFacet: Now that we have total load values with correct ranges in

Wald Commits scm-commit at wald.intevation.org
Fri Jun 21 11:45:59 CEST 2013


# HG changeset patch
# User Felix Wolfsteller <felix.wolfsteller at intevation.de>
# Date 1371807731 -7200
# Node ID 43ef4943e0c218a5b47a375c8a338264b17ff8c2
# Parent  df1a3826c691c8a093d1910363b758b5f825d4b5
SedimentLoadFacet: Now that we have total load values with correct ranges in
place, use them accordingly instead of guessing ranges based on point data.

diff -r df1a3826c691 -r 43ef4943e0c2 artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFacet.java
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFacet.java	Fri Jun 21 11:41:10 2013 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFacet.java	Fri Jun 21 11:42:11 2013 +0200
@@ -8,6 +8,8 @@
 
 package org.dive4elements.river.artifacts.model.minfo;
 
+import gnu.trove.TDoubleArrayList;
+
 import org.dive4elements.artifactdatabase.state.Facet;
 
 import org.dive4elements.artifacts.Artifact;
@@ -70,6 +72,11 @@
             return null;
         }
 
+        // These complicated calculations were necessary because
+        // SedimentLoad/Fraction did not contain the ranges of the given
+        // values. Since this changed, the code is somewhat obsolete, but stable.
+        // For an example of easier calculation, see the "total" part below.
+
         List<Double> sortedStarts = new ArrayList<Double>();
         // Filter stations according to type.
         List<MeasurementStation> stations = new ArrayList<MeasurementStation>();
@@ -90,7 +97,31 @@
         }
         Collections.sort(sortedStarts);
 
-        // Access data according to type.
+        // Handle sediment load differently, as it respects already
+        // the ranges that were added to SedimentLoad/Fraction.
+        if (getName().equals(FacetTypes.SEDIMENT_LOAD_TOTAL)) {
+            SedimentLoad load = result.getLoad();
+            TDoubleArrayList xPos = new TDoubleArrayList();
+            TDoubleArrayList yPos = new TDoubleArrayList();
+            double lastX = -1d;
+            for (double km: load.getKms()) {
+                SedimentLoadFraction fraction = load.getFraction(km);
+                if (fraction.getTotal() != 0) {
+                    if (Math.abs(lastX-km) >= EPSILON) {
+                       xPos.add(Double.NaN);
+                       yPos.add(Double.NaN);
+                    }
+                    xPos.add(km);
+                    yPos.add(fraction.getTotal());
+                    xPos.add(fraction.getTotalRange().getEnd());
+                    yPos.add(fraction.getTotal());
+                    lastX = fraction.getTotalRange().getEnd();
+                }
+            }
+            return new double[][] {xPos.toNativeArray(), yPos.toNativeArray()};
+        }
+
+        // Access data according to type (except total - see above).
         double[][] sd = getLoadData(result);
 
         // Sort by km.


More information about the Dive4elements-commits mailing list