Mercurial > dive4elements > gnv-client
annotate gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation3D.java @ 846:8b6ef091d38c
It is possible to draw VerticalProfileCharts with just one single data point (issue229).
gnv-artifacts/trunk@962 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 21 Apr 2010 08:46:23 +0000 |
parents | 43f3c0cd60f2 |
children | f953c9a559d8 |
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 /** |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
18 * Interpolates parameter values along a given line string from surface |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
19 * to the sea ground to generate "Profilschnitte". |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
20 * |
780
c4156275c1e1
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
778
diff
changeset
|
21 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
22 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 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
|
24 implements Serializable |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 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
|
27 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
28 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
29 * The default width of the interpolation: {@value} |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
30 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 public static final int DEFAULT_WIDTH = 1024; |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
32 |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
33 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
34 * The default height of the interpolation: {@value} |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
35 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 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
|
37 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
38 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
39 * Epsilon for numerical stability. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
40 */ |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
41 public static final double EPS = 1e-6d; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
42 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
43 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
44 * The width of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
45 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 protected int width; |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
47 |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
48 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
49 * The height of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
50 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 protected int height; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
53 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
54 * The cell width of the interpolation in world units. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
55 */ |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
56 protected double cellWidth; |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
57 |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
58 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
59 * The cell height of the interpolation in world units. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
60 */ |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
61 protected double cellHeight; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
62 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
63 /** |
837
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
64 * The coordinates of the interpolation. |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
65 */ |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
66 protected Coordinate[] coordinates; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
67 |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
68 /** |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
69 * The generated raster. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
70 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 protected double [] raster; |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
72 |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
73 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
74 * The sea ground depth along the line string. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
75 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
76 protected double [] depths; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
78 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
79 * Default constructor. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
80 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 public Interpolation3D() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 this(DEFAULT_WIDTH, DEFAULT_HEIGHT); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
84 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
85 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
86 * Constructor to create a Interpolation3D with a given size. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
87 * @param size The size of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
88 */ |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
89 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
|
90 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
|
91 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
92 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
93 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
94 * Constructor to create a Interpolation3D with a given size. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
95 * @param width The width of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
96 * @param height the height of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
97 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
98 public Interpolation3D(int width, int height) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 this.width = width; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
100 this.height = height; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
101 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
103 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
104 * Returns the raster height of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
105 * @return The raster height of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
106 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
107 public int getHeight() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
108 return height; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
109 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
111 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
112 * Returns the raster width of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
113 * @return The raster width of the interpolation. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
114 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
115 public int getWidth() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
116 return width; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
117 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
118 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
119 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
120 * Returns the cell width of the interpolation in world units. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
121 * @return The cell width of the interpolation in world units. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
122 */ |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
123 public double getCellWidth() { |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
124 return cellWidth; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
125 } |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
126 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
127 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
128 * Returns the cell height of the interpolation in world units. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
129 * @return The cell height of the interpolation in world units. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
130 */ |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
131 public double getCellHeight() { |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
132 return cellHeight; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
133 } |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
134 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
135 /** |
837
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
136 * Returns the coordinates used for the interpolation. |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
137 * @return the coordinates used for the interpolation. |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
138 */ |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
139 public Coordinate[] getCoordinates() { |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
140 return coordinates; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
141 } |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
142 |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
143 /** |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
144 * Returns the generated raster. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
145 * @return The generated raster. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
146 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
147 public double [] getRaster() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
148 return raster; |
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 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
151 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
152 * Returns the depths along the line string path. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
153 * @return The depth along the line string path. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
154 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
155 public double [] getDepths() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
156 return depths; |
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 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
159 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
160 * Returns the deepest depth along the line string path. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
161 * @return The deepest depth along the line string path. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
162 */ |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
163 public double getMaxDepth() { |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
164 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
|
165 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
|
166 double d = depths[i]; |
f5a041000357
Connected vertical cross section with chart generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
445
diff
changeset
|
167 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
|
168 maxDepth = d; |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
169 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
170 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
171 return maxDepth; |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
172 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
173 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
174 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
175 * Interpolates parameters along a given line string path from the surface |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
176 * to the sea ground. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
177 * @param path The line string path. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
178 * @param points The sample points. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
179 * @param from Start point in scalar terms of the line string. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
180 * @param to End point in scalar terms of the line string. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
181 * @param metrics The used metric. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
182 * @param xyDepth The callback to query the depth at a given point. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
183 * @return true if the interpolation succeeds, else false. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
184 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 public boolean interpolate( |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 List<? extends Coordinate> path, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 List<? extends XYColumn> points, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 double from, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 double to, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 Metrics metrics, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
191 XYDepth xyDepth |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
192 ) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
193 boolean debug = log.isDebugEnabled(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
194 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
195 int N = path.size(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
196 int M = points.size(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
197 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
198 if (debug) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
199 log.debug("Size of path: " + N); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
200 log.debug("Size of points: " + M); |
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 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
203 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
|
204 return false; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
205 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
206 |
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
|
207 List<GridCell> cells = GridCell.pointsToGridCells( |
528
44415ae01ddb
Fixed issue gnv/issue159
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
521
diff
changeset
|
208 points, Interpolation2D.relevantArea(path, points)); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
209 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
210 if (cells.isEmpty()) { |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
211 log.warn("no cells found"); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
212 return false; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
213 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
214 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
215 // 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
|
216 STRtree spatialIndex = new STRtree(); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
217 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
218 for (GridCell cell: cells) { |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
219 spatialIndex.insert(cell.getEnvelope(), cell); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
220 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
222 LinearToMap linearToMap = new LinearToMap( |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
223 path, from, to, metrics); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
224 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
225 double [] depths = new double[width]; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 Arrays.fill(depths, Double.NaN); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
227 |
837
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
228 Coordinate[] coordinates = new Coordinate[width]; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
229 |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 double cellWidth = (to - from)/width; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 double maxDepth = Double.MAX_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 int i = 0; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
235 Coordinate center = new Coordinate(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 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
|
237 if (linearToMap.locate(p, center)) { |
837
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
238 coordinates[i] = (Coordinate) center.clone(); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
239 double depth = xyDepth.depth(center); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
240 depths[i] = depth; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
241 if (depth < maxDepth) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
242 maxDepth = depth; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
243 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
244 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
245 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
246 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
247 if (maxDepth == Double.MAX_VALUE) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
248 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
|
249 return false; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
250 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
251 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
252 double cellHeight = Math.abs(maxDepth)/height; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
253 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
254 if (debug) { |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
255 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
|
256 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
|
257 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
258 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
259 double [] raster = new double[width*height]; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
260 Arrays.fill(raster, Double.NaN); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
261 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
262 Envelope queryBuffer = new Envelope(); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
263 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
|
264 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
265 i = 0; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
266 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
|
267 double depth = depths[i]; |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
268 if (Double.isNaN(depth) || depth >= 0d) { |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
269 continue; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
270 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
271 linearToMap.locate(p, center); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
272 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
273 queryBuffer.init( |
778
9a828e5a2390
Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
528
diff
changeset
|
274 center.x - EPS, center.x + EPS, |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
275 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
|
276 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
277 finder.prepare(center); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
278 spatialIndex.query(queryBuffer, finder); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
279 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
280 GridCell found = finder.found; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
281 |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
282 if (found == null) { |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
283 continue; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
284 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
285 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
286 XYColumn n0 = (XYColumn)found.p1; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
287 XYColumn n1 = (XYColumn)found.p2; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
288 XYColumn n2 = (XYColumn)found.p3; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
289 XYColumn n3 = (XYColumn)found.p4; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
290 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
291 if (n0.prepare(xyDepth) |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
292 && n1.prepare(xyDepth) |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
293 && n2.prepare(xyDepth) |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
294 && n3.prepare(xyDepth) |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
295 ) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
296 double y1 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
297 n0.x, n0.y, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
298 n1.x, n1.y, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
299 center.x); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
300 double y2 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
301 n2.x, n2.y, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
302 n3.x, n3.y, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
303 center.x); |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
304 double z = -cellHeight*0.5; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
305 for (int j = i; |
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
|
306 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
|
307 z -= cellHeight, j += width) { |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
308 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
309 double v0 = n0.value(z); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
310 double v1 = n1.value(z); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
311 double v2 = n2.value(z); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
312 double v3 = n3.value(z); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
313 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
314 double z1 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
315 n0.x, v0, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
316 n1.x, v1, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
317 center.x); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
318 double z2 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
319 n2.x, v2, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
320 n3.x, v3, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
321 center.x); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
322 double value = Interpolation2D.interpolate( |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
323 y1, z1, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
324 y2, z2, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
325 center.y); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
326 raster[j] = value; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
327 } |
778
9a828e5a2390
Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
528
diff
changeset
|
328 // XXX: Adjusted depth to create no gap |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
329 // between last value and ground. |
778
9a828e5a2390
Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
528
diff
changeset
|
330 depths[i] = z+0.5d*cellHeight; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
331 } // down the x/y column |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
332 } // all along the track |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
333 |
837
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
334 this.coordinates = coordinates; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
335 this.depths = depths; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
336 this.raster = raster; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
337 this.cellWidth = cellWidth; |
43f3c0cd60f2
First implementation of an odv export of a 'Profilschnitt' (issue217).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
808
diff
changeset
|
338 this.cellHeight = cellHeight; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
339 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
340 return true; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
341 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
342 } |
798
6cff63d0c434
Fixed vim modeline. Added some Javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
780
diff
changeset
|
343 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |