/[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 2755 by torben, Tue Oct 20 10:36:06 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 35  public class LookupWorker implements Run Line 37  public class LookupWorker implements Run
37          int workerID;          int workerID;
38          boolean verbose;          boolean verbose;
39                    
40            DistanceFunction dist = new SquareEuclideanDistanceFunction();
41            
42          public LookupWorker(int workerID,          public LookupWorker(int workerID,
43                                  CyclicBarrier barrier,                                  CyclicBarrier barrier,
44                                  Queue<Adresse> ikkeDaekkede,                                  Queue<Adresse> ikkeDaekkede,
# Line 60  public class LookupWorker implements Run Line 64  public class LookupWorker implements Run
64          public void run() {          public void run() {
65                  System.out.println( "Worker/" + workerID + " starting");                  System.out.println( "Worker/" + workerID + " starting");
66    
67                  while ( ! ikkeDaekkede.isEmpty() ) {                  try {
68                            while ( ! ikkeDaekkede.isEmpty() ) {
69                                                    
70                          Adresse qAdresse = ikkeDaekkede.remove();                                  Adresse qAdresse = ikkeDaekkede.remove();
71    
72                          short ho = qAdresse.ho;                                  short ho = qAdresse.ho;
73                          KdTree<Adresse> addressTree = hoTrees.get(ho);                                  KdTree<Adresse> addressTree = hoTrees.get(ho);
74    
75                          Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);                                  MaxHeap<Adresse> res = addressTree.findNearestNeighbors(qAdresse.xyz, MAX_RESULTS, dist);
76                          if (res.size() > MAX_RESULTS ) {                                  //Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);
77                                  System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );                                  int size = res.size();
78                                  System.exit(0);                                  if (size > MAX_RESULTS ) {
79                          }                                          System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );
80                                            System.exit(0);
81                                    }
82                                    
83                                    ArrayList<Adresse> adrList = new ArrayList<Adresse>();
84    
85                                    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    
93    
94                          Adresse bedsteAdr = res.iterator().next(); //Tag første element                          if ( LookupMain.use_osrm == true) {
95                          double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);                                  //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen
96                                                            if (bedsteAfstand <= consts.getMaxDistance()) {
97                          //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen                                          //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteHttp(qAdresse, res);
98                          if (bedsteAfstand <= consts.getMaxDistance()) {                                          //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteJni(qAdresse, res);
99                                  bedsteAdr = osrmHelper.getNearestViaTable(qAdresse, res);                                          Adresse bedsteAdr2 = osrmHelper.getNearestTableHttp(qAdresse, adrList);
100                                  bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);                                          //Adresse bedsteAdr2 = osrmHelper.getNearestTableJni(qAdresse, res);
101    
102                                            if (bedsteAdr2 != null) {
103                                                    bedsteAdr = bedsteAdr2;
104                                                    bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
105                                            } else {
106                                                    logger.info("OSRM returned null for " + qAdresse);
107                                            }
108                                    }
109                          }                          }
110                            
111    
112                                                    
113    
# Line 108  public class LookupWorker implements Run Line 133  public class LookupWorker implements Run
133                                  }                                  }
134                          }                          }
135    
136                            }
137    
138                    } catch (Exception e) {
139                            logger.log( Level.SEVERE, "Worker/" + workerID, e);
140                  }                  }
141    
142    
143    
144                  try {                  try {
145                            logger.info( "Worker/" + workerID + " afventer barrier");
146                          barrier.await();                          barrier.await();
147                  } catch (BrokenBarrierException e) {                  } catch (BrokenBarrierException e) {
148                          logger.log(Level.SEVERE, e.getMessage(), e);                          logger.log(Level.SEVERE, e.getMessage(), e);
149                          System.exit(-1);                          System.exit(-1);
150                  } catch(InterruptedException e) {                  } catch(InterruptedException e) {
151                          //Do nothing                          logger.log(Level.SEVERE, e.getMessage(), e);
152                  }                  }
153    
154    

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

  ViewVC Help
Powered by ViewVC 1.1.20