gernotbelger@8946: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@8946: * Software engineering by gernotbelger@8946: * Björnsen Beratende Ingenieure GmbH gernotbelger@8946: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@8946: * gernotbelger@8946: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@8946: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@8946: * documentation coming with Dive4Elements River for details. gernotbelger@8946: */ gernotbelger@8946: package org.dive4elements.river.artifacts.sinfo.tkhcalculation; gernotbelger@8946: gernotbelger@8946: import org.apache.commons.math.ArgumentOutsideDomainException; gernotbelger@8946: import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; gernotbelger@8946: import org.dive4elements.river.artifacts.model.WKms; gernotbelger@8946: import org.dive4elements.river.utils.DoubleUtil; gernotbelger@8946: gernotbelger@8946: /** gernotbelger@8946: * Abstraction for access to waterlevels by station. gernotbelger@8946: * gernotbelger@8946: * @author Gernot Belger gernotbelger@8946: */ gernotbelger@8946: public class WaterlevelValuesFinder { gernotbelger@8946: gernotbelger@8946: public static WaterlevelValuesFinder fromKms(final WKms wkms) { gernotbelger@8946: return new WaterlevelValuesFinder(wkms); gernotbelger@8946: } gernotbelger@8946: gernotbelger@8946: private final PolynomialSplineFunction wstInterpolator; gernotbelger@8946: gernotbelger@8946: private WaterlevelValuesFinder(final WKms wkms) { gernotbelger@8946: this.wstInterpolator = DoubleUtil.getLinearInterpolator(wkms.allKms(), wkms.allWs()); gernotbelger@8946: } gernotbelger@8946: gernotbelger@8946: public double getWaterlevel(final double km) { gernotbelger@8946: try { gernotbelger@8946: return this.wstInterpolator.value(km); gernotbelger@8946: } gernotbelger@8946: catch (final ArgumentOutsideDomainException e) { gernotbelger@8946: e.printStackTrace(); gernotbelger@8946: return Double.NaN; gernotbelger@8946: } gernotbelger@8946: } gernotbelger@8946: }