--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/26 10:26:01 2380 +++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/26 15:47:07 2389 @@ -12,6 +12,8 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.lang3.StringUtils; + import dk.daoas.daoadresseservice.admin.ServiceConfig; import dk.daoas.daoadresseservice.beans.Address; import dk.daoas.daoadresseservice.beans.DataStatisticsBean; @@ -80,15 +82,25 @@ gadeident = helperCache.get(helperSearchKey); } + if (gadeident == null) { + String best = getbestLevenshteinDistance(vasketVejnavn, postnrVeje); + if (best != null) { + result.levenshtein = true; + gadeident = postnrVeje.get(best); + } + } + + // Brug OpenStreetMap før vi prøver google + // For google har en request limit, det har OSM ikke! if ( gadeident == null) { - if (config.useGoogle) { - result.googleVej = GeocodeHelper.googleHelper(config, postnr, result.splitResult.vej ); - result.google = true; + if (config.useOpenStreetMaps) { + result.osmVej = GeocodeHelper.openstreetmapHelper(config, postnr, result.splitResult.vej ); + result.osm = true; - if (result.googleVej != null) { - String googleVasket = AddressUtils.vaskVejnavn( result.googleVej ); - gadeident = postnrVeje.get(googleVasket); + if (result.osmVej != null) { + String osmVasket = AddressUtils.vaskVejnavn( result.osmVej ); + gadeident = postnrVeje.get(osmVasket); if (gadeident != null) { helperCache.put(helperSearchKey, gadeident); @@ -98,13 +110,13 @@ } if ( gadeident == null) { - if (config.useOpenStreetMaps) { - result.osmVej = GeocodeHelper.openstreetmapHelper(config, postnr, result.splitResult.vej ); - result.osm = true; + if (config.useGoogle) { + result.googleVej = GeocodeHelper.googleHelper(config, postnr, result.splitResult.vej ); + result.google = true; - if (result.osmVej != null) { - String osmVasket = AddressUtils.vaskVejnavn( result.osmVej ); - gadeident = postnrVeje.get(osmVasket); + if (result.googleVej != null) { + String googleVasket = AddressUtils.vaskVejnavn( result.googleVej ); + gadeident = postnrVeje.get(googleVasket); if (gadeident != null) { helperCache.put(helperSearchKey, gadeident); @@ -113,6 +125,8 @@ } } + + if (gadeident == null) { result.status = Status.ERROR_UNKNOWN_STREETNAME; return result; @@ -135,7 +149,8 @@ result.address = addr; - if (addr.distributor != null && addr.distributor.equals("LUKKET")) { + + if ( StringUtils.equals(addr.distributor, "LUKKET") ) { result.status = Status.STATUS_NOT_COVERED; //Skal vi have en special status til Lukkede adresser ? return result; } @@ -333,6 +348,17 @@ } + 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) { // /////////////////////////////////////////////////////////////////// @@ -446,11 +472,14 @@ //alternative måder at stave vej/gade/alle aliasSet.add(vejnavn.replace("vej", "ve") ); aliasSet.add(vejnavn.replace("vej", "vj") ); + aliasSet.add(vejnavn.replace("vej", "v") ); aliasSet.add(vejnavn.replace("alle", "all") ); aliasSet.add(vejnavn.replace("allé", "all") ); + aliasSet.add(vejnavn.replace("alle", "allú") ); //Fundet i logs.hentruteinfo + aliasSet.add(vejnavn.replace("allé", "allú") ); - aliasSet.add(vejnavn.replace("gade", "gaed") ); + aliasSet.add(vejnavn.replace("gade", "gaed") ); //Fundet i logs.hentruteinfo // Opbyg æøå varianter over alle fundne aliaser