--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/27 10:37:08 2398 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressSearch.java 2015/02/28 17:08:59 2411 @@ -20,11 +20,12 @@ import dk.daoas.daoadresseservice.beans.DataStatisticsBean; import dk.daoas.daoadresseservice.beans.ExtendedBean; import dk.daoas.daoadresseservice.beans.HundredePctBean; +import dk.daoas.daoadresseservice.beans.SearchRequest; import dk.daoas.daoadresseservice.beans.SearchResult; import dk.daoas.daoadresseservice.beans.SearchResult.Status; import dk.daoas.daoadresseservice.db.DatabaseLayer; -public class AdressSearch { +public class AddressSearch { private Map> searchPostnrVejnavnGadeid; private Map> searchGadeidentAdresser; @@ -37,35 +38,47 @@ ServiceConfig config; - public AdressSearch(ServiceConfig config) { + StreetnameHelper levenshteinHelper; + StreetnameHelper googleHelper; + StreetnameHelper osmHelper; + + + public AddressSearch(ServiceConfig config) { this.config = config; + + levenshteinHelper = new LevenshteinStreetnameHelper( this ); + googleHelper = new GoogleStreetnameHelper( config ); + osmHelper = new OSMStreetnameHelper( config ); } public SearchResult search(String postnrStr, String adresse) { - + SearchRequest request = new SearchRequest(); SearchResult result = new SearchResult(); - int postnr=0; String helperSearchKey = ""; try { - postnr = Integer.parseInt(postnrStr); + request.postnr = Integer.parseInt(postnrStr); } catch (Exception E) { result.status = Status.ERROR_UNKNOWN_POSTAL; return result; } - Map postnrVeje = searchPostnrVejnavnGadeid.get(postnr); + ; - if (postnrVeje == null) { + request.streetNames = searchPostnrVejnavnGadeid.get(request.postnr); + + if (request.streetNames == null) { result.status = Status.ERROR_UNKNOWN_POSTAL; return result; } result.splitResult = AddressUtils.splitAdresse(adresse); + request.vejnavn = result.splitResult.vej; + if (result.splitResult.husnr.length() == 0) { @@ -73,21 +86,20 @@ return result; } - String vasketVejnavn = AddressUtils.vaskVejnavn( result.splitResult.vej ); + request.vasketVejnavn = AddressUtils.vaskVejnavn( result.splitResult.vej ); - Long gadeident = postnrVeje.get(vasketVejnavn); + Long gadeident = request.streetNames.get(request.vasketVejnavn); if ( gadeident == null) { - helperSearchKey = "" + postnr + "/" + vasketVejnavn; + helperSearchKey = "" + request.postnr + "/" + request.vasketVejnavn; gadeident = helperCache.get(helperSearchKey); } if (gadeident == null) { - String best = getbestLevenshteinDistance(vasketVejnavn, postnrVeje); - if (best != null) { - result.levenshtein = true; - gadeident = postnrVeje.get(best); + String vej = levenshteinHelper.proposeStreetName(request, result); + if (vej != null) { + gadeident = request.streetNames.get(vej); } } @@ -95,21 +107,13 @@ // Brug OpenStreetMap før vi prøver google // For google har en request limit, det har OSM ikke! if ( gadeident == null) { - if (config.useOpenStreetMaps) { - result.osmVej = GeocodeHelper.openstreetmapHelper(config, postnr, result.splitResult.vej ); - result.osm = true; - - gadeident = helperWrapper(result.osmVej, postnrVeje, helperSearchKey); - } + String vej = osmHelper.proposeStreetName(request, result); + gadeident = helperWrapper(vej, request.streetNames, helperSearchKey); } if ( gadeident == null) { - if (config.useGoogle) { - result.googleVej = GeocodeHelper.googleHelper(config, postnr, result.splitResult.vej ); - result.google = true; - - gadeident = helperWrapper(result.googleVej, postnrVeje, helperSearchKey); - } + String vej = googleHelper.proposeStreetName(request, result); + gadeident = helperWrapper(vej, request.streetNames, helperSearchKey); } @@ -129,6 +133,10 @@ } + //Kunne evt klares med Iterables.get fra Guava/Collections + Address firstAddress = gade.values().iterator().next(); + result.vej = firstAddress.vejnavn; + String husnrSearch = "" + result.splitResult.husnr + result.splitResult.litra; Address addr = gade.get(husnrSearch); @@ -170,7 +178,9 @@ } - + public Map getStretsByPostal(int zip) { + return searchPostnrVejnavnGadeid.get(zip); + } @@ -390,17 +400,6 @@ } - private String getbestLevenshteinDistance(String vasketVejnavn, Map postnrVeje) { - for(String vej : postnrVeje.keySet()) { - if ( StringUtils.getLevenshteinDistance(vasketVejnavn, vej) == 1) { - System.out.println("Levenstein: " + vasketVejnavn + "->" + vej); - return vej; - } - } - - return null; - } - private String calculateExtendedDaoRoute(ExtendedBean eb, Address orgAddress, Address targetAddress) { // /////////////////////////////////////////////////////////////////// @@ -518,8 +517,43 @@ aliasSet.add(vejnavn.replace("sct", "skt") ); - aliasSet.add(vejnavn.replace("john", "j") ); //john f kennedy -> j f kennedy + // fornavn forkortelser + aliasSet.add(vejnavn.replace("john", "j") ); + aliasSet.add(vejnavn.replace("thomas", "th") ); + aliasSet.add(vejnavn.replace("thorvald", "th") ); + + + // Romertal + aliasSet.add(vejnavn.replace("1", "i") ); + aliasSet.add(vejnavn.replace("i", "1") ); + + aliasSet.add(vejnavn.replace("2", "ii") ); + aliasSet.add(vejnavn.replace("ii", "2") ); + + aliasSet.add(vejnavn.replace("3", "iii") ); + aliasSet.add(vejnavn.replace("iii", "3") ); + + aliasSet.add(vejnavn.replace("4", "iv") ); + aliasSet.add(vejnavn.replace("iv", "4") ); + aliasSet.add(vejnavn.replace("5", "v") ); + aliasSet.add(vejnavn.replace("v", "5") ); + + aliasSet.add(vejnavn.replace("6", "vi") ); + aliasSet.add(vejnavn.replace("vi", "6") ); + + aliasSet.add(vejnavn.replace("7", "vii") ); + aliasSet.add(vejnavn.replace("vii", "7") ); + + aliasSet.add(vejnavn.replace("8", "viii") ); + aliasSet.add(vejnavn.replace("viii", "8") ); + + aliasSet.add(vejnavn.replace("9", "ix") ); + aliasSet.add(vejnavn.replace("ix", "9") ); + + aliasSet.add(vejnavn.replace("10", "x") ); + aliasSet.add(vejnavn.replace("x", "10") ); + //alternative måder at stave vej/gade/alle aliasSet.add(vejnavn.replace("vej", "ve") ); @@ -535,6 +569,9 @@ aliasSet.add(vejnavn.replace("gade", "gaed") ); //Fundet i logs.hentruteinfo + aliasSet.add(vejnavn.replace("plads", "pl") ); + aliasSet.add(vejnavn.replace("vænget", "vænge") ); + // Opbyg æøå varianter over alle fundne aliaser