--- dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java 2015/10/07 18:57:53 2743 +++ dao/FuldDaekningWorker/src/main/java/dk/daoas/fulddaekning/LookupWorker.java 2015/10/07 19:32:00 2744 @@ -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,8 +10,10 @@ 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 { @@ -35,6 +37,8 @@ int workerID; boolean verbose; + DistanceFunction dist = new SquareEuclideanDistanceFunction(); + public LookupWorker(int workerID, CyclicBarrier barrier, Queue ikkeDaekkede, @@ -68,23 +72,34 @@ 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 " + d); + } + 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 + double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr); - Adresse bedsteAdr = res.iterator().next(); //Tag første element - double bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, bedsteAdr); - - +/* //Hvis at den er inden for afstand, så prøver vi at lave findNærmste på vej distancen if (bedsteAfstand <= consts.getMaxDistance()) { //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteHttp(qAdresse, res); //Adresse bedsteAdr2 = osrmHelper.getNearestViarouteJni(qAdresse, res); - //Adresse bedsteAdr2 = osrmHelper.getNearestTableHttp(qAdresse, res); - Adresse bedsteAdr2 = osrmHelper.getNearestTableJni(qAdresse, res); + Adresse bedsteAdr2 = osrmHelper.getNearestTableHttp(qAdresse, res); + //Adresse bedsteAdr2 = osrmHelper.getNearestTableJni(qAdresse, res); if (bedsteAdr2 != null) { bedsteAdr = bedsteAdr2; @@ -93,7 +108,7 @@ logger.info("NearestViaTable returned null for " + qAdresse); } } - +*/