annotate gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java @ 357:25e4724aa504

Fill (i, j)-gaps when building index buffer. gnv-artifacts/trunk@430 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 15 Dec 2009 15:14:21 +0000
parents 24c21a720aa5
children aec85d00d82c
rev   line source
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
1 /**
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
2 *
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
3 */
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
4 package de.intevation.gnv.state.profile.horizontal;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
5
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
6 import java.util.ArrayList;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
7 import java.util.Arrays;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
8 import java.util.Collection;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
9 import java.util.List;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
10
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
11 import org.apache.log4j.Logger;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
12 import org.w3c.dom.Node;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
13
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
14 import com.vividsolutions.jts.geom.Coordinate;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
15 import com.vividsolutions.jts.geom.LineString;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
16 import com.vividsolutions.jts.io.ParseException;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
17 import com.vividsolutions.jts.io.WKTReader;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
18
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
19 import de.intevation.artifactdatabase.Config;
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
20
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
21 import de.intevation.gnv.artifacts.cache.CacheFactory;
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
22
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
23 import de.intevation.gnv.geobackend.base.Result;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
24 import de.intevation.gnv.geobackend.base.query.QueryExecutor;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
25 import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
26 import de.intevation.gnv.geobackend.base.query.exception.QueryException;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
27 import de.intevation.gnv.geobackend.sde.datasources.ResultSet;
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
28
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
29 import de.intevation.gnv.utils.IndexBuffer;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
30
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
31 import de.intevation.gnv.math.LinearFunction;
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
32
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
33 import org.apache.commons.math.optimization.fitting.CurveFitter;
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
34
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
35 import org.apache.commons.math.optimization.general.GaussNewtonOptimizer;
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
36 import org.apache.commons.math.optimization.OptimizationException;
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
37
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
38 import org.apache.commons.math.FunctionEvaluationException;
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
39
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
40 /**
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
41 * @author Tim Englich <tim.englich@intevation.de>
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
42 *
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
43 */
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
44 public class HorizontalProfileMeshCrossOutputState extends
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
45 HorizontalProfileOutputState {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
46
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
47 /**
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
48 *
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
49 */
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
50 private static final long serialVersionUID = 2205958041745637263L;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
51
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
52 /**
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
53 * the logger, used to log exceptions and additonaly information
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
54 */
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
55 private static Logger log =
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
56 Logger.getLogger(HorizontalProfileMeshCrossOutputState.class);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
57
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
58
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
59 private String ijkQueryID = null;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
60
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
61 /**
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
62 * Constructor
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
63 */
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
64 public HorizontalProfileMeshCrossOutputState() {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
65 super();
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
66 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
67
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
68 /**
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
69 * @see de.intevation.gnv.state.timeseries.TimeSeriesOutputState#setup(org.w3c.dom.Node)
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
70 */
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
71 @Override
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
72 public void setup(Node configuration) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
73 super.setup(configuration);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
74 this.ijkQueryID = Config.getStringXPath(configuration,"queryID-ijk");
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
75
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
76 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
77
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
78 @Override
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
79 protected Collection<Result> getChartResult(String uuid) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
80 log.debug("OutputStateBase.getChartResult");
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
81 Collection<Result> result = null;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
82 if (CacheFactory.getInstance().isInitialized()) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
83 String key = uuid + super.getID();
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
84 log.debug("Hash for Queryelements: " + key);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
85 net.sf.ehcache.Element value = CacheFactory.getInstance().getCache().get(key);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
86 if (value != null) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
87 result = (Collection<Result>) (value.getObjectValue());
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
88 }else{
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
89
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
90 if (this.inputData.containsKey("mesh_linestring")){
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
91
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
92 try {
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
93 // 1. IJK Anfragen f�r Stuetzpunkte im Netz ausf�hren.
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
94 LineString ls = (LineString)new WKTReader().read(this.inputData
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
95 .get("mesh_linestring")
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
96 .getValue());
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
97 Coordinate[] coords = ls.getCoordinates();
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
98
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
99 List<java.awt.Point> points = new ArrayList<java.awt.Point>(coords.length);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
100
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
101 String meshid = this.inputData.get("meshid").getValue();
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
102 QueryExecutor queryExecutor = QueryExecutorFactory
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
103 .getInstance()
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
104 .getQueryExecutor();
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
105
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
106 ArrayList missingPoints = new ArrayList();
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
107
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
108 String additionWhere = "TRUE";
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
109
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
110 for (int i = 0; i < coords.length; i++) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
111
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
112 String wkt = "POINT( "+coords[i].x+" "+coords[i].y+" )";
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
113
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
114 result = queryExecutor.executeQuery(this.ijkQueryID,
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
115 new String[]{meshid,wkt});
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
116 if (!result.isEmpty()){
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
117 Result resultValue = result.iterator().next();
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
118 int iPos = resultValue.getInteger(1);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
119 int jPos = resultValue.getInteger(0);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
120 log.debug("Found Pos "+iPos+"/"+jPos +" for "+wkt);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
121 points.add(i, new java.awt.Point(iPos,jPos));
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
122 }else{
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
123 log.debug("No i/j Pos found for "+wkt);
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
124 missingPoints.add(new Object [] { Integer.valueOf(i), coords[i] });
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
125 points.add(i, null);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
126 // Special Case no i,j found for Coordinate
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
127 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
128 }
357
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
129
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
130 if (missingPoints.size() == coords.length) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
131 log.debug("cannot create index buffer");
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
132 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
133 else { // generate index filter
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
134 boolean remainsMissingPoints = !missingPoints.isEmpty();
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
135
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
136 if (remainsMissingPoints) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
137 // try to guess the missing (i, j)
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
138 CurveFitter iFitter = new CurveFitter(new GaussNewtonOptimizer(true));
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
139 CurveFitter jFitter = new CurveFitter(new GaussNewtonOptimizer(true));
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
140
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
141 for (int i = 0, N = points.size(); i < N; ++i) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
142 java.awt.Point p = (java.awt.Point)points.get(i);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
143 if (p != null) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
144 Coordinate coord = coords[i];
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
145 iFitter.addObservedPoint(coord.x, p.x);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
146 jFitter.addObservedPoint(coord.y, p.y);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
147 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
148 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
149 try {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
150 // XXX: Assumption: (i, j) are created by componentwise linear function.
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
151 // This is surely not correct because (x, y) are in a ellipsoid projection.
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
152 // TODO: use ellipsoid functions and fit with Levenberg Marquardt.
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
153 double [] iParams = iFitter.fit(
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
154 LinearFunction.INSTANCE, new double [] { 1d, 1d });
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
155
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
156 double [] jParams = jFitter.fit(
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
157 LinearFunction.INSTANCE, new double [] { 1d, 1d });
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
158
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
159 for (int i = missingPoints.size()-1; i >= 0; --i) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
160 Object [] a = (Object [])missingPoints.get(i);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
161 Coordinate coord = (Coordinate)a[1];
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
162 int pi = (int)Math.round(iParams[0]*coord.x + iParams[1]);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
163 int pj = (int)Math.round(jParams[0]*coord.y + jParams[1]);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
164 points.set(
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
165 ((Integer)a[0]).intValue(),
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
166 new java.awt.Point(pi, pj));
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
167 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
168
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
169 remainsMissingPoints = false; // we filled the gaps
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
170 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
171 catch (FunctionEvaluationException fee) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
172 log.error(fee);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
173 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
174 catch (OptimizationException oe) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
175 log.error(oe);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
176 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
177 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
178
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
179 if (!remainsMissingPoints) {
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
180 // TODO: Make Tablenames and Columns Configurable
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
181 IndexBuffer ib = new IndexBuffer(
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
182 points,
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
183 "MEDIAN.MESHPOINT.IPOSITION",
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
184 "MEDIAN.MESHPOINT.JPOSITION" );
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
185 additionWhere = ib.toWhereClause();
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
186 log.debug("Additional Where Clause = "+additionWhere);
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
187 // 2. Aus diesen Stuetzpunkten den Resultset generieren.
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
188 }
25e4724aa504 Fill (i, j)-gaps when building index buffer.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 352
diff changeset
189 } // if generate index filter
352
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
190
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
191 String[] filterValues = this.generateFilterValuesFromInputData();
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
192 String[] addedFilterValues = new String[filterValues.length+1];
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
193 System.arraycopy(filterValues, 0, addedFilterValues, 0, filterValues.length);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
194 addedFilterValues[filterValues.length] = additionWhere;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
195
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
196 result = queryExecutor.executeQuery(this.queryID,
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
197 addedFilterValues);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
198
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
199 } catch (ParseException e) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
200 log.error(e,e);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
201 }catch (QueryException e) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
202 log.error(e,e);
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
203 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
204 }else{
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
205 // TODO: definieren was passiert wenn kein linestring vorhanden ist.
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
206 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
207
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
208 if (CacheFactory.getInstance().isInitialized()) {
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
209 CacheFactory.getInstance().getCache().put(new net.sf.ehcache.Element(key, result));
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
210 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
211
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
212 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
213 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
214 return result;
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
215 }
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
216
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
217
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
218
24c21a720aa5 Added Support for "horizontale Schnittprofile"
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
219 }

http://dive4elements.wald.intevation.org