Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 545:347c84467478
Made RasterObject serializable to be cachable beyond reboot.
geo-backend/trunk@510 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 05 Jan 2010 15:08:01 +0000 |
parents | 33f93898cbbf |
children | 23d5cc37dd5b |
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 |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
11 /** |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
12 * @author Tim Englich <tim.englich@intevation.de> |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
13 * |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
14 */ |
545
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
15 public class RasterObject |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
16 implements Serializable |
347c84467478
Made RasterObject serializable to be cachable beyond reboot.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
544
diff
changeset
|
17 { |
544
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
18 private int rasterSize; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
19 private int rowIndex; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
20 private int columnIndex; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
21 private int rasterWidth; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
22 private int rasterHeight; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
23 private Envelope envelope = null; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
24 private Envelope rasterEnvelope = null; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
25 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
26 private double[] rasterData = null; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
27 /** |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
28 * Constructor |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
29 */ |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
30 public RasterObject(Envelope envelope , double[] rasterData, |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
31 int rasterSize, int rowIndex, |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
32 int columnIndex, int rasterWidth, int rasterHeight ){ |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
33 this.envelope = envelope; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
34 this.rasterData = rasterData; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
35 this.rasterSize = rasterSize; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
36 this.rowIndex = rowIndex; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
37 this.columnIndex = columnIndex; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
38 this.rasterHeight = rasterHeight; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
39 this.rasterWidth = rasterWidth; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
40 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
41 public synchronized Envelope getEnvelope() { |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
42 if (this.rasterEnvelope == null){ |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
43 double minX = (columnIndex* rasterSize * |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
44 (envelope.getWidth() / rasterWidth)+ envelope.getMinX()); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
45 double maxX = minX + (rasterSize * (envelope.getWidth() / rasterWidth)); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
46 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
47 double maxY = envelope.getMaxY() - |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
48 (rowIndex * rasterSize * |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
49 (envelope.getHeight() / rasterHeight)); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
50 double minY = maxY - |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
51 (rasterSize * (envelope.getHeight() / rasterHeight)); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
52 this.rasterEnvelope = new Envelope( |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
53 new Coordinate(minX, minY), |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
54 new Coordinate(maxX, maxY)); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
55 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
56 return this.rasterEnvelope; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
57 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
58 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
59 public synchronized double getValue(Coordinate coordinate){ |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
60 double dxNature = coordinate.x - envelope.getMinX(); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
61 double dyNature = envelope.getMaxY() - coordinate.y; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
62 double widthNature = envelope.getMaxX()-envelope.getMinX(); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
63 double heightNature = envelope.getMaxY()-envelope.getMinY(); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
64 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
65 int pixelX = (int)Math.round(dxNature * rasterWidth / widthNature); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
66 int pixelY = (int)Math.round(dyNature * rasterHeight/ heightNature); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
67 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
68 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
69 int localPixelX = pixelX - (columnIndex*rasterSize); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
70 int localPixelY = pixelY - (rowIndex*rasterSize); |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
71 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
72 int pos = localPixelY * rasterSize + localPixelX; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
73 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
74 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
75 if (pos < rasterData.length){ |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
76 return this.rasterData[pos]; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
77 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
78 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
79 return Double.NaN; |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
80 } |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
81 |
33f93898cbbf
Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff
changeset
|
82 } |