Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 887:b757def3ff55
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
geo-backend/trunk@859 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 29 Mar 2010 09:45:05 +0000 |
parents | 8b442223741c |
children | ebeb56428409 |
rev | line source |
---|---|
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
1 package de.intevation.gnv.geobackend.sde.datasources; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
2 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
3 import com.vividsolutions.jts.geom.Coordinate; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
4 |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
5 import java.io.Serializable; |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
6 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
7 import org.apache.commons.math.ArgumentOutsideDomainException; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
8 |
552
7615ee5d1345
Cleanup imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
550
diff
changeset
|
9 import org.apache.commons.math.analysis.interpolation.SplineInterpolator; |
7615ee5d1345
Cleanup imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
550
diff
changeset
|
10 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
11 import org.apache.commons.math.analysis.polynomials.PolynomialSplineFunction; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
12 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
13 import org.apache.log4j.Logger; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
14 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
15 /** |
887
b757def3ff55
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
886
diff
changeset
|
16 * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> |
b757def3ff55
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
886
diff
changeset
|
17 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
18 */ |
885
1c3efbd2fc5a
Removes trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
552
diff
changeset
|
19 public class RasterObject |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
20 implements Serializable |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
21 { |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
22 private static Logger log = Logger.getLogger(RasterObject.class); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
23 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
24 public static final int NEAREST_NEIGHBOR = 0; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
25 public static final int BILINEAR = 1; |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
26 public static final int BICUBIC = 2; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
27 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
28 private double mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
29 private double bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
30 private double my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
31 private double by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
32 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
33 private int columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
34 private int rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
35 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
36 private int tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
37 private int tileHeight; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
38 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
39 private double [] rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
40 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
41 private transient PolynomialSplineFunction [] splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
42 private transient double [] columns; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
43 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
44 public RasterObject() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
45 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
46 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
47 public RasterObject( |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
48 double mx, double bx, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
49 double my, double by, |
885
1c3efbd2fc5a
Removes trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
552
diff
changeset
|
50 int columnIndex, |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
51 int rowIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
52 double [] rasterData, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
53 int tileWidth, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
54 int tileHeight |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
55 ){ |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
56 this.mx = mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
57 this.bx = bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
58 this.my = my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
59 this.by = by; |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
60 this.columnIndex = columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
61 this.rowIndex = rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
62 this.rasterData = rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
63 this.tileWidth = tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
64 this.tileHeight = tileHeight; |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
65 } |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
66 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
67 public boolean contains(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
68 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
69 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
70 return px >= 0d && py >= 0d && px < tileWidth && py < tileHeight; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
71 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
72 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
73 public final double get(int posX, int posY) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
74 return rasterData[posY*tileWidth + posX]; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
75 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
76 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
77 public int getTileWidth() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
78 return tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
79 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
80 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
81 public int getTileHeight() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
82 return tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
83 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
84 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
85 public int getColumnIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
86 return columnIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
87 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
88 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
89 public int getRowIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
90 return rowIndex; |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
91 } |
885
1c3efbd2fc5a
Removes trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
552
diff
changeset
|
92 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
93 public double getValue(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
94 return getValue(coordinate, NEAREST_NEIGHBOR); |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
95 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
96 |
548
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
97 public final double interpolateBilinear(double px, double py) { |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
98 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
99 if (px < 0.5d) { // left border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
100 if (py < 0.5d) { // upper left edge |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
101 return rasterData[0]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
102 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
103 if (py > tileHeight-0.5d) { // lower left edge |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
104 return rasterData[rasterData.length-tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
105 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
106 // center left |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
107 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
108 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
109 i *= tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
110 return (1d-t)*rasterData[i] + t*rasterData[i+tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
111 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
112 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
113 if (px > tileWidth-0.5d) { // right border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
114 if (py < 0.5d) { // upper right edge |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
115 return rasterData[tileWidth-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
116 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
117 if (py > tileHeight-0.5d) { // lower right edge |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
118 return rasterData[rasterData.length-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
119 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
120 // center right |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
121 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
122 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
123 i = i*tileWidth + tileWidth-1; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
124 return (1d-t)*rasterData[i] + t*rasterData[i+tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
125 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
126 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
127 if (py < 0.5d) { // top border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
128 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
129 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
130 return (1d-t)*rasterData[i] + t*rasterData[i+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
131 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
132 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
133 if (py > tileHeight-0.5d) { // bottom border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
134 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
135 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
136 i += rasterData.length-tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
137 return (1d-t)*rasterData[i] + t*rasterData[i+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
138 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
139 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
140 // center |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
141 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
142 int j = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
143 double ti = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
144 double tj = px - j; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
145 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
146 int idx = i*tileWidth + j; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
147 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
148 double v1j1 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
149 double v2j1 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
150 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
151 idx += tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
152 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
153 double v1j2 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
154 double v2j2 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
155 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
156 double v1 = (1d-tj)*v1j1 + tj*v2j1; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
157 double v2 = (1d-tj)*v1j2 + tj*v2j2; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
158 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
159 return (1d-ti)*v1 + ti*v2; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
160 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
161 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
162 protected PolynomialSplineFunction [] createSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
163 PolynomialSplineFunction [] splines = |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
164 new PolynomialSplineFunction[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
165 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
166 double [] x = new double[tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
167 double [] y = new double[tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
168 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
169 for (int i = 0; i < tileWidth; ++i) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
170 x[i] = i + 0.5d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
171 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
172 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
173 columns = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
174 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
175 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
176 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
177 for (int i = 0; i < tileHeight; ++i) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
178 int row = i*tileWidth; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
179 for (int j = 0; j < tileWidth; ++j) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
180 y[j] = rasterData[row + j]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
181 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
182 splines[i] = interpolator.interpolate(x, y); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
183 columns[i] = i + 0.5d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
184 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
185 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
186 return splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
187 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
188 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
189 protected synchronized PolynomialSplineFunction [] getSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
190 if (splines == null) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
191 splines = createSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
192 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
193 return splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
194 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
195 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
196 protected double [] columnValues(double x) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
197 PolynomialSplineFunction [] splines = getSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
198 double [] y = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
199 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
200 for (int i = 0; i < tileHeight; ++i) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
201 y[i] = splines[i].value(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
202 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
203 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
204 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
205 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
206 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
207 return y; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
208 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
209 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
210 private final double evaluateBicubicVertical(double x, double y) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
211 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
212 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
213 double [] cs = columnValues(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
214 PolynomialSplineFunction spline = interpolator.interpolate( |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
215 columns, cs); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
216 return spline.value(y); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
217 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
218 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
219 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
220 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
221 return 0d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
222 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
223 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
224 private final double evaluateBicubicHorizonal(int index, double x) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
225 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
226 PolynomialSplineFunction spline = getSplines()[index]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
227 return spline.value(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
228 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
229 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
230 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
231 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
232 return 0d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
233 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
234 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
235 public double interpolateBicubic(double px, double py) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
236 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
237 if (px <= 0.5d) { // left |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
238 if (py <= 0.5d) { // upper left |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
239 return rasterData[0]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
240 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
241 if (py >= tileHeight-0.5d) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
242 return rasterData[rasterData.length-tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
243 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
244 return evaluateBicubicVertical(0.5d, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
245 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
246 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
247 if (px >= tileWidth-0.5d) { // right |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
248 if (py < 0.5d) { // upper right edge |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
249 return rasterData[tileWidth-1]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
250 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
251 if (py > tileHeight-0.5d) { // lower right edge |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
252 return rasterData[rasterData.length-1]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
253 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
254 return evaluateBicubicVertical(tileHeight-0.5d, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
255 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
256 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
257 if (py <= 0.5d) { // top |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
258 return evaluateBicubicHorizonal(0, px); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
259 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
260 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
261 if (py >= tileHeight-0.5d) { // bottom |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
262 return evaluateBicubicHorizonal(tileHeight-1, px); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
263 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
264 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
265 return evaluateBicubicVertical(px, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
266 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
267 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
268 public double getValue(Coordinate coordinate, int interpolationType) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
269 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
270 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
271 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
272 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
273 if (px < 0d || py < 0d || px >= tileWidth || py >= tileHeight) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
274 return Double.NaN; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
275 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
276 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
277 switch (interpolationType) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
278 case BILINEAR: return interpolateBilinear(px, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
279 case BICUBIC : return interpolateBicubic (px, py); |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
280 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
281 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
282 int posX = Math.min(tileWidth-1, (int)Math.round(px)); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
283 int posY = Math.min(tileHeight-1, (int)Math.round(py)); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
284 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
285 return get(posX, posY); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
286 } |
549
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
287 |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
288 public static final int getInterpolationType(String key) { |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
289 if (key == null || (key = key.trim().toLowerCase()).length() == 0) { |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
290 return NEAREST_NEIGHBOR; |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
291 } |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
292 |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
293 if ("bilinear".equals(key)) { |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
294 return BILINEAR; |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
295 } |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
296 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
297 if ("bicubic".equals(key)) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
298 return BICUBIC; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
299 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
300 |
549
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
301 return NEAREST_NEIGHBOR; |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
302 } |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
303 } |