Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/flowdepth/SoilKindKmValueFinder.java @ 8900:d32c22fc686c
Merge
author | mschaefer |
---|---|
date | Thu, 22 Feb 2018 14:11:19 +0100 |
parents | 89f3c5462a16 |
children |
line wrap: on
line source
/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * 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.sinfo.flowdepth; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.math.DoubleRange; import org.apache.commons.math.ArgumentOutsideDomainException; import org.apache.log4j.Logger; import org.dive4elements.river.model.River; import gnu.trove.TDoubleArrayList; /** * @author matthias * */ public class SoilKindKmValueFinder { /** * Private log to use here. */ private static Logger log = Logger.getLogger(SoilKindKmValueFinder.class); private TDoubleArrayList kms; private List<SoilKind> values; /***** METHODS *****/ /** * Searches a km with its soil kind */ public SoilKind findSoilKind(double km) throws ArgumentOutsideDomainException { if ((kms == null) || (kms.size() == 0)) throw new ArgumentOutsideDomainException(km, Double.NaN, Double.NaN); int i = kms.binarySearch(km); if (i >= 0) { // Exact km match return values.get(i); } else { // Out of range or within km interval if (i < 0) i = -i - 1; if ((i <= 0) || (i >= kms.size())) throw new ArgumentOutsideDomainException(km, Double.NaN, Double.NaN); if (km <= ((kms.get(i-1) + kms.get(i)) / 2)) return values.get(i-1); else return values.get(i); } } /** * Loads the range of the river's kms with their soil kind. * @return Whether the load has been successful */ public boolean loadValues(River river, DoubleRange kmRange) { kms = new TDoubleArrayList(); values = new ArrayList<SoilKind>(); //FIXME Echte Daten aus der Datenbank abfragen addKmKind(0, SoilKind.starr); addKmKind(15.7, SoilKind.mobil); addKmKind(15.8, SoilKind.mobil); addKmKind(15.9, SoilKind.starr); addKmKind(108.7, SoilKind.mobil); addKmKind(108.8, SoilKind.mobil); addKmKind(108.9, SoilKind.starr); addKmKind(119.1, SoilKind.mobil); addKmKind(119.4, SoilKind.mobil); addKmKind(119.5, SoilKind.starr); addKmKind(128.3, SoilKind.mobil); addKmKind(128.9, SoilKind.mobil); addKmKind(129, SoilKind.starr); addKmKind(133.1, SoilKind.mobil); addKmKind(135.9, SoilKind.mobil); addKmKind(136, SoilKind.starr); addKmKind(136.5, SoilKind.mobil); addKmKind(139.9, SoilKind.mobil); addKmKind(140, SoilKind.starr); addKmKind(140.5, SoilKind.mobil); addKmKind(165, SoilKind.mobil); addKmKind(165.1, SoilKind.starr); addKmKind(165.9, SoilKind.mobil); addKmKind(180.8, SoilKind.mobil); addKmKind(180.9, SoilKind.starr); addKmKind(182, SoilKind.mobil); addKmKind(221.3, SoilKind.mobil); return true; } private void addKmKind(double km, SoilKind kind) { kms.add(km); values.add(kind); } }