Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 550:84ba7cbff791
Added bicubic spline interpolation on raster tiles.
geo-backend/trunk@528 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 12 Jan 2010 00:27:53 +0000 |
parents | 0dcf068fb552 |
children | 7615ee5d1345 |
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 import com.vividsolutions.jts.geom.Envelope; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
8 |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
9 import java.io.Serializable; |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
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.ArgumentOutsideDomainException; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
12 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
13 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
|
14 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
15 import org.apache.commons.math.analysis.interpolation.SplineInterpolator; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
16 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
17 import org.apache.log4j.Logger; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
18 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
19 /** |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
20 * @author Tim Englich (tim.englich@intevation.de) |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
21 * @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
|
22 */ |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
23 public class RasterObject |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
24 implements Serializable |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
25 { |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
26 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
|
27 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
28 public static final int NEAREST_NEIGHBOR = 0; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
29 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
|
30 public static final int BICUBIC = 2; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
31 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
32 private double mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
33 private double bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
34 private double my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
35 private double by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
36 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
37 private int columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
38 private int rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
39 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
40 private int tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
41 private int tileHeight; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
42 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
43 private double [] rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
44 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
45 private transient PolynomialSplineFunction [] splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
46 private transient double [] columns; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
47 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
48 public RasterObject() { |
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 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
51 public RasterObject( |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
52 double mx, double bx, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
53 double my, double by, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
54 int columnIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
55 int rowIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
56 double [] rasterData, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
57 int tileWidth, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
58 int tileHeight |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
59 ){ |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
60 this.mx = mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
61 this.bx = bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
62 this.my = my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
63 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
|
64 this.columnIndex = columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
65 this.rowIndex = rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
66 this.rasterData = rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
67 this.tileWidth = tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
68 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
|
69 } |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
70 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
71 public boolean contains(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
72 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
73 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
74 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
|
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 final double get(int posX, int posY) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
78 return rasterData[posY*tileWidth + posX]; |
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 getTileWidth() { |
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 getTileHeight() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
86 return tileWidth; |
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 getColumnIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
90 return columnIndex; |
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 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
93 public int getRowIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
94 return rowIndex; |
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 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
97 public double getValue(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
98 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
|
99 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
100 |
548
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
101 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
|
102 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
103 if (px < 0.5d) { // left border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
104 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
|
105 return rasterData[0]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
106 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
107 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
|
108 return rasterData[rasterData.length-tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
109 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
110 // center left |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
111 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
112 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
113 i *= tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
114 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
|
115 } |
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 (px > tileWidth-0.5d) { // right border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
118 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
|
119 return rasterData[tileWidth-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
120 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
121 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
|
122 return rasterData[rasterData.length-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
123 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
124 // center right |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
125 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
126 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
127 i = i*tileWidth + tileWidth-1; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
128 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
|
129 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
130 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
131 if (py < 0.5d) { // top border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
132 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
133 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
134 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
|
135 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
136 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
137 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
|
138 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
139 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
140 i += rasterData.length-tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
141 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
|
142 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
143 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
144 // center |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
145 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
146 int j = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
147 double ti = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
148 double tj = px - j; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
149 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
150 int idx = i*tileWidth + j; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
151 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
152 double v1j1 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
153 double v2j1 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
154 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
155 idx += tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
156 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
157 double v1j2 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
158 double v2j2 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
159 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
160 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
|
161 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
|
162 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
163 return (1d-ti)*v1 + ti*v2; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
164 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
165 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
166 protected PolynomialSplineFunction [] createSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
167 PolynomialSplineFunction [] splines = |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
168 new PolynomialSplineFunction[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
169 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
170 double [] x = new double[tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
171 double [] y = new double[tileWidth]; |
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 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
|
174 x[i] = i + 0.5d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
177 columns = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
178 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
179 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
180 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
181 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
|
182 int row = i*tileWidth; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
183 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
|
184 y[j] = rasterData[row + j]; |
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 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
|
187 columns[i] = i + 0.5d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
190 return splines; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
193 protected synchronized PolynomialSplineFunction [] getSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
194 if (splines == null) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
195 splines = createSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
196 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
197 return splines; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
200 protected double [] columnValues(double x) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
201 PolynomialSplineFunction [] splines = getSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
202 double [] y = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
203 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
204 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
|
205 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
|
206 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
207 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
208 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
209 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
210 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
211 return y; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
214 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
|
215 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
216 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
217 double [] cs = columnValues(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
218 PolynomialSplineFunction spline = interpolator.interpolate( |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
219 columns, cs); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
220 return spline.value(y); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
221 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
222 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
223 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
224 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
225 return 0d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
228 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
|
229 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
230 PolynomialSplineFunction spline = getSplines()[index]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
231 return spline.value(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
232 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
233 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
234 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
235 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
236 return 0d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
239 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
|
240 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
241 if (px <= 0.5d) { // left |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
242 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
|
243 return rasterData[0]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
244 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
245 if (py >= tileHeight-0.5d) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
246 return rasterData[rasterData.length-tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
247 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
248 return evaluateBicubicVertical(0.5d, py); |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
251 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
|
252 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
|
253 return rasterData[tileWidth-1]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
254 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
255 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
|
256 return rasterData[rasterData.length-1]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
257 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
258 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
|
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 <= 0.5d) { // top |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
262 return evaluateBicubicHorizonal(0, 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 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
|
266 return evaluateBicubicHorizonal(tileHeight-1, px); |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
269 return evaluateBicubicVertical(px, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
270 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
271 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
272 public double getValue(Coordinate coordinate, int interpolationType) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
273 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
274 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
275 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
276 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
277 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
|
278 return Double.NaN; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
279 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
280 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
281 switch (interpolationType) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
282 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
|
283 case BICUBIC : return interpolateBicubic (px, py); |
547
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 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
286 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
|
287 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
|
288 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
289 return get(posX, posY); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
290 } |
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
|
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 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
|
293 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
|
294 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
|
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 |
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 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
|
298 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
|
299 } |
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
|
300 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
301 if ("bicubic".equals(key)) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
302 return BICUBIC; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
303 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
304 |
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
|
305 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
|
306 } |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
307 } |