/[projects]/dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java
ViewVC logotype

Annotation of /dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2745 - (hide annotations) (download)
Wed Oct 7 19:35:24 2015 UTC (8 years, 7 months ago) by torben
File size: 4604 byte(s)
Remove debug output
1 torben 2711 package dk.daoas.fulddaekning;
2    
3     import java.sql.SQLException;
4 torben 2744 import java.util.ArrayList;
5 torben 2711 import java.util.Map;
6     import java.util.Queue;
7     import java.util.concurrent.BrokenBarrierException;
8     import java.util.concurrent.CyclicBarrier;
9     import java.util.concurrent.atomic.AtomicInteger;
10     import java.util.logging.Level;
11     import java.util.logging.Logger;
12    
13 torben 2744 import ags.utils.dataStructures.MaxHeap;
14     import ags.utils.dataStructures.trees.thirdGenKD.DistanceFunction;
15     import ags.utils.dataStructures.trees.thirdGenKD.KdTree;
16     import ags.utils.dataStructures.trees.thirdGenKD.SquareEuclideanDistanceFunction;
17 torben 2711 import dk.daoas.fulddaekning.osrm.OSRMHelper;
18    
19     public class LookupWorker implements Runnable {
20    
21     static final int MAX_RESULTS = 100;
22    
23    
24    
25     final static Logger logger = Logger.getLogger( LookupWorker.class.toString() );
26    
27     OSRMHelper osrmHelper = new OSRMHelper();
28    
29     CyclicBarrier barrier;
30     Queue<Adresse> ikkeDaekkede;
31     Map<Short, KdTree<Adresse>> hoTrees;
32     Database db;
33     Constants consts;
34    
35     AtomicInteger antalFundne;
36    
37     int workerID;
38     boolean verbose;
39    
40 torben 2744 DistanceFunction dist = new SquareEuclideanDistanceFunction();
41    
42 torben 2711 public LookupWorker(int workerID,
43     CyclicBarrier barrier,
44     Queue<Adresse> ikkeDaekkede,
45     Map<Short, KdTree<Adresse>> hoTrees,
46     AtomicInteger antalFundne,
47     Database db,
48     boolean verbose,
49     Constants consts) {
50    
51     this.workerID = workerID;
52     this.barrier = barrier;
53     this.ikkeDaekkede = ikkeDaekkede;
54     this.hoTrees = hoTrees;
55     this.antalFundne = antalFundne;
56     this.db = db;
57     this.verbose = verbose;
58     this.consts = consts;
59    
60     }
61    
62    
63     @Override
64     public void run() {
65     System.out.println( "Worker/" + workerID + " starting");
66    
67 torben 2722 try {
68     while ( ! ikkeDaekkede.isEmpty() ) {
69 torben 2713
70 torben 2722 Adresse qAdresse = ikkeDaekkede.remove();
71 torben 2711
72 torben 2722 short ho = qAdresse.ho;
73     KdTree<Adresse> addressTree = hoTrees.get(ho);
74 torben 2711
75 torben 2744 MaxHeap<Adresse> res = addressTree.findNearestNeighbors(qAdresse.xyz, MAX_RESULTS, dist);
76     //Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);
77     int size = res.size();
78     if (size > MAX_RESULTS ) {
79 torben 2722 System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );
80     System.exit(0);
81     }
82 torben 2744
83     ArrayList<Adresse> adrList = new ArrayList<Adresse>();
84 torben 2711
85 torben 2744 for (int i=0; i<size; i++) {
86     Adresse a = res.getMax();
87     adrList.add(a);
88     res.removeMax();
89     }
90     Adresse bedsteAdr = adrList.get(size-1); //da det er en max-heap er det elementet med størst distance der er først og dermed den sidste der er tættest
91     double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
92 torben 2711
93 torben 2744 /*
94 torben 2718 //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen
95     if (bedsteAfstand <= consts.getMaxDistance()) {
96 torben 2741 //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteHttp(qAdresse, res);
97     //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteJni(qAdresse, res);
98 torben 2744 Adresse bedsteAdr2 = osrmHelper.getNearestTableHttp(qAdresse, res);
99     //Adresse bedsteAdr2 = osrmHelper.getNearestTableJni(qAdresse, res);
100 torben 2722
101     if (bedsteAdr2 != null) {
102     bedsteAdr = bedsteAdr2;
103     bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
104     } else {
105     logger.info("NearestViaTable returned null for " + qAdresse);
106     }
107 torben 2718 }
108 torben 2744 */
109 torben 2711
110 torben 2718
111 torben 2711
112 torben 2718
113 torben 2711 if (bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
114     if (verbose == true) {
115     logger.fine("(" +workerID + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );
116     }
117    
118     antalFundne.incrementAndGet();
119    
120     try {
121     db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);
122     } catch (SQLException e) {
123     logger.log(Level.WARNING, "Error saving result", e);
124     logger.warning("Shutting down");
125    
126     System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
127     }
128     } else {
129     if (verbose == true) {
130     System.out.println("For stor afstand: " + qAdresse + " > " + bedsteAfstand);
131     }
132     }
133    
134 torben 2722 }
135    
136     } catch (Exception e) {
137     logger.log( Level.SEVERE, "Worker/" + workerID, e);
138 torben 2711 }
139    
140 torben 2722
141    
142 torben 2711 try {
143 torben 2722 logger.info( "Worker/" + workerID + " afventer barrier");
144 torben 2711 barrier.await();
145     } catch (BrokenBarrierException e) {
146     logger.log(Level.SEVERE, e.getMessage(), e);
147     System.exit(-1);
148     } catch(InterruptedException e) {
149 torben 2719 logger.log(Level.SEVERE, e.getMessage(), e);
150 torben 2711 }
151    
152    
153     System.out.println( "Worker/" + workerID + " stopping");
154     }
155    
156     }

  ViewVC Help
Powered by ViewVC 1.1.20