Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/BedHeight.java @ 6665:b7945db8a43b
issue1413: Only show unknown sediment loads of selected unit type.
Therefore, adjusted the factory to take the units name. Unfortunately,
names in db do not match values of data items. Thus do manual replacing.
In Facet and Calculate, take the chosen unit via access and to the string
replacement.
In Facet, do not transform data (we assume it comes in unit as labeled in
the db), and removed the possibility of m3/a-data of unknown yields in a
t/a diagram and vice versa.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 25 Jul 2013 15:08:13 +0200 |
parents | 3c8147ba35a6 |
children |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.model.minfo; import org.apache.log4j.Logger; import gnu.trove.TDoubleArrayList; import org.dive4elements.river.artifacts.model.NamedObjectImpl; public class BedHeight extends NamedObjectImpl { private static Logger log = Logger.getLogger(BedHeight.class); protected TDoubleArrayList heights; protected TDoubleArrayList station; public BedHeight() { heights = new TDoubleArrayList(); station = new TDoubleArrayList(); } public BedHeight(String name) { super(name); heights = new TDoubleArrayList(); station = new TDoubleArrayList(); } public BedHeight(int capacity) { this(capacity, ""); } public BedHeight(int capacity, String name) { super(name); heights = new TDoubleArrayList(capacity); station = new TDoubleArrayList(capacity); } public void add(double value, double station) { this.heights.add(value); this.station.add(station); } public int size() { return heights.size(); } public double getHeight(int idx) { return heights.getQuick(idx); } public double [] getHeights() { return heights.toNativeArray(); } public double [] get(int idx) { return get(idx, new double [3]); } public double [] get(int idx, double [] dst) { dst[0] = heights.getQuick(idx); dst[1] = station.getQuick(idx); return dst; } public double minHeights() { return heights.min(); } public TDoubleArrayList getStations() { return this.station; } public double getHeight(double station) { int index = this.station.indexOf(station); return index >= 0 ? heights.getQuick(index) : Double.NaN; } public static void removeNaNs(TDoubleArrayList [] arrays) { int dest = 0; int A = arrays.length; int N = arrays[0].size(); OUTER: for (int i = 0; i < N; ++i) { for (int j = 0; j < A; ++j) { TDoubleArrayList a = arrays[j]; double v = a.getQuick(i); if (Double.isNaN(v)) { continue OUTER; } a.setQuick(dest, v); } ++dest; } if (dest < N) { for (int i = 0; i < A; ++i) { arrays[i].remove(dest, N-dest); } } } public void removeNaNs() { removeNaNs(new TDoubleArrayList [] { heights }); } }