Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 1127:ebeb56428409
Added license headers and license file.
geo-backend/trunk@1261 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 02 Nov 2010 17:52:22 +0000 |
parents | b757def3ff55 |
children |
rev | line source |
---|---|
1127
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
1 /* |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
2 * Copyright (c) 2010 by Intevation GmbH |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
3 * |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
4 * This program is free software under the LGPL (>=v2.1) |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
5 * Read the file LGPL.txt coming with the software for details |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
6 * or visit http://www.gnu.org/licenses/ if it does not exist. |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
7 */ |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
887
diff
changeset
|
8 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
9 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
|
10 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
11 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
|
12 |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
13 import java.io.Serializable; |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
14 |
550
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.ArgumentOutsideDomainException; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
16 |
552
7615ee5d1345
Cleanup imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
550
diff
changeset
|
17 import org.apache.commons.math.analysis.interpolation.SplineInterpolator; |
7615ee5d1345
Cleanup imports
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
550
diff
changeset
|
18 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
19 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
|
20 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
21 import org.apache.log4j.Logger; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
22 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
23 /** |
887
b757def3ff55
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
886
diff
changeset
|
24 * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> |
b757def3ff55
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
886
diff
changeset
|
25 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
26 */ |
885
1c3efbd2fc5a
Removes trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
552
diff
changeset
|
27 public class RasterObject |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
28 implements Serializable |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
29 { |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
30 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
|
31 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
32 public static final int NEAREST_NEIGHBOR = 0; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
33 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
|
34 public static final int BICUBIC = 2; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
35 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
36 private double mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
37 private double bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
38 private double my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
39 private double by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
40 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
41 private int columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
42 private int rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
43 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
44 private int tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
45 private int tileHeight; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
46 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
47 private double [] rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
48 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
49 private transient PolynomialSplineFunction [] splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
50 private transient double [] columns; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
51 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
52 public RasterObject() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
53 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
54 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
55 public RasterObject( |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
56 double mx, double bx, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
57 double my, double by, |
885
1c3efbd2fc5a
Removes trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
552
diff
changeset
|
58 int columnIndex, |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
59 int rowIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
60 double [] rasterData, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
61 int tileWidth, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
62 int tileHeight |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
63 ){ |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
64 this.mx = mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
65 this.bx = bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
66 this.my = my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
67 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
|
68 this.columnIndex = columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
69 this.rowIndex = rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
70 this.rasterData = rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
71 this.tileWidth = tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
72 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
|
73 } |
547
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 public boolean contains(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
76 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
77 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
78 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
|
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 final double get(int posX, int posY) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
82 return rasterData[posY*tileWidth + posX]; |
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 getTileWidth() { |
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 getTileHeight() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
90 return tileWidth; |
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 getColumnIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
94 return columnIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
95 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
96 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
97 public int getRowIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
98 return rowIndex; |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
99 } |
885
1c3efbd2fc5a
Removes trailing whitespace.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
552
diff
changeset
|
100 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
101 public double getValue(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
102 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
|
103 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
104 |
548
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
105 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
|
106 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
107 if (px < 0.5d) { // left border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
108 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
|
109 return rasterData[0]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
110 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
111 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
|
112 return rasterData[rasterData.length-tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
113 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
114 // center left |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
115 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
116 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
117 i *= tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
118 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
|
119 } |
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 (px > tileWidth-0.5d) { // right border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
122 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
|
123 return rasterData[tileWidth-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
124 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
125 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
|
126 return rasterData[rasterData.length-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
127 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
128 // center right |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
129 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
130 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
131 i = i*tileWidth + tileWidth-1; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
132 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
|
133 } |
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 if (py < 0.5d) { // top border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
136 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
137 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
138 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
|
139 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
140 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
141 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
|
142 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
143 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
144 i += rasterData.length-tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
145 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
|
146 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
147 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
148 // center |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
149 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
150 int j = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
151 double ti = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
152 double tj = px - j; |
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 int idx = i*tileWidth + j; |
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 v1j1 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
157 double v2j1 = 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 idx += tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
160 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
161 double v1j2 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
162 double v2j2 = rasterData[idx+1]; |
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 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
|
165 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
|
166 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
167 return (1d-ti)*v1 + ti*v2; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
168 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
169 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
170 protected PolynomialSplineFunction [] createSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
171 PolynomialSplineFunction [] splines = |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
172 new PolynomialSplineFunction[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
173 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
174 double [] x = new double[tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
175 double [] y = new double[tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
176 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
177 for (int i = 0; i < tileWidth; ++i) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
178 x[i] = i + 0.5d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
181 columns = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
182 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
183 SplineInterpolator interpolator = new SplineInterpolator(); |
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 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
|
186 int row = i*tileWidth; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
187 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
|
188 y[j] = rasterData[row + j]; |
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 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
|
191 columns[i] = i + 0.5d; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
194 return splines; |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
197 protected synchronized PolynomialSplineFunction [] getSplines() { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
198 if (splines == null) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
199 splines = createSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
200 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
201 return splines; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
202 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
203 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
204 protected double [] columnValues(double x) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
205 PolynomialSplineFunction [] splines = getSplines(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
206 double [] y = new double[tileHeight]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
207 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
208 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
|
209 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
|
210 } |
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 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
213 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
214 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
215 return y; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
216 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
217 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
218 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
|
219 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
220 SplineInterpolator interpolator = new SplineInterpolator(); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
221 double [] cs = columnValues(x); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
222 PolynomialSplineFunction spline = interpolator.interpolate( |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
223 columns, cs); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
224 return spline.value(y); |
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 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
227 log.error(aode.getLocalizedMessage(), aode); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
228 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
229 return 0d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
230 } |
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 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
|
233 try { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
234 PolynomialSplineFunction spline = getSplines()[index]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
235 return spline.value(x); |
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 catch (ArgumentOutsideDomainException aode) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
238 log.error(aode.getLocalizedMessage(), aode); |
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 return 0d; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
241 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
242 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
243 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
|
244 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
245 if (px <= 0.5d) { // left |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
246 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
|
247 return rasterData[0]; |
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 if (py >= tileHeight-0.5d) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
250 return rasterData[rasterData.length-tileWidth]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
251 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
252 return evaluateBicubicVertical(0.5d, py); |
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 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
255 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
|
256 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
|
257 return rasterData[tileWidth-1]; |
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 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
|
260 return rasterData[rasterData.length-1]; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
261 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
262 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
|
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 <= 0.5d) { // top |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
266 return evaluateBicubicHorizonal(0, 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 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
|
270 return evaluateBicubicHorizonal(tileHeight-1, px); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
271 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
272 |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
273 return evaluateBicubicVertical(px, py); |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
274 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
275 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
276 public double getValue(Coordinate coordinate, int interpolationType) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
277 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
278 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
279 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
280 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
281 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
|
282 return Double.NaN; |
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 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
285 switch (interpolationType) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
286 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
|
287 case BICUBIC : return interpolateBicubic (px, py); |
547
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 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
290 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
|
291 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
|
292 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
293 return get(posX, posY); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
294 } |
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
|
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 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
|
297 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
|
298 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
|
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 |
0dcf068fb552
Added method to figure out interpolation method for a given string in raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
548
diff
changeset
|
301 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
|
302 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
|
303 } |
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 |
550
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
305 if ("bicubic".equals(key)) { |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
306 return BICUBIC; |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
307 } |
84ba7cbff791
Added bicubic spline interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
549
diff
changeset
|
308 |
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
|
309 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
|
310 } |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
311 } |