view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhcalculation/WaterlevelValuesFinder.java @ 8946:5d5d482da3e9

Implementing SINFO - FlowDepthMinMax calculation
author gernotbelger
date Tue, 13 Mar 2018 18:49:33 +0100
parents
children 45f1ad66560e
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.tkhcalculation;

import org.apache.commons.math.ArgumentOutsideDomainException;
import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction;
import org.dive4elements.river.artifacts.model.WKms;
import org.dive4elements.river.utils.DoubleUtil;

/**
 * Abstraction for access to waterlevels by station.
 *
 * @author Gernot Belger
 */
public class WaterlevelValuesFinder {

    public static WaterlevelValuesFinder fromKms(final WKms wkms) {
        return new WaterlevelValuesFinder(wkms);
    }

    private final PolynomialSplineFunction wstInterpolator;

    private WaterlevelValuesFinder(final WKms wkms) {
        this.wstInterpolator = DoubleUtil.getLinearInterpolator(wkms.allKms(), wkms.allWs());
    }

    public double getWaterlevel(final double km) {
        try {
            return this.wstInterpolator.value(km);
        }
        catch (final ArgumentOutsideDomainException e) {
            e.printStackTrace();
            return Double.NaN;
        }
    }
}

http://dive4elements.wald.intevation.org