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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java revision 2718 by torben, Mon Sep 28 11:09:33 2015 UTC dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java revision 2797 by torben, Tue Dec 29 13:11:20 2015 UTC
# Line 1  Line 1 
1  package dk.daoas.fulddaekning;  package dk.daoas.fulddaekning;
2    
3  import java.sql.SQLException;  import java.sql.SQLException;
4  import java.util.Collection;  import java.util.ArrayList;
5  import java.util.Map;  import java.util.Map;
6  import java.util.Queue;  import java.util.Queue;
7  import java.util.concurrent.BrokenBarrierException;  import java.util.concurrent.BrokenBarrierException;
# Line 10  import java.util.concurrent.atomic.Atomi Line 10  import java.util.concurrent.atomic.Atomi
10  import java.util.logging.Level;  import java.util.logging.Level;
11  import java.util.logging.Logger;  import java.util.logging.Logger;
12    
13  import com.jwetherell.algorithms.data_structures.KdTree;  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  import dk.daoas.fulddaekning.osrm.OSRMHelper;  import dk.daoas.fulddaekning.osrm.OSRMHelper;
18    
19  public class LookupWorker implements Runnable {  public class LookupWorker implements Runnable {
20    
21          static final int MAX_RESULTS = 100;          static final int MAX_RESULTS = 99;
22    
23    
24    
# Line 29  public class LookupWorker implements Run Line 31  public class LookupWorker implements Run
31          Map<Short, KdTree<Adresse>> hoTrees;          Map<Short, KdTree<Adresse>> hoTrees;
32          Database db;          Database db;
33          Constants consts;          Constants consts;
34            ProgressBar progressBar;
35                    
36          AtomicInteger antalFundne;          AtomicInteger antalFundne;
37    
38          int workerID;          int workerID;
39          boolean verbose;          boolean verbose;
40                    
41            DistanceFunction dist = new SquareEuclideanDistanceFunction();
42            
43          public LookupWorker(int workerID,          public LookupWorker(int workerID,
44                                  CyclicBarrier barrier,                                  CyclicBarrier barrier,
45                                  Queue<Adresse> ikkeDaekkede,                                  Queue<Adresse> ikkeDaekkede,
# Line 42  public class LookupWorker implements Run Line 47  public class LookupWorker implements Run
47                                  AtomicInteger antalFundne,                                  AtomicInteger antalFundne,
48                                  Database db,                                  Database db,
49                                  boolean verbose,                                  boolean verbose,
50                                  Constants consts) {                                  Constants consts,
51                                    ProgressBar progressBar) {
52                                    
53                  this.workerID = workerID;                  this.workerID = workerID;
54                  this.barrier = barrier;                  this.barrier = barrier;
# Line 52  public class LookupWorker implements Run Line 58  public class LookupWorker implements Run
58                  this.db = db;                  this.db = db;
59                  this.verbose = verbose;                  this.verbose = verbose;
60                  this.consts = consts;                  this.consts = consts;
61                    this.progressBar = progressBar;
62                                    
63          }          }
64    
# Line 60  public class LookupWorker implements Run Line 67  public class LookupWorker implements Run
67          public void run() {          public void run() {
68                  System.out.println( "Worker/" + workerID + " starting");                  System.out.println( "Worker/" + workerID + " starting");
69    
70                  while ( ! ikkeDaekkede.isEmpty() ) {                  try {
71                            while ( ! ikkeDaekkede.isEmpty() ) {
72                                                    
73                          Adresse qAdresse = ikkeDaekkede.remove();                                  Adresse qAdresse = ikkeDaekkede.remove();
74    
75                          short ho = qAdresse.ho;                                  short ho = qAdresse.ho;
76                          KdTree<Adresse> addressTree = hoTrees.get(ho);                                  KdTree<Adresse> addressTree = hoTrees.get(ho);
77    
78                          Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);                                  MaxHeap<Adresse> res = addressTree.findNearestNeighbors(qAdresse.xyz, MAX_RESULTS, dist);
79                          if (res.size() > MAX_RESULTS ) {                                  //Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);
80                                  System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );                                  int size = res.size();
81                                  System.exit(0);                                  if (size > MAX_RESULTS ) {
82                          }                                          System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );
83                                            System.exit(0);
84                                    }
85                                    
86                                    ArrayList<Adresse> adrList = new ArrayList<Adresse>();
87    
88                                    for (int i=0; i<size; i++) {
89                                            Adresse a = res.getMax();
90                                            adrList.add(a);
91                                            res.removeMax();
92                                    }
93                                    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
94                                    double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
95    
96                          Adresse bedsteAdr = res.iterator().next(); //Tag første element  
97                          double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);                          if ( LookupMain.use_osrm == true) {
98                                                            //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen
99                          //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen                                  if (bedsteAfstand <= consts.getMaxDistance()) {
100                          if (bedsteAfstand <= consts.getMaxDistance()) {                                          //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteHttp(qAdresse, res);  
101                                  bedsteAdr = osrmHelper.getNearestViaTable(qAdresse, res);                                          Adresse bedsteAdr2 = osrmHelper.getNearestTableHttp(qAdresse, adrList);
102                                  bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);    
103                                            if (bedsteAdr2 != null) {
104                                                    bedsteAdr = bedsteAdr2;
105                                                    bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
106                                            } else {
107                                                    logger.info("OSRM returned null for " + qAdresse);
108                                            }
109                                    }
110                          }                          }
111                            
112    
113                                                    
114    
# Line 107  public class LookupWorker implements Run Line 133  public class LookupWorker implements Run
133                                          System.out.println("For stor afstand: " + qAdresse + " > " + bedsteAfstand);                                          System.out.println("For stor afstand: " + qAdresse + " > " + bedsteAfstand);
134                                  }                                  }
135                          }                          }
136                    
137                            progressBar.tick();
138    
139                            }
140    
141                    } catch (Exception e) {
142                            logger.log( Level.SEVERE, "Worker/" + workerID, e);
143                  }                  }
144    
145    
146    
147                  try {                  try {
148                            logger.info( "Worker/" + workerID + " afventer barrier");
149                          barrier.await();                          barrier.await();
150                  } catch (BrokenBarrierException e) {                  } catch (BrokenBarrierException e) {
151                          logger.log(Level.SEVERE, e.getMessage(), e);                          logger.log(Level.SEVERE, e.getMessage(), e);
152                          System.exit(-1);                          System.exit(-1);
153                  } catch(InterruptedException e) {                  } catch(InterruptedException e) {
154                          //Do nothing                          logger.log(Level.SEVERE, e.getMessage(), e);
155                  }                  }
156    
157    

Legend:
Removed from v.2718  
changed lines
  Added in v.2797

  ViewVC Help
Powered by ViewVC 1.1.20