--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupWorker.java 2015/09/28 11:09:33 2718 +++ dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java 2015/10/20 10:36:06 2755 @@ -1,7 +1,7 @@ package dk.daoas.fulddaekning; import java.sql.SQLException; -import java.util.Collection; +import java.util.ArrayList; import java.util.Map; import java.util.Queue; import java.util.concurrent.BrokenBarrierException; @@ -10,13 +10,15 @@ import java.util.logging.Level; import java.util.logging.Logger; -import com.jwetherell.algorithms.data_structures.KdTree; - +import ags.utils.dataStructures.MaxHeap; +import ags.utils.dataStructures.trees.thirdGenKD.DistanceFunction; +import ags.utils.dataStructures.trees.thirdGenKD.KdTree; +import ags.utils.dataStructures.trees.thirdGenKD.SquareEuclideanDistanceFunction; import dk.daoas.fulddaekning.osrm.OSRMHelper; public class LookupWorker implements Runnable { - static final int MAX_RESULTS = 100; + static final int MAX_RESULTS = 99; @@ -35,6 +37,8 @@ int workerID; boolean verbose; + DistanceFunction dist = new SquareEuclideanDistanceFunction(); + public LookupWorker(int workerID, CyclicBarrier barrier, Queue ikkeDaekkede, @@ -60,29 +64,50 @@ public void run() { System.out.println( "Worker/" + workerID + " starting"); - while ( ! ikkeDaekkede.isEmpty() ) { + try { + while ( ! ikkeDaekkede.isEmpty() ) { - Adresse qAdresse = ikkeDaekkede.remove(); + Adresse qAdresse = ikkeDaekkede.remove(); - short ho = qAdresse.ho; - KdTree addressTree = hoTrees.get(ho); + short ho = qAdresse.ho; + KdTree addressTree = hoTrees.get(ho); - Collection res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse); - if (res.size() > MAX_RESULTS ) { - System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() ); - System.exit(0); - } + MaxHeap res = addressTree.findNearestNeighbors(qAdresse.xyz, MAX_RESULTS, dist); + //Collection res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse); + int size = res.size(); + if (size > MAX_RESULTS ) { + System.out.println("Returnerede mere end MAX_RESULTS> " + res.size() ); + System.exit(0); + } + + ArrayList adrList = new ArrayList(); + + for (int i=0; i