comparison gnv-artifacts/src/main/java/de/intevation/gnv/math/QueriedXYDepth.java @ 457:47ad9721e692

Added RasterObject for caching the Rastertiles to get a better performance. gnv-artifacts/trunk@509 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Tue, 05 Jan 2010 14:12:03 +0000
parents 363236fc462d
children 92d6cf448598
comparison
equal deleted inserted replaced
456:b8080695ea62 457:47ad9721e692
1 /** 1 /**
2 * 2 *
3 */ 3 */
4 package de.intevation.gnv.math; 4 package de.intevation.gnv.math;
5 5
6 import java.util.ArrayList;
6 import java.util.Collection; 7 import java.util.Collection;
8 import java.util.HashMap;
7 9
8 import org.apache.log4j.Logger; 10 import org.apache.log4j.Logger;
9 11
10 import com.vividsolutions.jts.geom.Coordinate; 12 import com.vividsolutions.jts.geom.Coordinate;
11 13
12 import de.intevation.gnv.geobackend.base.Result; 14 import de.intevation.gnv.geobackend.base.Result;
13 import de.intevation.gnv.geobackend.base.query.QueryExecutor; 15 import de.intevation.gnv.geobackend.base.query.QueryExecutor;
14 import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; 16 import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory;
15 import de.intevation.gnv.geobackend.base.query.exception.QueryException; 17 import de.intevation.gnv.geobackend.base.query.exception.QueryException;
18 import de.intevation.gnv.geobackend.sde.datasources.RasterObject;
16 19
17 20
18 /** 21 /**
19 * @author Tim Englich <tim.englich@intevation.de> 22 * @author Tim Englich <tim.englich@intevation.de>
20 * 23 *
28 31
29 private String queryID = "rasterQuery"; 32 private String queryID = "rasterQuery";
30 33
31 private QueryExecutor queryExecutor = null; 34 private QueryExecutor queryExecutor = null;
32 35
36 private ArrayList<RasterObject> rasterData = new ArrayList<RasterObject>();
37
33 /** 38 /**
34 * Constructor 39 * Constructor
35 */ 40 */
36 public QueriedXYDepth() { 41 public QueriedXYDepth() {
37 this.queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor(); 42 this.queryExecutor = QueryExecutorFactory.getInstance().getQueryExecutor();
40 /** 45 /**
41 * @see de.intevation.gnv.math.XYDepth#depth(com.vividsolutions.jts.geom.Coordinate) 46 * @see de.intevation.gnv.math.XYDepth#depth(com.vividsolutions.jts.geom.Coordinate)
42 */ 47 */
43 public double depth(Coordinate coordinate) { 48 public double depth(Coordinate coordinate) {
44 log.debug("QueriedXYDepth.depth for " + coordinate.x+" "+ coordinate.y); 49 log.debug("QueriedXYDepth.depth for " + coordinate.x+" "+ coordinate.y);
45 double resultValue = 0; 50 double resultValue = Double.NaN;
46 Collection<Result> result = null; 51
47 try { 52 RasterObject ro = this.getRasterObject(coordinate);
48 String[] filterValues = new String[]{"Point ("+coordinate.x+" "+coordinate.y+")"}; 53
49 result = this.queryExecutor.executeQuery(this.queryID,filterValues); 54 if (ro == null){
50 } catch (QueryException e) { 55 Collection<Result> result = null;
51 log.error(e,e); 56 try {
57 String[] filterValues = new String[]{"Point ("+coordinate.x+" "+coordinate.y+")"};
58 result = this.queryExecutor.executeQuery(this.queryID,filterValues);
59 } catch (QueryException e) {
60 log.error(e,e);
61 }
62
63 if (result != null){
64 if (!result.isEmpty()){
65 Result row = result.iterator().next();
66 ro = (RasterObject)row.getObject(0);
67 synchronized (rasterData) {
68 rasterData.add(ro);
69 }
70 }
71 }
52 } 72 }
53 73 if (ro != null){
54 if (result != null){ 74 resultValue = ro.getValue(coordinate);
55 if (!result.isEmpty()){
56 Result row = result.iterator().next();
57 resultValue = row.getDouble(0);
58 }else{
59 resultValue = Double.NaN;
60 }
61 }else{
62 resultValue = Double.NaN;
63 } 75 }
64 return resultValue; 76 return resultValue;
65 } 77 }
78
79 private RasterObject getRasterObject(Coordinate coordinate){
80 for (int i = 0; i < rasterData.size(); i++){
81 RasterObject ro = rasterData.get(i);
82 if (ro.getEnvelope().contains(coordinate)){
83 return ro;
84 }
85 }
86 return null;
87
88 }
66 89
67 } 90 }

http://dive4elements.wald.intevation.org