diff gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java @ 521:1bf058f1a2d1

Generate seabed polygon to "Profilschnitte". gnv-artifacts/trunk@615 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 24 Jan 2010 20:24:03 +0000
parents 79e80c289018
children f598702b2a10
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java	Sun Jan 24 12:10:50 2010 +0000
+++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java	Sun Jan 24 20:24:03 2010 +0000
@@ -1,90 +1,85 @@
-/**
- *
- */
 package de.intevation.gnv.state.profile.verticalcrosssection;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import java.awt.Dimension;
-
-import org.apache.log4j.Logger;
-
-import org.jfree.chart.ChartTheme;
-
-import net.sf.ehcache.Element;
-
-import au.com.bytecode.opencsv.CSVWriter;
-
-import com.vividsolutions.jts.geom.Point;
 import com.vividsolutions.jts.geom.Coordinate;
 
 import de.intevation.artifacts.CallContext;
 
+import de.intevation.gnv.artifacts.cache.CacheFactory;
+
 import de.intevation.gnv.artifacts.context.GNVArtifactContext;
 
-import de.intevation.gnv.artifacts.cache.CacheFactory;
 import de.intevation.gnv.artifacts.ressource.RessourceFactory;
 
 import de.intevation.gnv.chart.Chart;
 import de.intevation.gnv.chart.ChartLabels;
-import de.intevation.gnv.chart.ChartStyle;
 import de.intevation.gnv.chart.VerticalCrossSectionChart;
 
-import de.intevation.gnv.chart.exception.TechnicalChartException;
-
 import de.intevation.gnv.geobackend.base.Result;
 import de.intevation.gnv.geobackend.base.ResultDescriptor;
 
 import de.intevation.gnv.geobackend.base.query.QueryExecutor;
 import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory;
+
 import de.intevation.gnv.geobackend.base.query.exception.QueryException;
 
+import de.intevation.gnv.geobackend.sde.datasources.RasterObject;
+
+import de.intevation.gnv.jfreechart.PolygonDataset;
+import de.intevation.gnv.jfreechart.PolygonSeries;
+
 import de.intevation.gnv.math.AttributedXYColumns;
 import de.intevation.gnv.math.HeightValue;
+import de.intevation.gnv.math.IJKey;
+import de.intevation.gnv.math.Interpolation3D;
+import de.intevation.gnv.math.LinearMetrics;
 import de.intevation.gnv.math.QueriedXYDepth;
 import de.intevation.gnv.math.XYColumn;
-import de.intevation.gnv.math.IJKey;
-import de.intevation.gnv.math.LinearMetrics;
-import de.intevation.gnv.math.Interpolation3D;
+
+import de.intevation.gnv.raster.Filter;
+import de.intevation.gnv.raster.IsoAttributeGenerator;
+import de.intevation.gnv.raster.IsoPolygonSeriesProducer;
+import de.intevation.gnv.raster.Palette;
+import de.intevation.gnv.raster.PaletteManager;
+import de.intevation.gnv.raster.PolygonDatasetProducer;
+import de.intevation.gnv.raster.Raster;
+import de.intevation.gnv.raster.Vectorizer;
 
 import de.intevation.gnv.state.InputData;
 
 import de.intevation.gnv.state.describedata.KeyValueDescibeData;
+
 import de.intevation.gnv.state.exception.StateException;
+
 import de.intevation.gnv.state.timeseries.TimeSeriesOutputState;
 
 import de.intevation.gnv.statistics.Statistics;
 import de.intevation.gnv.statistics.VerticalCrossSectionStatistics;
 
 import de.intevation.gnv.utils.DistanceCalculator;
+import de.intevation.gnv.utils.StringUtils;
 import de.intevation.gnv.utils.WKTUtils;
-import de.intevation.gnv.utils.StringUtils;
 
-import de.intevation.gnv.raster.Filter;
-import de.intevation.gnv.raster.PaletteManager;
-import de.intevation.gnv.raster.Palette;
-import de.intevation.gnv.raster.Raster;
-import de.intevation.gnv.raster.PolygonDatasetProducer;
-import de.intevation.gnv.raster.IsoAttributeGenerator;
-import de.intevation.gnv.raster.IsoPolygonSeriesProducer;
-import de.intevation.gnv.raster.Vectorizer;
+import java.awt.Dimension;
+import java.awt.Paint;
 
-import de.intevation.gnv.jfreechart.PolygonDataset;
-import de.intevation.gnv.jfreechart.PolygonSeries;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
 
