Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 548:ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
geo-backend/trunk@520 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sat, 09 Jan 2010 16:12:10 +0000 |
parents | 23d5cc37dd5b |
children | 0dcf068fb552 |
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 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
11 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
12 import org.apache.log4j.Logger; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
13 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
14 /** |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
15 * @author Tim Englich (tim.englich@intevation.de) |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
16 * @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
|
17 */ |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
18 public class RasterObject |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
19 implements Serializable |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
20 { |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
21 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
|
22 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
23 public static final int NEAREST_NEIGHBOR = 0; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
24 public static final int BILINEAR = 1; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
25 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
26 private double mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
27 private double bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
28 private double my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
29 private double by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
30 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
31 private int columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
32 private int rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
33 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
34 private int tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
35 private int tileHeight; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
36 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
37 private double [] rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
38 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
39 public RasterObject() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
40 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
41 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
42 public RasterObject( |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
43 double mx, double bx, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
44 double my, double by, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
45 int columnIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
46 int rowIndex, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
47 double [] rasterData, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
48 int tileWidth, |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
49 int tileHeight |
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 this.mx = mx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
52 this.bx = bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
53 this.my = my; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
54 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
|
55 this.columnIndex = columnIndex; |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
56 this.rowIndex = rowIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
57 this.rasterData = rasterData; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
58 this.tileWidth = tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
59 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
|
60 } |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
61 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
62 public boolean contains(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
63 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
64 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
65 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
|
66 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
67 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
68 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
|
69 return rasterData[posY*tileWidth + posX]; |
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 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
72 public int getTileWidth() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
73 return tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
74 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
75 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
76 public int getTileHeight() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
77 return tileWidth; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
78 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
79 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
80 public int getColumnIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
81 return columnIndex; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
82 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
83 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
84 public int getRowIndex() { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
85 return rowIndex; |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
86 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
87 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
88 public double getValue(Coordinate coordinate) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
89 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
|
90 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
91 |
548
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
92 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
|
93 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
94 if (px < 0.5d) { // left border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
95 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
|
96 return rasterData[0]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
97 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
98 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
|
99 return rasterData[rasterData.length-tileWidth]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
100 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
101 // center left |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
102 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
103 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
104 i *= tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
105 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
|
106 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
107 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
108 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
|
109 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
|
110 return rasterData[tileWidth-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
111 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
112 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
|
113 return rasterData[rasterData.length-1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
114 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
115 // center right |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
116 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
117 double t = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
118 i = i*tileWidth + tileWidth-1; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
119 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
|
120 } |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
121 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
122 if (py < 0.5d) { // top border |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
123 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
124 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
125 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
|
126 } |
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 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
|
129 int i = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
130 double t = px - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
131 i += rasterData.length-tileWidth; |
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+1]; |
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 // center |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
136 int i = (int)(py -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
137 int j = (int)(px -= 0.5d); |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
138 double ti = py - i; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
139 double tj = px - j; |
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 int idx = i*tileWidth + j; |
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 double v1j1 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
144 double v2j1 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
145 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
146 idx += tileWidth; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
147 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
148 double v1j2 = rasterData[idx]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
149 double v2j2 = rasterData[idx+1]; |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
150 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
151 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
|
152 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
|
153 |
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
154 return (1d-ti)*v1 + ti*v2; |
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 |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
157 public double getValue(Coordinate coordinate, int interpolationType) { |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
158 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
159 double px = mx*coordinate.x + bx; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
160 double py = my*coordinate.y + by; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
161 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
162 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
|
163 return Double.NaN; |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
164 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
165 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
166 if (interpolationType == BILINEAR) { |
548
ccd976fc0f7b
Implemented bilinear interpolation on raster tiles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
547
diff
changeset
|
167 return interpolateBilinear(px, py); |
547
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
168 } |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
169 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
170 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
|
171 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
|
172 |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
173 return get(posX, posY); |
23d5cc37dd5b
Fixed access to raster data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
545
diff
changeset
|
174 } |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
175 } |