--- dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/06/14 14:28:21 2585 +++ dao/FuldDaekningWorker/src/dk/daoas/fulddaekning/LookupMain.java 2015/07/13 10:16:41 2597 @@ -6,7 +6,9 @@ import java.io.File; import java.io.FileReader; import java.sql.SQLException; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.logging.FileHandler; import java.util.logging.Level; @@ -35,7 +37,7 @@ - private static List alleDaekkedeAdresser; + @@ -76,13 +78,17 @@ Database db = new Database(conf); Adresse ikkeDaekkede[] = db.hentAlleIkkedaekkedeAdresser(consts.getMinPostnr(), consts.getMaxPostnr() ); - + logger.info("Antal ikke-daekkede: " + ikkeDaekkede.length); boolean testRun= false; + int antalFundne = 0; + long start = System.currentTimeMillis(); + int antalDaekkedeAdresser = -1; + if (testRun == false) { logger.info("Finder postnumre"); @@ -97,10 +103,21 @@ logger.info("Henter alle daekkede adresser"); - alleDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); - logger.info( "AlleDaekkedeAdresser.length=" + alleDaekkedeAdresser.size()); + antalDaekkedeAdresser = db.hentAlleDaekkedeAdresser(); + logger.info( "AlleDaekkedeAdresser.length=" + antalDaekkedeAdresser ); - KDTree addressTree = new KDTree(alleDaekkedeAdresser); + Map> addrHoList = db.getDaekkedeAdresserHO(); + + Map> hoTrees = new HashMap>(); + + for ( Map.Entry> entry : addrHoList.entrySet() ) { + short ho = entry.getKey(); + List geopoints = entry.getValue(); + + logger.info("Opbygger KDTree for " + ho + " - antal=" + geopoints.size() ); + KDTree addressTree = new KDTree( geopoints ); + hoTrees.put(ho, addressTree); + } db.resetResultTable(); @@ -111,6 +128,8 @@ for (Adresse qAdresse : ikkeDaekkede) { + short ho = qAdresse.ho; + KDTree addressTree = hoTrees.get(ho); LookupResult result = new LookupResult(); result.bedsteAdr = (Adresse) addressTree.findNearest(qAdresse); @@ -119,10 +138,12 @@ if (result.bedsteAfstand <= consts.getMaxDistance() ) { //Gem kun hvis distancen er under max_distance for distributøren - if (LookupMain.verbose == true) { + if (verbose == true) { logger.fine("(" +workerId + ") Bedste: " + qAdresse + "==>" + result.bedsteAdr + " ::: " + result.bedsteAfstand ); } + antalFundne++; + try { db.gemResultat(qAdresse, result.bedsteAdr, result.bedsteAfstand); } catch (SQLException e) { @@ -132,7 +153,9 @@ System.exit(0); //hvis at indsættelsen fejler skal vi afbryde med det samme } } else { - System.out.println("For stor afstand: " + qAdresse + " > " + result.bedsteAfstand); + if (verbose == true) { + System.out.println("For stor afstand: " + qAdresse + " > " + result.bedsteAfstand); + } } } @@ -167,6 +190,10 @@ logger.info("Fuld load done : " + formatMilliSeconds(elapsed) ); + logger.info("Antal daekkede : " + antalDaekkedeAdresser ); + logger.info("Antal ikke-daekkede : " + ikkeDaekkede.length ); + logger.info("Heraf, antal fundne : " + antalFundne ); + logger.info("Fandt adresser til : " + (antalFundne*100.0)/ikkeDaekkede.length + "%" ); }