--- dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java 2015/09/29 07:48:48 2725 +++ dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java 2015/11/07 18:02:56 2770 @@ -1,9 +1,8 @@ package dk.daoas.fulddaekning; import java.sql.SQLException; -import java.util.Collection; +import java.util.ArrayList; import java.util.Map; -import java.util.NoSuchElementException; import java.util.Queue; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; @@ -11,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; @@ -36,6 +37,8 @@ int workerID; boolean verbose; + DistanceFunction dist = new SquareEuclideanDistanceFunction(); + public LookupWorker(int workerID, CyclicBarrier barrier, Queue ikkeDaekkede, @@ -69,28 +72,43 @@ short ho = qAdresse.ho; KdTree addressTree = hoTrees.get(ho); - Collection res = addressTree.nearestNeighbourSearch(MAX_RESULTS, qAdresse); - if (res.size() > MAX_RESULTS ) { + 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