--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/28 16:14:55 2409 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressSearch.java 2015/02/28 17:46:23 2415 @@ -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,41 +38,46 @@ ServiceConfig config; + StreetnameHelper levenshteinHelper; StreetnameHelper googleHelper; StreetnameHelper osmHelper; - public AdressSearch(ServiceConfig config) { + + 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) { @@ -79,21 +85,26 @@ return result; } - String vasketVejnavn = AddressUtils.vaskVejnavn( result.splitResult.vej ); + request.vasketVejnavn = AddressUtils.vaskVejnavn( request.vejnavn ); + + + if (request.vasketVejnavn.indexOf("pakkebo") > -1 || request.vasketVejnavn.indexOf("døgnpost") > -1) { + result.status = Status.ERROR_POSTBOX; + return result; + } - 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 +112,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 +183,9 @@ } - + public Map getStretsByPostal(int zip) { + return searchPostnrVejnavnGadeid.get(zip); + } @@ -392,17 +405,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) { // ///////////////////////////////////////////////////////////////////