/[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 2741 - (hide annotations) (download)
Tue Oct 6 21:26:55 2015 UTC (8 years, 7 months ago) by torben
File size: 3951 byte(s)
streamline osrm variants - and enhance test parameter
1 torben 2711 package dk.daoas.fulddaekning;
2    
3     import java.sql.SQLException;
4     import java.util.Collection;
5     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     import com.jwetherell.algorithms.data_structures.KdTree;
14    
15     import dk.daoas.fulddaekning.osrm.OSRMHelper;
16    
17     public class LookupWorker implements Runnable {
18    
19     static final int MAX_RESULTS = 100;
20    
21    
22    
23     final static Logger logger = Logger.getLogger( LookupWorker.class.toString() );
24    
25     OSRMHelper osrmHelper = new OSRMHelper();
26    
27     CyclicBarrier barrier;
28     Queue<Adresse> ikkeDaekkede;
29     Map<Short, KdTree<Adresse>> hoTrees;
30     Database db;
31     Constants consts;
32    
33     AtomicInteger antalFundne;
34    
35     int workerID;
36     boolean verbose;
37    
38     public LookupWorker(int workerID,
39     CyclicBarrier barrier,
40     Queue<Adresse> ikkeDaekkede,
41     Map<Short, KdTree<Adresse>> hoTrees,
42     AtomicInteger antalFundne,
43     Database db,
44     boolean verbose,
45     Constants consts) {
46    
47     this.workerID = workerID;
48     this.barrier = barrier;
49     this.ikkeDaekkede = ikkeDaekkede;
50     this.hoTrees = hoTrees;
51     this.antalFundne = antalFundne;
52     this.db = db;
53     this.verbose = verbose;
54     this.consts = consts;
55    
56     }
57    
58    
59     @Override
60     public void run() {
61     System.out.println( "Worker/" + workerID + " starting");
62    
63 torben 2722 try {
64     while ( ! ikkeDaekkede.isEmpty() ) {
65 torben 2713
66 torben 2722 Adresse qAdresse = ikkeDaekkede.remove();
67 torben 2711
68 torben 2722 short ho = qAdresse.ho;
69     KdTree<Adresse> addressTree = hoTrees.get(ho);
70 torben 2711
71 torben 2722 Collection<Adresse> res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse);
72     if (res.size() > MAX_RESULTS ) {
73     System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() );
74     System.exit(0);
75     }
76 torben 2711
77    
78 torben 2718 Adresse bedsteAdr = res.iterator().next(); //Tag første element
79 torben 2711 double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
80 torben 2741
81 torben 2718
82     //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen
83     if (bedsteAfstand <= consts.getMaxDistance()) {
84 torben 2741 //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteHttp(qAdresse, res);
85     //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteJni(qAdresse, res);
86     //Adresse bedsteAdr2 = osrmHelper.getNearestTableHttp(qAdresse, res);
87     Adresse bedsteAdr2 = osrmHelper.getNearestTableJni(qAdresse, res);
88 torben 2722
89     if (bedsteAdr2 != null) {
90     bedsteAdr = bedsteAdr2;
91     bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr);
92     } else {
93     logger.info("NearestViaTable returned null for " + qAdresse);
94     }
95 torben 2718 }
96    
97 torben 2711
98 torben 2718
99 torben 2711
100 torben 2718
101 torben 2711 if (bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren
102     if (verbose == true) {
103     logger.fine("(" +workerID + ") Bedste: " + qAdresse + "==>" + bedsteAdr + " ::: " + bedsteAfstand );
104     }
105    
106     antalFundne.incrementAndGet();
107    
108     try {
109     db.gemResultat(qAdresse, bedsteAdr, bedsteAfstand);
110     } catch (SQLException e) {
111     logger.log(Level.WARNING, "Error saving result", e);
112     logger.warning("Shutting down");
113    
114     System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme
115     }
116     } else {
117     if (verbose == true) {
118     System.out.println("For stor afstand: " + qAdresse + " > " + bedsteAfstand);
119     }
120     }
121    
122 torben 2722 }
123    
124     } catch (Exception e) {
125     logger.log( Level.SEVERE, "Worker/" + workerID, e);
126 torben 2711 }
127    
128 torben 2722
129    
130 torben 2711 try {
131 torben 2722 logger.info( "Worker/" + workerID + " afventer barrier");
132 torben 2711 barrier.await();
133     } catch (BrokenBarrierException e) {
134     logger.log(Level.SEVERE, e.getMessage(), e);
135     System.exit(-1);
136     } catch(InterruptedException e) {
137 torben 2719 logger.log(Level.SEVERE, e.getMessage(), e);
138 torben 2711 }
139    
140    
141     System.out.println( "Worker/" + workerID + " stopping");
142     }
143    
144     }

  ViewVC Help
Powered by ViewVC 1.1.20