--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressSearch.java 2015/02/28 16:16:17 2410 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressSearch.java 2015/02/28 17:08:59 2411 @@ -20,6 +20,7 @@ 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; @@ -37,41 +38,47 @@ 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); + ; + + request.streetNames = searchPostnrVejnavnGadeid.get(request.postnr); - if (postnrVeje == null) { + 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) { @@ -79,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); } } @@ -101,13 +107,13 @@ // Brug OpenStreetMap før vi prøver google // For google har en request limit, det har OSM ikke! if ( gadeident == null) { - String vej = osmHelper.proposeStreetName(result, postnr, result.splitResult.vej); - gadeident = helperWrapper(vej, postnrVeje, helperSearchKey); + String vej = osmHelper.proposeStreetName(request, result); + gadeident = helperWrapper(vej, request.streetNames, helperSearchKey); } if ( gadeident == null) { - String vej = googleHelper.proposeStreetName(result, postnr, result.splitResult.vej); - gadeident = helperWrapper(vej, postnrVeje, helperSearchKey); + String vej = googleHelper.proposeStreetName(request, result); + gadeident = helperWrapper(vej, request.streetNames, helperSearchKey); } @@ -172,7 +178,9 @@ } - + public Map getStretsByPostal(int zip) { + return searchPostnrVejnavnGadeid.get(zip); + } @@ -392,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) { // ///////////////////////////////////////////////////////////////////