--- dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java 2015/11/26 12:10:35 2782 +++ dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java 2015/11/26 12:28:27 2783 @@ -34,7 +34,8 @@ public class AddressSearch { private Map> searchPostnrVejnavnGadeid; - private Map> searchGadeidentAdresser; + private Map>> searchGadeidentAdresser; // Gadeident -> husnrumre -> litra + private List
alleAdresser; @@ -61,15 +62,17 @@ osmHelper = new OSMStreetnameHelper( config ); } - public Address getAddressSafe(int gadeid, String husnr) throws Exception { + public Address getAddressSafe(int gadeid, short husnr, String litra) throws Exception { - Map gade = searchGadeidentAdresser.get(gadeid); + Map> gade = searchGadeidentAdresser.get(gadeid); if (gade == null) { throw new Exception("GadeID ikke fundet"); } - Address addr = gade.get(husnr); + Map litraList = gade.get(husnr); + + Address addr = litraList.get(litra); if (addr == null) { throw new Exception("Adresse ikke ikke fundet"); @@ -171,7 +174,7 @@ result.gadeident = gadeident; - Map gade = searchGadeidentAdresser.get(gadeident); + Map> gade = searchGadeidentAdresser.get(gadeident); if (gade == null) { //Denne søgning må ikke fejle result.status = Status.ERROR_INTERNAL; return result; @@ -179,17 +182,26 @@ //Kunne evt klares med Iterables.get fra Guava/Collections - Address firstAddress = gade.values().iterator().next(); + Address firstAddress = gade.values().iterator().next().values().iterator().next(); //Første husnr -> første litra result.vej = firstAddress.vejnavn; - String husnrSearch = "" + result.splitResult.husnr + result.splitResult.litra; - Address addr = gade.get(husnrSearch); + short husnrSearch = Short.parseShort(result.splitResult.husnr ); + Map litraList = gade.get(husnrSearch); + - if (addr == null) { + if (litraList == null) { //Husnr ikke fundet result.status = Status.ERROR_UNKNOWN_ADDRESSPOINT; return result; } + Address addr = litraList.get( result.splitResult.litra ); + + if (addr == null) { + //husnr fundet men litra blev ikke fundet + result.status = Status.ERROR_UNKNOWN_ADDRESSPOINT; + return result; + } + result.address = addr; @@ -272,7 +284,7 @@ public void buildSearchStructures() throws SQLException{ searchPostnrVejnavnGadeid = new HashMap>(); - searchGadeidentAdresser = new HashMap>(); + searchGadeidentAdresser = new HashMap>>(); helperCache = new ConcurrentHashMap(); long start1 = System.currentTimeMillis(); @@ -284,7 +296,6 @@ /* Mapper mellem db Row ID og adresse noden */ Map idAddressMap = new HashMap( alleAdresser.size() ); DeduplicateHelper aliasHelper = new DeduplicateHelper(); - DeduplicateHelper husnrHelper = new DeduplicateHelper(); for (Address a : alleAdresser) { idAddressMap.put(a.id, a); @@ -313,14 +324,19 @@ } } - Map gade = searchGadeidentAdresser.get(gadeident); + Map> gade = searchGadeidentAdresser.get(gadeident); if (gade == null) { - gade = new HashMap(); + gade = new TreeMap>(); searchGadeidentAdresser.put(gadeident, gade); } - String husnrSearch = "" + a.husnr + a.husnrbogstav; - husnrSearch = husnrHelper.getInstance(husnrSearch); - gade.put(husnrSearch, a); + + Map litraList = gade.get(a.husnr); + if (litraList == null) { + litraList = new HashMap(); + gade.put(a.husnr, litraList); + } + + litraList.put(a.husnrbogstav, a); } //////////////////////////////////////////////////////////////////////////////////////// @@ -810,18 +826,26 @@ public Set getHusnumre(int gadeid) { - Map gade = searchGadeidentAdresser.get(gadeid); + Map> gade = searchGadeidentAdresser.get(gadeid); Set set = new TreeSet( new NaturalOrderComparator() ); - set.addAll( gade.keySet() ); + for(Map litraList : gade.values()) { + for (Address a: litraList.values()) { + set.add( a.husnr + a.husnrbogstav ); + } + } return set; } - public Address getAdresse(int gadeid, String husnr) { + public Address getAdresse(int gadeid, String husnrStr) { + + short husnr = Short.parseShort( husnrStr.replaceAll("\\d","") ); + String litra = husnrStr.replaceAll("^\\d", ""); - Map gade = searchGadeidentAdresser.get(gadeid); - return gade.get(husnr); + Map> gade = searchGadeidentAdresser.get(gadeid); + Map litraList = gade.get(husnr); + return litraList.get(litra); }