Mercurial > dive4elements > gnv-client
diff gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java @ 482:64e65daa65e9
Fixed some bugs with calculating "Horizontalschnitte".
gnv-artifacts/trunk@557 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 17 Jan 2010 21:26:21 +0000 |
parents | 20dde2b6f1b5 |
children | 823e4f808418 |
line wrap: on
line diff
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java Sun Jan 17 16:34:11 2010 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java Sun Jan 17 21:26:21 2010 +0000 @@ -24,7 +24,10 @@ import de.intevation.gnv.geobackend.sde.datasources.RasterObject; +import de.intevation.gnv.math.AreaInterpolation; import de.intevation.gnv.math.AttributedPoint2ds; +import de.intevation.gnv.math.Point2d; +import de.intevation.gnv.math.QueriedXYDepth; import de.intevation.gnv.state.InputData; import de.intevation.gnv.state.OutputStateBase; @@ -37,11 +40,15 @@ import de.intevation.gnv.utils.StringUtils; import de.intevation.gnv.utils.WKTUtils; +import java.awt.Dimension; + import java.io.File; import java.io.IOException; import java.io.OutputStream; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; import org.apache.log4j.Logger; @@ -324,7 +331,8 @@ preprocess( queryExecutor.executeQuery( queryID, - addedFilterValues))); + addedFilterValues)), + getGroundInterpolation(callContext)); } catch (QueryException e) { log.error(e,e); @@ -343,29 +351,99 @@ AttributedPoint2ds ap2ds = new AttributedPoint2ds(); - boolean first = true; + ArrayList<Point2d> points = new ArrayList<Point2d>(results.size()); + + int sIdx = -1; + int iIdx = -1; + int jIdx = -1; + int vIdx = -1; + int kIdx = -1; + + boolean firstWarn = true; for (Result result: results) { - if (debug && first) { - first = false; + if (sIdx == -1) { ResultDescriptor rd = result.getResultDescriptor(); - log.debug(rd); + sIdx = rd.getColumnIndex("SHAPE"); + iIdx = rd.getColumnIndex("IPOSITION"); + jIdx = rd.getColumnIndex("JPOSITION"); + kIdx = rd.getColumnIndex("KPOSITION"); + vIdx = rd.getColumnIndex("YORDINATE"); + int tIdx = rd.getColumnIndex("TIMEVALUE"); + int pIdx = rd.getColumnIndex("PARAMETERID"); + + if (sIdx == -1 || iIdx == -1 + || jIdx == -1 || kIdx == -1 + || vIdx == -1 || tIdx == -1 + || pIdx == -1 + ) { + log.error("missing column in result set"); + return null; + } + + ap2ds.setAttribute("date", result.getDate(tIdx)); + ap2ds.setAttribute("parameter", result.getInteger(pIdx)); } + Coordinate coord = WKTUtils.toCoordinate(result.getString(sIdx)); + if (coord == null) { + if (firstWarn) { + firstWarn = false; + log.warn("cannot fetch coordinate from result"); + } + continue; + } + double v = result.getDouble(vIdx); + int i = result.getInteger(iIdx); + int j = result.getInteger(jIdx); + + Point2d p2d = new Point2d(coord.x, coord.y, v, i, j); + points.add(p2d); + } - - // TODO: do the interpolation + ap2ds.setPoints(points); return ap2ds; } public AttributedPoint2ds process( - Envelope env, + Envelope boundingBox, Polygon polygon, int numSamples, - AttributedPoint2ds input + AttributedPoint2ds input, + int groundInterpolation ) { - return input; + if (input == null) { + log.error("no data to interpolate"); + return null; + } + + boolean debug = log.isDebugEnabled(); + + if (debug) { + log.debug("before interpolation"); + } + + AreaInterpolation interpolation = + new AreaInterpolation(); + + List<? extends Point2d> points = input.getPoints(); + + if (!interpolation.interpolate( + points, + boundingBox, + new Dimension(numSamples, numSamples), + new QueriedXYDepth(groundInterpolation) + )) { + log.error("interpolation failed"); + return null; + } + + if (debug) { + log.debug("after interpolation"); + } + + return null; }