Mercurial > dive4elements > gnv-client
annotate gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation3D.java @ 836:05bf8534a35a
Using unix line endings only.
gnv-artifacts/trunk@938 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 18 Apr 2010 09:17:25 +0000 |
parents | 2e951160c43d |
children | 43f3c0cd60f2 |
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 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
64 * The generated raster. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
65 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 protected double [] raster; |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
67 |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
68 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
69 * 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
|
70 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 protected double [] depths; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
72 |
808
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 * Default constructor. |
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 public Interpolation3D() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
77 this(DEFAULT_WIDTH, DEFAULT_HEIGHT); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
78 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
80 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
81 * 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
|
82 * @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
|
83 */ |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
84 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
|
85 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
|
86 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
87 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
88 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
89 * 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
|
90 * @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
|
91 * @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
|
92 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
93 public Interpolation3D(int width, int height) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
94 this.width = width; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
95 this.height = height; |
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 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
98 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
99 * 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
|
100 * @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
|
101 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
102 public int getHeight() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
103 return height; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
104 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
105 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
106 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
107 * 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
|
108 * @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
|
109 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 public int getWidth() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
111 return width; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
112 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
113 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
114 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
115 * 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
|
116 * @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
|
117 */ |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
118 public double getCellWidth() { |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
119 return cellWidth; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
120 } |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
121 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
122 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
123 * 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
|
124 * @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
|
125 */ |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
126 public double getCellHeight() { |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
127 return cellHeight; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
128 } |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
129 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
130 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
131 * Returns the generated raster. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
132 * @return The generated raster. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
133 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
134 public double [] getRaster() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
135 return raster; |
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 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
138 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
139 * 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
|
140 * @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
|
141 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
142 public double [] getDepths() { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
143 return depths; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
144 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
145 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
146 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
147 * 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
|
148 * @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
|
149 */ |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
150 public double getMaxDepth() { |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
151 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
|
152 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
|
153 double d = depths[i]; |
f5a041000357
Connected vertical cross section with chart generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
445
diff
changeset
|
154 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
|
155 maxDepth = d; |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
156 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
157 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
158 return maxDepth; |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
159 } |
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
160 |
808
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
161 /** |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
162 * 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
|
163 * to the sea ground. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
164 * @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
|
165 * @param points The sample points. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
166 * @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
|
167 * @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
|
168 * @param metrics The used metric. |
2e951160c43d
Finished the javadoc of the math package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
798
diff
changeset
|
169 * @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
|
170 * @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
|
171 */ |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
172 public boolean interpolate( |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
173 List<? extends Coordinate> path, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
174 List<? extends XYColumn> points, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
175 double from, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
176 double to, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
177 Metrics metrics, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
178 XYDepth xyDepth |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
179 ) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
180 boolean debug = log.isDebugEnabled(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
181 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
182 int N = path.size(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
183 int M = points.size(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
184 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
185 if (debug) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
186 log.debug("Size of path: " + N); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
187 log.debug("Size of points: " + M); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
188 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
189 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
190 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
|
191 return false; |
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 |
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
|
194 List<GridCell> cells = GridCell.pointsToGridCells( |
528
44415ae01ddb
Fixed issue gnv/issue159
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
521
diff
changeset
|
195 points, Interpolation2D.relevantArea(path, points)); |
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 (cells.isEmpty()) { |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
198 log.warn("no cells found"); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
199 return false; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
200 } |
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 // 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
|
203 STRtree spatialIndex = new STRtree(); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
204 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
205 for (GridCell cell: cells) { |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
206 spatialIndex.insert(cell.getEnvelope(), cell); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
207 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
208 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
209 LinearToMap linearToMap = new LinearToMap( |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
210 path, from, to, metrics); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
211 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
212 double [] depths = new double[width]; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
213 Arrays.fill(depths, Double.NaN); |
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 double cellWidth = (to - from)/width; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
216 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
217 double maxDepth = Double.MAX_VALUE; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
218 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
219 int i = 0; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
220 Coordinate center = new Coordinate(); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
221 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
|
222 if (linearToMap.locate(p, center)) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
223 double depth = xyDepth.depth(center); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
224 depths[i] = depth; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
225 if (depth < maxDepth) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
226 maxDepth = depth; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
227 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
228 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
229 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
230 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
231 if (maxDepth == Double.MAX_VALUE) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
232 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
|
233 return false; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
234 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
235 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
236 double cellHeight = Math.abs(maxDepth)/height; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
237 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
238 if (debug) { |
445
f42ed4f10b79
Fixed some bugs and create "Profilschnitt" polygons via configuration.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
434
diff
changeset
|
239 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
|
240 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
|
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 double [] raster = new double[width*height]; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
244 Arrays.fill(raster, Double.NaN); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
245 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
246 Envelope queryBuffer = new Envelope(); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
247 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
|
248 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
249 i = 0; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
250 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
|
251 double depth = depths[i]; |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
252 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
|
253 continue; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
254 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
255 linearToMap.locate(p, center); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
256 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
257 queryBuffer.init( |
778
9a828e5a2390
Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
528
diff
changeset
|
258 center.x - EPS, center.x + EPS, |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
259 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
|
260 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
261 finder.prepare(center); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
262 spatialIndex.query(queryBuffer, finder); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
263 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
264 GridCell found = finder.found; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
265 |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
266 if (found == null) { |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
267 continue; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
268 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
269 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
270 XYColumn n0 = (XYColumn)found.p1; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
271 XYColumn n1 = (XYColumn)found.p2; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
272 XYColumn n2 = (XYColumn)found.p3; |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
273 XYColumn n3 = (XYColumn)found.p4; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
274 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
275 if (n0.prepare(xyDepth) |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
276 && n1.prepare(xyDepth) |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
277 && n2.prepare(xyDepth) |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
278 && n3.prepare(xyDepth) |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
279 ) { |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
280 double y1 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
281 n0.x, n0.y, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
282 n1.x, n1.y, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
283 center.x); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
284 double y2 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
285 n2.x, n2.y, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
286 n3.x, n3.y, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
287 center.x); |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
288 double z = -cellHeight*0.5; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
289 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
|
290 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
|
291 z -= cellHeight, j += width) { |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
292 |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
293 double v0 = n0.value(z); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
294 double v1 = n1.value(z); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
295 double v2 = n2.value(z); |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
296 double v3 = n3.value(z); |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
297 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
298 double z1 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
299 n0.x, v0, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
300 n1.x, v1, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
301 center.x); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
302 double z2 = Interpolation2D.interpolate( |
515
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
303 n2.x, v2, |
234d9892e497
Fixed "Profilschnitte" for gnv/issue153.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
453
diff
changeset
|
304 n3.x, v3, |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
305 center.x); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
306 double value = Interpolation2D.interpolate( |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
307 y1, z1, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
308 y2, z2, |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
309 center.y); |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
310 raster[j] = value; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
311 } |
778
9a828e5a2390
Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
528
diff
changeset
|
312 // 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
|
313 // between last value and ground. |
778
9a828e5a2390
Removed trailing whitespace
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
528
diff
changeset
|
314 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
|
315 } // down the x/y column |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
316 } // all along the track |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
317 |
521
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
318 this.depths = depths; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
319 this.raster = raster; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
320 this.cellWidth = cellWidth; |
1bf058f1a2d1
Generate seabed polygon to "Profilschnitte".
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
519
diff
changeset
|
321 this.cellHeight = cellHeight; |
434
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
322 |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
323 return true; |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
324 } |
0eed5749fd63
Implemented the raster interpolation for the 'Profilschnitt'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
325 } |
798
6cff63d0c434
Fixed vim modeline. Added some Javadoc.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
780
diff
changeset
|
326 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |