--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressSearch.java 2015/02/28 16:16:17 2410 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressSearch.java 2015/03/13 13:06:17 2443 @@ -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,46 @@ 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) { @@ -79,21 +85,30 @@ return result; } - String vasketVejnavn = AddressUtils.vaskVejnavn( result.splitResult.vej ); + request.vasketVejnavn = AddressUtils.vaskVejnavn( request.vejnavn ); - Long gadeident = postnrVeje.get(vasketVejnavn); + + if (request.vasketVejnavn.indexOf("pakkebo") > -1 + || request.vasketVejnavn.indexOf("døgnpost") > -1 + || request.vasketVejnavn.indexOf("døgnbo") > -1 + || request.vasketVejnavn.equals("id") + ) { + result.status = Status.ERROR_POSTBOX; + return result; + } + + 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 +116,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 +187,9 @@ } - + public Map getStretsByPostal(int zip) { + return searchPostnrVejnavnGadeid.get(zip); + } @@ -392,18 +409,10 @@ } - 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) { + if (targetAddress.rute == null) { //hvis targetAdress.rute er null så er adressen ikke dækket alligevel + return null; + } // /////////////////////////////////////////////////////////////////// switch( eb.transport) { @@ -571,6 +580,7 @@ aliasSet.add(vejnavn.replace("allé", "allú") ); aliasSet.add(vejnavn.replace("gade", "gaed") ); //Fundet i logs.hentruteinfo + aliasSet.add(vejnavn.replace("gade", "gde") ); aliasSet.add(vejnavn.replace("plads", "pl") ); aliasSet.add(vejnavn.replace("vænget", "vænge") );