--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/13 15:45:24 2283 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/15 14:17:03 2300 @@ -2,8 +2,10 @@ import java.sql.SQLException; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import dk.daoas.daoadresseservice.AddressUtils.SplitResult; @@ -21,15 +23,14 @@ List
alleAdresser; - /* Mapper mellem db Row ID og adresse noden */ - Map idAddressMap; - Map hundredePct; public SearchResult search(String postnrStr, String adresse) { + int postnr=0; + boolean google = false; try { postnr = Integer.parseInt(postnrStr); @@ -43,23 +44,34 @@ return new SearchResult(Status.ERROR_UNKNOWN_POSTAL); } + SplitResult split = AddressUtils.splitAdresse(adresse); - String vasketVejnavn = AddressUtils.vaskVejnavn( split.vej ); + String vasketVejnavn = AddressUtils.vaskVejnavn( split.vej ); if (split.husnr.length() == 0) { return new SearchResult(Status.ERROR_MISSING_HOUSENUMBER); } Long gadeident = postnrVeje.get(vasketVejnavn); + if ( gadeident == null) { + String googleVej = GeocodeHelper.googleHelper(postnr, split.vej ); + if (googleVej != null) { + String googleVasket = AddressUtils.vaskVejnavn( googleVej ); + gadeident = postnrVeje.get(googleVasket); + google = true; + } + } + if (gadeident == null) { return new SearchResult(Status.ERROR_UNKNOWN_STREETNAME); - } + } Map gade = searchGadeidentAdresser.get(gadeident); //Denne søgning må ikke fejle String husnrSearch = "" + split.husnr + split.litra; Address addr = gade.get(husnrSearch); + if (addr == null) { return new SearchResult(Status.ERROR_UNKNOWN_ADDRESSPOINT); } @@ -70,22 +82,26 @@ if (addr.distributor.equals("LUKKET")) { return new SearchResult(Status.STATUS_NOT_COVERED); //Skal vi have en special status til Lukkede adresser ? - } - + } - return new SearchResult(addr); + SearchResult res = new SearchResult(addr); + res.google = google; + return res; } public void buildSearchStructures() throws SQLException{ searchPostnrVejnavnGadeid = new HashMap>(); searchGadeidentAdresser = new HashMap>(); - idAddressMap = new HashMap(); - + System.out.println("Build -- stage 1"); alleAdresser = DatabaseLayer.getAllAdresses(); + + /* Mapper mellem db Row ID og adresse noden */ + Map idAddressMap = new HashMap( alleAdresser.size() ); + for (Address a : alleAdresser) { idAddressMap.put(a.id, a); @@ -99,7 +115,14 @@ String vasketVejnavn = AddressUtils.vaskVejnavn(a.vejnavn); Long gadeident = postnrVeje.get(vasketVejnavn); if (gadeident == null) { - postnrVeje.put(vasketVejnavn, a.gadeid); + //postnrVeje.put(vasketVejnavn, a.gadeid); + + Set aliaser = findVejAliaser(a.vejnavn); + for(String alias : aliaser) { + String vasketAlias = AddressUtils.vaskVejnavn(alias); + postnrVeje.put(vasketAlias, a.gadeid); + } + } Map gade = searchGadeidentAdresser.get(a.gadeid); @@ -108,7 +131,7 @@ searchGadeidentAdresser.put(a.gadeid, gade); } String husnrSearch = "" + a.husnr + a.husnrbogstav; - gade.put(husnrSearch, a); + gade.put(husnrSearch, a); } @@ -164,15 +187,17 @@ orgAddress.distributor = targetAddress.distributor; } - - } + + // nu skal vi ikke bruge idAddressMap længere + idAddressMap = null; + ////////////////////////////////////////////////////////////////////////////////////// System.out.println("Build -- stage 3 - 100pct"); hundredePct = DatabaseLayer.get100PctList(); for (Address addr : alleAdresser) { - if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { + if (addr.daekningsType != DaekningsType.DAEKNING_IKKEDAEKKET) { continue; } @@ -193,6 +218,35 @@ addr.distributor = bean.distributor; } + //////////////////////////////////////////////////////////////////////////////////// + System.out.println("Build -- Gathering statistics"); + + int direkteCount = 0; + int extendedCount = 0; + int hundredePctCount = 0; + int ikkeDaekketCount = 0; + + for (Address addr : alleAdresser) { + switch (addr.daekningsType) { + case DAEKNING_DIREKTE: + direkteCount++; + break; + case DAEKNING_UDVIDET: + extendedCount++; + break; + case DAEKNING_100PCT: + hundredePctCount++; + break; + default: + ikkeDaekketCount++; + } + } + + System.out.println("Build: direkteCount: " + direkteCount); + System.out.println("Build: extendedCount: " + extendedCount); + System.out.println("Build: hundredePctCount: " + hundredePctCount); + System.out.println("Build: ikkeDaekketCount: " + ikkeDaekketCount); + System.out.println("Build Completed"); } @@ -250,5 +304,71 @@ return AddressUtils.injectIntoBk(targetAddress.koreliste, inject); } + private Set findVejAliaser(String vejnavn) { + vejnavn = vejnavn.toLowerCase(); + Set aliasSet = new HashSet(); + aliasSet.add(vejnavn); + + aliasSet.add(vejnavn.replace("alle", "allé") ); + aliasSet.add(vejnavn.replace("allé", "alle") ); + + // danske tegn 1 + aliasSet.add(vejnavn.replace("æ", "ae") ); + aliasSet.add(vejnavn.replace("ø", "oe") ); + aliasSet.add(vejnavn.replace("å", "aa") ); + aliasSet.add(vejnavn.replace("ae", "æ") ); + aliasSet.add(vejnavn.replace("oe", "ø") ); + aliasSet.add(vejnavn.replace("aa", "å") ); + + //danske tegn 2 + aliasSet.add( vejnavn.replace("æ", "ae").replace("ø", "oe") ); + aliasSet.add( vejnavn.replace("æ", "ae").replace("å", "aa") ); + aliasSet.add( vejnavn.replace("ø", "ae").replace("å", "aa") ); + aliasSet.add( vejnavn.replace("ae", "æ").replace("oe","ø") ); + aliasSet.add( vejnavn.replace("ae", "æ").replace("aa","å") ); + aliasSet.add( vejnavn.replace("oe", "ø").replace("aa", "å") ); + + //danske tegn 3 + aliasSet.add( vejnavn.replace("æ", "ae").replace("ø", "oe").replace("å", "aa") ); + aliasSet.add( vejnavn.replace("ae", "æ").replace("oe", "ø").replace("aa", "å") ); + + + aliasSet.add(vejnavn.replace("dronningens", "dr") ); + aliasSet.add(vejnavn.replace("dr.", "dronningens") ); + aliasSet.add(vejnavn.replace("dr ", "dronningens") ); + + aliasSet.add(vejnavn.replace("kvt", "kvarter") ); + aliasSet.add(vejnavn.replace("kvarter", "kvt") ); + + aliasSet.add(vejnavn.replace("gl", "gammel") ); + aliasSet.add(vejnavn.replace("gammel", "gl") ); + + aliasSet.add(vejnavn.replace("lille", "ll") ); + aliasSet.add(vejnavn.replace("ll ", "lille") ); + aliasSet.add(vejnavn.replace("ll.", "lille") ); + + aliasSet.add(vejnavn.replace("store", "st") ); + aliasSet.add(vejnavn.replace("st ", "store") ); + aliasSet.add(vejnavn.replace("st.", "store") ); + + aliasSet.add(vejnavn.replace("søndre", "sdr") ); + aliasSet.add(vejnavn.replace("sdr", "søndre") ); + + + aliasSet.add(vejnavn.replace("nørre", "nr") ); + aliasSet.add(vejnavn.replace("nr", "nørre") ); + + aliasSet.add(vejnavn.replace("nordre", "ndr") ); + aliasSet.add(vejnavn.replace("ndr", "nordre") ); + + aliasSet.add(vejnavn.replace("sankt", "skt") ); + aliasSet.add(vejnavn.replace("skt", "sankt") ); + + aliasSet.add(vejnavn.replace("skt", "sct") ); + aliasSet.add(vejnavn.replace("sct", "skt") ); + + return aliasSet; + } + }