Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java @ 3596:6aea625190da
Handle former W calculations in fixA W/Q out.
flys-artifacts/trunk@5218 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Thu, 16 Aug 2012 09:49:21 +0000 |
parents | 1481322efc02 |
children | deeda39ef01b |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java Thu Aug 16 09:41:53 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WaterlevelFacet.java Thu Aug 16 09:49:21 2012 +0000 @@ -8,6 +8,7 @@ import de.intevation.flys.artifacts.FLYSArtifact; import de.intevation.flys.artifacts.states.DefaultState.ComputeType; +import de.intevation.flys.artifacts.math.Linear; import org.apache.log4j.Logger; @@ -67,6 +68,38 @@ } WQKms [] wqkms = getWQKms(res); + if (context.getContextValue("currentKm") != null) { + logger.debug("interpolate at given km"); + // TODO handle exact match. + + WQKms wqkmsI = wqkms[index]; + double km = ((Double)context.getContextValue("currentKm")).doubleValue(); + + // TODO employ DataUtils interface to TDoubleArraList + int size = wqkmsI.size(); + boolean kmIncreasing = (wqkmsI.getKm(0) < wqkmsI.getKm(wqkmsI.size()-1)) + ? true : false; + int mod = kmIncreasing ? +1 : -1; + int idx = 0; + if (!kmIncreasing) { + while (idx < size && wqkmsI.getKm(idx) < km) { + idx++; + } + } + else { + idx = size-1; + while (idx > 0 && wqkmsI.getKm(idx) > km) { + idx--; + } + } + WQKms resultWQKms = new WQKms(); + if (idx != -1 && idx < size) { + double inW = Linear.linear(km, wqkmsI.getKm(idx), wqkmsI.getKm(idx-mod), wqkmsI.getW(idx), wqkmsI.getW(idx-mod)); + double inQ = Linear.linear(km, wqkmsI.getKm(idx),wqkmsI.getKm(idx-mod), wqkmsI.getQ(idx), wqkmsI.getQ(idx-mod)); + resultWQKms.add(inW, inQ, km); + } + return resultWQKms; + } return wqkms != null ? wqkms[index] : null; }