annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java @ 544:33f93898cbbf

Added RasterObject for caching the Rastertiles to get a better performance geo-backend/trunk@508 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 05 Jan 2010 14:09:53 +0000
parents
children 347c84467478
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
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
9 /**
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
10 * @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
11 *
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
12 */
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
13 public class RasterObject {
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
14
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
15 private int rasterSize;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
16 private int rowIndex;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
17 private int columnIndex;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
18 private int rasterWidth;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
19 private int rasterHeight;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
20 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
21 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
22
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
23 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
24 /**
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
25 * Constructor
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
26 */
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
27 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
28 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
29 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
30 this.envelope = envelope;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
31 this.rasterData = rasterData;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
32 this.rasterSize = rasterSize;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
33 this.rowIndex = rowIndex;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
34 this.columnIndex = columnIndex;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
35 this.rasterHeight = rasterHeight;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
36 this.rasterWidth = rasterWidth;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
37 }
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
38 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
39 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
40 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
41 (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
42 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
43
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
44 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
45 (rowIndex * rasterSize *
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
46 (envelope.getHeight() / rasterHeight));
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
47 double minY = maxY -
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
48 (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
49 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
50 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
51 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
52 }
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
53 return this.rasterEnvelope;
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
54 }
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 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
57 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
58 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
59 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
60 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
61
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
62 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
63 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
64
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
65
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
66 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
67 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
68
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
69 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
70
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 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
73 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
74 }
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
75
33f93898cbbf Added RasterObject for caching the Rastertiles to get a better performance
Tim Englich <tim.englich@intevation.de>
parents:
diff changeset
76 return Double.NaN;
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 }

http://dive4elements.wald.intevation.org