Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 879:9bcc423d8d76
Added Support for SpatialQueries using LineString as Geometry of Interest.
geo-backend/trunk@790 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Tim Englich <tim.englich@intevation.de> |
---|---|
date | Tue, 16 Mar 2010 14:07:18 +0000 |
parents | 7615ee5d1345 |
children | 1c3efbd2fc5a |
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 /** |
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 */ |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
4 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
|
5 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
6 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
|
7 |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
8 import java.io.Serializable; |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
9 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
10 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
|
11 |
552
7615ee5d1345
Cleanup imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
550
diff
changeset
|
12 import org.apache.commons.math.analysis.interpolation.SplineInterpolator; |
7615ee5d1345
Cleanup imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
550
diff
changeset
|
13 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
14 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
|
15 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
16 import org.apache.log4j.Logger; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
17 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
18 /** |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
19 * @author Tim Englich (tim.englich@intevation.de) |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
20 * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
21 */ |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
22 public class RasterObject |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
23 implements Serializable |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
24 { |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
25 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
|
26 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
27 public static final int NEAREST_NEIGHBOR = 0; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
28 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
|
29 public static final int BICUBIC = 2; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
30 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
31 private double mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
32 private double bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
33 private double my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
34 private double by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
35 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
36 private int columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
37 private int rowIndex; |
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 int tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
40 private int tileHeight; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
41 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
42 private double [] rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
43 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
44 private transient PolynomialSplineFunction [] splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
45 private transient double [] columns; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
46 |
547
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 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
49 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
50 public RasterObject( |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
51 double mx, double bx, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
52 double my, double by, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
53 int columnIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
54 int rowIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
55 double [] rasterData, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
56 int tileWidth, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
57 int tileHeight |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
58 ){ |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
59 this.mx = mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
60 this.bx = bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
61 this.my = my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
62 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
|
63 this.columnIndex = columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
64 this.rowIndex = rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
65 this.rasterData = rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
66 this.tileWidth = tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
67 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
|
68 } |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
69 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
70 public boolean contains(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
71 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
72 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
73 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
|
74 } |
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 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
|
77 return rasterData[posY*tileWidth + posX]; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
78 } |
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 public int getTileWidth() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
81 return tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
82 } |
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 public int getTileHeight() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
85 return tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
86 } |
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 public int getColumnIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
89 return columnIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
90 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
91 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
92 public int getRowIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
93 return rowIndex; |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
94 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
95 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
96 public double getValue(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
97 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
|
98 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
99 |
548
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
100 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
|
101 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
102 if (px < 0.5d) { // left border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
103 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
|
104 return rasterData[0]; |
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 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
|
107 return rasterData[rasterData.length-tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
108 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
109 // center left |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
110 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
111 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
112 i *= tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
113 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
|
114 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
115 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
116 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
|
117 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
|
118 return rasterData[tileWidth-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 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
|
121 return rasterData[rasterData.length-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
122 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
123 // center right |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
124 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
125 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
126 i = i*tileWidth + tileWidth-1; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
127 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
|
128 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
129 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
130 if (py < 0.5d) { // top border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
131 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
132 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
133 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
|
134 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
135 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
136 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
|
137 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
138 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
139 i += rasterData.length-tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
140 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
|
141 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
142 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
143 // center |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
144 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
145 int j = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
146 double ti = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
147 double tj = px - j; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
148 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
149 int idx = i*tileWidth + j; |
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 double v1j1 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
152 double v2j1 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
153 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
154 idx += tileWidth; |
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 v1j2 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
157 double v2j2 = rasterData[idx+1]; |
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 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
|
160 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
|
161 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
162 return (1d-ti)*v1 + ti*v2; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
163 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
164 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
165 protected PolynomialSplineFunction [] createSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
166 PolynomialSplineFunction [] splines = |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
167 new PolynomialSplineFunction[tileHeight]; |
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 double [] x = new double[tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
170 double [] y = new double[tileWidth]; |
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 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
|
173 x[i] = i + 0.5d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
176 columns = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
177 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
178 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
179 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
180 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
|
181 int row = i*tileWidth; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
182 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
|
183 y[j] = rasterData[row + j]; |
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 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
|
186 columns[i] = i + 0.5d; |
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 return splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
190 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
191 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
192 protected synchronized PolynomialSplineFunction [] getSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
193 if (splines == null) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
194 splines = createSplines(); |
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 return splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
197 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
198 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
199 protected double [] columnValues(double x) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
200 PolynomialSplineFunction [] splines = getSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
201 double [] y = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
202 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
203 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
|
204 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
|
205 } |
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 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
208 log.error(aode.getLocalizedMessage(), aode); |
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 return y; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
211 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
212 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
213 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
|
214 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
215 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
216 double [] cs = columnValues(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
217 PolynomialSplineFunction spline = interpolator.interpolate( |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
218 columns, cs); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
219 return spline.value(y); |
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 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
222 log.error(aode.getLocalizedMessage(), aode); |
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 return 0d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
225 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
226 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
227 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
|
228 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
229 PolynomialSplineFunction spline = getSplines()[index]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
230 return spline.value(x); |
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 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
233 log.error(aode.getLocalizedMessage(), aode); |
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 return 0d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
238 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
|
239 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
240 if (px <= 0.5d) { // left |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
241 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
|
242 return rasterData[0]; |
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 if (py >= tileHeight-0.5d) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
245 return rasterData[rasterData.length-tileWidth]; |
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 return evaluateBicubicVertical(0.5d, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
248 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
249 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
250 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
|
251 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
|
252 return rasterData[tileWidth-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 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
|
255 return rasterData[rasterData.length-1]; |
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 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
|
258 } |
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 if (py <= 0.5d) { // top |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
261 return evaluateBicubicHorizonal(0, px); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
262 } |
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 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
|
265 return evaluateBicubicHorizonal(tileHeight-1, px); |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
268 return evaluateBicubicVertical(px, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
269 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
270 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
271 public double getValue(Coordinate coordinate, int interpolationType) { |
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 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
274 double py = my*coordinate.y + by; |
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 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
|
277 return Double.NaN; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
278 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
279 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
280 switch (interpolationType) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
281 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
|
282 case BICUBIC : return interpolateBicubic (px, py); |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
283 } |
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 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
|
286 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
|
287 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
288 return get(posX, posY); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
289 } |
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
|
290 |
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 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
|
292 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
|
293 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
|
294 } |
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 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
|
297 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
|
298 } |
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
|
299 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
300 if ("bicubic".equals(key)) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
301 return BICUBIC; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
302 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
303 |
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
|
304 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
|
305 } |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
306 } |