# HG changeset patch # User Raimund Renkert # Date 1354551008 -3600 # Node ID 5b551e3a58d53b60ccb4b1422908bd61d44842cd # Parent d6d16b5ab2f07cb63651ee2fe3f1b4e1c2d454fb Add start and end km of current chart zoomlevel to the context and use these values to calculate the moving average. diff -r d6d16b5ab2f0 -r 5b551e3a58d5 flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FlowVelocityFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FlowVelocityFacet.java Mon Dec 03 17:08:39 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/FlowVelocityFacet.java Mon Dec 03 17:10:08 2012 +0100 @@ -7,6 +7,8 @@ import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.access.RiverAccess; +import de.intevation.flys.artifacts.context.FLYSContext; import de.intevation.flys.artifacts.states.DefaultState.ComputeType; import org.apache.log4j.Logger; @@ -39,13 +41,36 @@ public Object getData(Artifact artifact, CallContext context) { logger.debug("Get data for flow velocity at index: " + index); + Double start = (Double)context.getContextValue("startkm"); + Double end = (Double)context.getContextValue("endkm"); FLYSArtifact flys = (FLYSArtifact) artifact; CalculationResult res = (CalculationResult) flys.compute(context, hash, stateId, type, false); FlowVelocityData[] data = (FlowVelocityData[]) res.getData(); + if(start != null && end != null) { + FLYSContext fc = (FLYSContext)context.globalContext(); + ZoomScale scales = (ZoomScale)fc.get("zoomscale"); + RiverAccess access = new RiverAccess((FLYSArtifact)artifact); + String river = access.getRiver(); + double radius = scales.getRadius(river, start, end); + FlowVelocityData oldData = data[index]; + FlowVelocityData newData = new FlowVelocityData(); + double[][] q = oldData.getQPoints(); + double[][] totalV = MovingAverage.weighted(oldData.getTotalChannelPoints(), radius); + double[][] mainV = MovingAverage.weighted(oldData.getMainChannelPoints(), radius); + double[][] tau = MovingAverage.weighted(oldData.getTauPoints(), radius); + for(int j = 0; j < q[0].length; j++) { + newData.addKM(q[0][j]); + newData.addQ(q[1][j]); + newData.addTauMain(tau[1][j]); + newData.addVMain(mainV[1][j]); + newData.addVTotal(totalV[1][j]); + } + return newData; + } return data[index]; } diff -r d6d16b5ab2f0 -r 5b551e3a58d5 flys-artifacts/src/main/java/de/intevation/flys/exports/FlowVelocityGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/FlowVelocityGenerator.java Mon Dec 03 17:08:39 2012 +0100 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/FlowVelocityGenerator.java Mon Dec 03 17:10:08 2012 +0100 @@ -1,5 +1,7 @@ package de.intevation.flys.exports; +import java.util.Arrays; + import org.apache.log4j.Logger; import org.jfree.data.xy.XYSeries; @@ -11,10 +13,13 @@ import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.access.FlowVelocityAccess; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.FlowVelocityData; import de.intevation.flys.model.FlowVelocityMeasurementValue; +import de.intevation.flys.jfree.Bounds; +import de.intevation.flys.jfree.DoubleBounds; import de.intevation.flys.jfree.FLYSAnnotation; import de.intevation.flys.jfree.StyledXYSeries; @@ -201,6 +206,32 @@ return; } + if (getXBounds(0) != null && getDomainAxisRange() != null) { + logger.debug(Arrays.toString(getDomainAxisRangeFromRequest())); + Bounds bounds = + calculateZoom(getXBounds(0), getDomainAxisRange()); + context.putContextValue("startkm", bounds.getLower()); + context.putContextValue("endkm", bounds.getUpper()); + } + else if (getXBounds(0) != null && getDomainAxisRange() == null) { + context.putContextValue("startkm", getXBounds(0).getLower()); + context.putContextValue("endkm", getXBounds(0).getUpper()); + } + else if (getXBounds(0) == null && getDomainAxisRange() == null) { + FLYSArtifact artifact = (FLYSArtifact)artifactAndFacet.getArtifact(); + FlowVelocityAccess access = new FlowVelocityAccess(artifact); + context.putContextValue("startkm", access.getLowerKM()); + context.putContextValue("endkm", access.getUpperKM()); + } + else if (getXBounds(0) == null && getDomainAxisRange() != null){ + FLYSArtifact artifact = (FLYSArtifact)artifactAndFacet.getArtifact(); + FlowVelocityAccess access = new FlowVelocityAccess(artifact); + Bounds b = new DoubleBounds(access.getLowerKM(), access.getUpperKM()); + Bounds bounds = + calculateZoom(b, getDomainAxisRange()); + context.putContextValue("startkm", bounds.getLower()); + context.putContextValue("endkm", bounds.getUpper()); + } if (name.equals(FLOW_VELOCITY_MAINCHANNEL)) { doMainChannelOut( (FlowVelocityData) artifactAndFacet.getData(context),