Mercurial > dive4elements > gnv-client
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 :