annotate gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation3D.java @ 518:464e03bf786b

Try to cull points from set of input points when generating "Profilschnitte". gnv-artifacts/trunk@612 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 23 Jan 2010 18:10:34 +0000
parents 234d9892e497
children 4e347624ee7c
rev   line source
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.gnv.math;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import com.vividsolutions.jts.geom.Coordinate;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 import com.vividsolutions.jts.geom.Envelope;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
6 import com.vividsolutions.jts.index.strtree.STRtree;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
7
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
8 import java.awt.Dimension;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
9
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
10 import java.io.Serializable;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
11
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
12 import java.util.Arrays;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
13 import java.util.List;
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import org.apache.log4j.Logger;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
445
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
17 /**
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
18 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de)
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
19 */
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 public class Interpolation3D
445
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
21 implements Serializable
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 private static Logger log = Logger.getLogger(Interpolation3D.class);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
518
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
25 public static final int CULL_POINT_THRESHOLD = Integer.getInteger(
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
26 "gnv.interpolation3d.cull.point.threshold", 1000);
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
27
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 public static final int DEFAULT_WIDTH = 1024;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 public static final int DEFAULT_HEIGHT = 768;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
31 public static final double EPS = 1e-6d;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
32
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 protected int width;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 protected int height;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 protected double [] raster;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 protected double [] depths;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 public Interpolation3D() {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 this(DEFAULT_WIDTH, DEFAULT_HEIGHT);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42
445
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
43 public Interpolation3D(Dimension size) {
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
44 this(size.width, size.height);
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
45 }
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
46
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 public Interpolation3D(int width, int height) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 this.width = width;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 this.height = height;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 public int getHeight() {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 return height;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 public int getWidth() {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 return width;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 public double [] getRaster() {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 return raster;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 public double [] getDepths() {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 return depths;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67
445
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
68 public double getMaxDepth() {
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
69 double maxDepth = Double.MAX_VALUE;
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
70 for (int i = depths!=null?depths.length-1:0; i >= 0; --i) {
446
f5a041000357 Connected vertical cross section with chart generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 445
diff changeset
71 double d = depths[i];
f5a041000357 Connected vertical cross section with chart generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 445
diff changeset
72 if (!Double.isNaN(d) && d < maxDepth) {
f5a041000357 Connected vertical cross section with chart generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 445
diff changeset
73 maxDepth = d;
445
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
74 }
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
75 }
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
76 return maxDepth;
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
77 }
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
78
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 public boolean interpolate(
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 List<? extends Coordinate> path,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 List<? extends XYColumn> points,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 double from,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 double to,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 Metrics metrics,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 XYDepth xyDepth
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 ) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 boolean debug = log.isDebugEnabled();
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
89 int N = path.size();
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 int M = points.size();
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
92 if (debug) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 log.debug("Size of path: " + N);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94 log.debug("Size of points: " + M);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
96
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 if (M < 1 || N < 2) { // nothing to do
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 return false;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
99 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
100
518
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
101 Envelope relevantArea = null;
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
102
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
103 if (M > CULL_POINT_THRESHOLD) {
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
104
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
105 relevantArea = new Envelope(path.get(N-1));
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
106
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
107 for (int i = N-2; i >= 0; --i) {
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
108 relevantArea.expandToInclude(path.get(i));
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
109 }
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
110
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
111 relevantArea.expandBy(
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
112 0.05d*relevantArea.getWidth(),
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
113 0.05d*relevantArea.getHeight());
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
114 }
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
115
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
116 List<GridCell> cells = GridCell.pointsToGridCells(
464e03bf786b Try to cull points from set of input points when generating "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 515
diff changeset
117 points, relevantArea);
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
118
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
119 if (cells.isEmpty()) {
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
120 log.warn("no cells found");
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
121 return false;
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 // put into spatial index to speed up finding neighbors.
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
125 STRtree spatialIndex = new STRtree();
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
127 for (GridCell cell: cells) {
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
128 spatialIndex.insert(cell.getEnvelope(), cell);
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 LinearToMap linearToMap = new LinearToMap(
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 path, from, to, metrics);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 double [] depths = new double[width];
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 Arrays.fill(depths, Double.NaN);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 double cellWidth = (to - from)/width;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 double maxDepth = Double.MAX_VALUE;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 int i = 0;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 Coordinate center = new Coordinate();
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
143 for (double p = cellWidth*0.5; i < depths.length; ++i, p += cellWidth) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
144 if (linearToMap.locate(p, center)) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
145 double depth = xyDepth.depth(center);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
146 depths[i] = depth;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
147 if (depth < maxDepth) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
148 maxDepth = depth;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
149 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
150 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
151 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
152
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
153 if (maxDepth == Double.MAX_VALUE) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
154 log.warn("no depth found -> no interpolation");
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
155 return false;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
156 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
157
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
158 double cellHeight = Math.abs(maxDepth)/height;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 if (debug) {
445
f42ed4f10b79 Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 434
diff changeset
161 log.debug("max depth found: " + maxDepth);
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
162 log.debug("cell size: " + cellWidth + " x " + cellHeight);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
163 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
164
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
165 double [] raster = new double[width*height];
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
166 Arrays.fill(raster, Double.NaN);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
167
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
168 Envelope queryBuffer = new Envelope();
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
169 GridCell.CellFinder finder = new GridCell.CellFinder();
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
170
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
171 i = 0;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
172 for (double p = cellWidth*0.5; i < depths.length; ++i, p += cellWidth) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
173 double depth = depths[i];
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
174 if (Double.isNaN(depth)) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
175 continue;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
176 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
177 linearToMap.locate(p, center);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
178
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
179 queryBuffer.init(
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
180 center.x - EPS, center.x + EPS,
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
181 center.y - EPS, center.y + EPS);
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
182
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
183 finder.prepare(center);
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
184 spatialIndex.query(queryBuffer, finder);
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
185
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
186 GridCell found = finder.found;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
187
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
188 if (found == null) {
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
189 continue;
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
192 XYColumn n0 = (XYColumn)found.p1;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
193 XYColumn n1 = (XYColumn)found.p2;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
194 XYColumn n2 = (XYColumn)found.p3;
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
195 XYColumn n3 = (XYColumn)found.p4;
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
196
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
197 if (n0.prepare(xyDepth)
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
198 && n1.prepare(xyDepth)
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
199 && n2.prepare(xyDepth)
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
200 && n3.prepare(xyDepth)
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 ) {
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202 double y1 = Interpolation2D.interpolate(
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
203 n0.x, n0.y,
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
204 n1.x, n1.y,
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205 center.x);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206 double y2 = Interpolation2D.interpolate(
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
207 n2.x, n2.y,
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
208 n3.x, n3.y,
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209 center.x);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
210 int j = i;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
211 for (double z = -cellHeight*0.5;
453
537e663d6c0c vertical cross section: Fixed problem with running to max depth on every column in interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
212 j < raster.length && z >= depth;
537e663d6c0c vertical cross section: Fixed problem with running to max depth on every column in interpolation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 446
diff changeset
213 z -= cellHeight, j += width) {
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
215 double v0 = n0.value(z);
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
216 double v1 = n1.value(z);
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
217 double v2 = n2.value(z);
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
218 double v3 = n3.value(z);
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
219
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
220 double z1 = Interpolation2D.interpolate(
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
221 n0.x, v0,
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
222 n1.x, v1,
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
223 center.x);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
224 double z2 = Interpolation2D.interpolate(
515
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
225 n2.x, v2,
234d9892e497 Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 453
diff changeset
226 n3.x, v3,
434
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
227 center.x);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
228 double value = Interpolation2D.interpolate(
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
229 y1, z1,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 y2, z2,
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231 center.y);
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
232 raster[j] = value;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
233 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
234 } // down the x/y column
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
235 } // all along the track
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
236
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
237 this.depths = depths;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
238 this.raster = raster;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
239
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
240 return true;
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
241 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
242 }
0eed5749fd63 Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:

http://dive4elements.wald.intevation.org