--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/09/04 12:40:48 2706 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/09/27 13:21:45 2707 @@ -1,11 +1,9 @@ package dk.daoas.fulddaekning; -import geocode.GeoPoint; -import geocode.kdtree.KDTree; - import java.io.File; import java.io.FileReader; import java.sql.SQLException; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,6 +13,8 @@ import java.util.logging.Logger; import java.util.logging.SimpleFormatter; +import com.jwetherell.algorithms.data_structures.KdTree; + public class LookupMain { static class LookupResult { @@ -84,9 +84,8 @@ int antalFundne = 0; - + long beregnStart =0; long start = System.currentTimeMillis(); - int antalDaekkedeAdresser = -1; if (testRun == false) { @@ -106,21 +105,26 @@ antalDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser ); - Map> addrHoList = db.getDaekkedeAdresserHO(); + Map> addrHoList = db.getDaekkedeAdresserHO(); - Map> hoTrees = new HashMap>(); + Map> hoTrees = new HashMap>(); - for ( Map.Entry> entry : addrHoList.entrySet() ) { + for ( Map.Entry> entry : addrHoList.entrySet() ) { short ho = entry.getKey(); - List geopoints = entry.getValue(); + List geopoints = entry.getValue(); logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() ); - KDTree addressTree = new KDTree( geopoints ); + + @SuppressWarnings("unchecked") + List tmpPoints = (List)(List) geopoints; + + KdTree addressTree = new KdTree( tmpPoints ); hoTrees.put(ho, addressTree); } db.resetResultTable(); + beregnStart = System.currentTimeMillis(); logger.info("Starter beregning"); final int workerId = -1; @@ -129,10 +133,17 @@ for (Adresse qAdresse : ikkeDaekkede) { short ho = qAdresse.ho; - KDTree addressTree = hoTrees.get(ho); + KdTree addressTree = hoTrees.get(ho); LookupResult result = new LookupResult(); - result.bedsteAdr = (Adresse) addressTree.findNearest(qAdresse); + Collection res = addressTree.nearestNeighbourSearch(1, qAdresse); + if (res.size() > 1 ) { + System.out.println("Returnerede mere end 1>" + res.size() ); + System.exit(0); + } + result.bedsteAdr = res.iterator().next(); + + //result.bedsteAdr = (Adresse) addressTree.findNearest(qAdresse); result.bedsteAfstand = GeoPointHelper.beregnAfstand(qAdresse, result.bedsteAdr); @@ -187,9 +198,11 @@ long now = System.currentTimeMillis(); long elapsed = now - start ; + long elapsedBeregn = now - beregnStart; logger.info("Fuld load done : " + formatMilliSeconds(elapsed) ); + logger.info("Fuld load done (beregning) : " + formatMilliSeconds(elapsedBeregn) ); logger.info("Antal daekkede : " + antalDaekkedeAdresser ); logger.info("Antal ikke-daekkede : " + ikkeDaekkede.length ); logger.info("Heraf, antal fundne : " + antalFundne );