Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/exports/process/SedimentLoadProcessor.java @ 8204:c657ddcf1fa6
Sediment loads at measurement stations and longitudinal sections need different processing and styling for diagrams.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 05 Sep 2014 14:53:58 +0200 |
parents | e4606eae8ea5 |
children | 204905c16ade |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/exports/process/SedimentLoadProcessor.java Fri Sep 05 13:19:22 2014 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/exports/process/SedimentLoadProcessor.java Fri Sep 05 14:53:58 2014 +0200 @@ -11,6 +11,8 @@ import org.apache.log4j.Logger; import org.jfree.data.xy.XYSeries; +import gnu.trove.TDoubleArrayList; + import org.dive4elements.artifactdatabase.state.ArtifactAndFacet; import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.exports.DiagramGenerator; @@ -18,12 +20,20 @@ import org.dive4elements.river.jfree.StyledXYSeries; import org.dive4elements.river.themes.ThemeDocument; +import org.dive4elements.river.artifacts.D4EArtifact; +import org.dive4elements.river.artifacts.access.RiverAccess; +import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData; +import org.dive4elements.river.artifacts.model.minfo.SedimentLoadData.Station; +import org.dive4elements.river.artifacts.model.minfo.SedimentLoadDataFactory; + // Base class for SedimantLoad$UNITProcessors public class SedimentLoadProcessor extends DefaultProcessor { private final static Logger log = Logger.getLogger(SedimentLoadProcessor.class); + private static final double EPS = 1e-4; + @Override public void doOut( DiagramGenerator generator, @@ -37,19 +47,49 @@ theme); Object data = bundle.getData(context); String facetName = bundle.getFacetName(); - double [][] points; log.debug("Do out for: " + facetName); if (facetName.startsWith("sedimentload.")) { - points = (double[][]) data; + /* Remove stations (with NaN-values) at stations of + different type than appropriate for current fraction.*/ + String [] facetNameParts = facetName.split("\\."); + int gfSType = SedimentLoadData.measurementStationType( + SedimentLoadData.grainFractionIndex( + facetNameParts[facetNameParts.length-1])); + + RiverAccess access = + new RiverAccess((D4EArtifact)bundle.getArtifact()); + String river = access.getRiverName(); + SedimentLoadData sld = + SedimentLoadDataFactory.INSTANCE.getSedimentLoadData(river); + + double [][] allData = (double[][]) data; + TDoubleArrayList cleanedKms = + new TDoubleArrayList(allData[0].length); + TDoubleArrayList cleanedValues = + new TDoubleArrayList(allData[0].length); + + for (int i = 0; i < allData[0].length; ++i) { + double km = allData[0][i]; + Station station = sld.findStations(km-EPS, km+EPS).get(0); + if (station.isType(gfSType)) { + cleanedKms.add(km); + cleanedValues.add(allData[1][i]); + } + } + + double [][] points = new double[2][cleanedKms.size()]; + points[0] = cleanedKms.toNativeArray(); + points[1] = cleanedValues.toNativeArray(); + + StyledSeriesBuilder.addPoints(series, points, false); // Keep NaN + + generator.addAxisSeries(series, axisName, visible); + } else { log.error("Unknown facet name: " + facetName); return; } - - StyledSeriesBuilder.addPoints(series, points, false); // Keep NaN - - generator.addAxisSeries(series, axisName, visible); } }