-import de.intevation.gnv.geobackend.sde.datasources.RasterObject;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import net.sf.ehcache.Element;
+
+import org.apache.log4j.Logger;
+
+import org.jfree.chart.ChartTheme;
 
 /**
  * @author Tim Englich         (tim.englich@intevation.de)
@@ -95,6 +90,8 @@
 
     public static final String CHART_TYPE = "verticalcrosssection";
 
+    public static final Integer GROUND_FILL_INDEX = Integer.valueOf(-2);
+
     public static final String[] ATTRIBUTE_LIST = {
         "SHAPE",
         "Z",
@@ -286,6 +283,16 @@
             : new HashMap<Integer, PaletteManager>();
     }
 
+    private static Paint getGroundFill(CallContext callContext) {
+        GNVArtifactContext context = 
+            (GNVArtifactContext)callContext.globalContext();
+        Paint fill = (Paint)context.get(
+            GNVArtifactContext.VERTICAL_CROSS_SECTION_GROUND_FILL_KEY);
+        return fill != null
+            ? fill
+            : GNVArtifactContext.DEFAULT_VERTICAL_CROSS_SECTION_GROUND_FILL;
+    }
+
     public static final double EPSILON = 1e-5d;
 
     protected Object process(
@@ -377,6 +384,8 @@
 
         PolygonDataset pds = pdsp.getPolygonDataset();
 
+        // Count number of colors before generating seabed
+        // because its used to determine the number of iso lines.
         int numColors = pds.getSeriesCount();
 
         if (debug) {
@@ -384,6 +393,16 @@
             log.debug("number of colors:  " + numColors);
         }
 
+        // generate seabed polygon
+
+        PolygonSeries seabed = OutputHelper.createSeabedPolygon(
+            interpolation,
+            GROUND_FILL_INDEX);
+
+        if (seabed != null) {
+            pds.addSeries(seabed);
+        }
+
         // generate iso lines
 
         int numIso;
@@ -524,8 +543,7 @@
             return null;
         }
 
-        AttributedXYColumns columns =
-            (AttributedXYColumns)result;
+        AttributedXYColumns columns = (AttributedXYColumns)result;
 
         Integer parameterId =
             (Integer)columns.getAttribute("GROUP1"); // XXX: hardcoded
@@ -545,9 +563,13 @@
             return null;
         }
 
+        HashMap<Integer, Paint> special = new HashMap<Integer, Paint>();
+        special.put(GROUND_FILL_INDEX, getGroundFill(callContext));
+
         chart = new VerticalCrossSectionChart(
             columns,
             paletteManager.getBase(),
+            special,
             locale,
             chartLables);
 
@@ -561,28 +583,6 @@
         return chart;
     }
 
-
-    /**
-     * @see de.intevation.gnv.state.timeseries.TimeSeriesOutputState#createChart(java.io.OutputStream,
-     *      java.util.Collection, java.util.Collection, java.lang.String,
-     *      de.intevation.gnv.chart.ChartStyle,
-     *      de.intevation.gnv.chart.ChartLabels)
-     */
-    /*
-    @Override
-    protected void createChart(OutputStream outputStream,
-                               Collection<KeyValueDescibeData> parameters,
-                               Collection<KeyValueDescibeData> measurements,
-                               Collection<KeyValueDescibeData> dates,
-                               ChartStyle chartStyle, ChartLabels chartLables,
-                               String uuid) throws IOException,
-                                           TechnicalChartException {
-        new VerticalCrossSectionChartFactory().createProfileChart(chartLables,
-                chartStyle, parameters, measurements, dates, outputStream, this
-                        .getChartResult(uuid));
-    }
-    */
-
     /**
      * @see de.intevation.gnv.state.timeseries.TimeSeriesOutputState#getStatisticsGenerator()
      */
@@ -601,43 +601,7 @@
     )
     throws UnsupportedEncodingException, IOException, StateException 
     {
-        /* // TODO: Implement a substitution which makes sense.
-        if (chartResult != null) {
-            try {
-                CSVWriter writer = new CSVWriter(new OutputStreamWriter(
-                        outputStream, "ISO-8859-1"), ','); 
-                // USE THIS ENCODING BECAUSE OF
-                // PROBLEMS WITH EXCEL AND UTF-8
-                Iterator<Result> it = chartResult.iterator();
-                WKTReader wktReader = new WKTReader();
-                while (it.hasNext()) {
-                    Result result = it.next();
-                    int i = 0;
-                    String[] entries = new String[9];
-                    Point p = (Point)wktReader.read(result.getString("SHAPE"));
-                    entries[i++] = ""+p.getX();
-                    entries[i++] = ""+p.getY();
-                    entries[i++] = result.getString("Z");
-                    entries[i++] = result.getString("YORDINATE");
-                    entries[i++] = result.getString("GROUP1");
-                    entries[i++] = result.getString("GROUP2");
-                    entries[i++] = result.getString("IPOSITION");
-                    entries[i++] = result.getString("JPOSITION");
-                    entries[i++] = result.getString("KPOSITION");
-                    writer.writeNext(entries);
-                }
-                writer.close();
-            } catch (ParseException e) {
-                log.error(e,e);
-                throw new StateException(
-                "Exception occured while parsing an Point from WKT.");
-            }
-        } else {
-            log.error("No Data given for generating an CSV-File.");
-            throw new StateException(
-                    "No Data given for generating an CSV-File.");
-        }
-        */
+        // TODO: Implement a substitution which makes sense.
     }
 }
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org