/[projects]/dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java
ViewVC logotype

Diff of /dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/AddressSearch.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2783 by torben, Thu Nov 26 12:28:27 2015 UTC revision 2803 by torben, Wed Jan 13 10:51:39 2016 UTC
# Line 30  import dk.daoas.daoadresseservice.db.Dat Line 30  import dk.daoas.daoadresseservice.db.Dat
30  import dk.daoas.daoadresseservice.util.DaoUtils;  import dk.daoas.daoadresseservice.util.DaoUtils;
31  import dk.daoas.daoadresseservice.util.DeduplicateHelper;  import dk.daoas.daoadresseservice.util.DeduplicateHelper;
32  import dk.daoas.daoadresseservice.util.NaturalOrderComparator;  import dk.daoas.daoadresseservice.util.NaturalOrderComparator;
33    import dk.daoas.daoadresseservice.util.NearestShortTreeMap;
34    
35  public class AddressSearch {  public class AddressSearch {
36    
# Line 44  public class AddressSearch { Line 45  public class AddressSearch {
45          private DataStatisticsBean stats = new DataStatisticsBean();          private DataStatisticsBean stats = new DataStatisticsBean();
46                    
47          private DatabaseLayer db;          private DatabaseLayer db;
48            private ServiceConfig config;
49                    
50                    
51          StreetnameHelper levenshteinHelper;          StreetnameHelper levenshteinHelper;
# Line 55  public class AddressSearch { Line 57  public class AddressSearch {
57          public AddressSearch(DatabaseLayer db, ServiceConfig config) {          public AddressSearch(DatabaseLayer db, ServiceConfig config) {
58                                    
59                  this.db = db;                  this.db = db;
60                    this.config = config;
61                                    
62                  levenshteinHelper = new LevenshteinStreetnameHelper( this );                  levenshteinHelper = new LevenshteinStreetnameHelper( this );
63                  metaphoneHelper = new DoubleMetaphoneStreetnameHelper(config);                  metaphoneHelper = new DoubleMetaphoneStreetnameHelper(config);
# Line 81  public class AddressSearch { Line 84  public class AddressSearch {
84                  return addr;                  return addr;
85          }          }
86                    
87            
88          public SearchResult search(String postnrStr, String adresse)  {          public SearchResult search(String postnrStr, String adresse)  {
89                    return search(postnrStr, adresse, false);
90            }
91            
92            
93            public SearchResult search(String postnrStr, String adresse, boolean naermesteHusnr)  {
94                                    
95                  postnrStr = postnrStr.trim();                  postnrStr = postnrStr.trim();
96                  adresse = adresse.trim();                  adresse = adresse.trim();
# Line 190  public class AddressSearch { Line 198  public class AddressSearch {
198                                    
199    
200                  if (litraList == null) { //Husnr ikke fundet                  if (litraList == null) { //Husnr ikke fundet
201                          result.status = Status.ERROR_UNKNOWN_ADDRESSPOINT;                          
202                          return result;                          if (naermesteHusnr) {
203                                    TreeMap<Short, Map<String,Address>> gadeTreeMap = (TreeMap<Short, Map<String,Address>>) gade;
204                                    result.anvendtHusnr = NearestShortTreeMap.getNearestKey(husnrSearch, gadeTreeMap);
205                                    
206                                    result.nearestHusnr = true;
207                                    litraList = gade.get(result.anvendtHusnr);
208                                    
209                                    
210                            } else {
211                                    result.status = Status.ERROR_UNKNOWN_ADDRESSPOINT;
212                                    return result;  
213                            }
214                  }                  }
215                                    
216                  Address addr = litraList.get( result.splitResult.litra );                  Address addr = litraList.get( result.splitResult.litra );
217                                    
218                  if (addr == null) {                  if (addr == null) { //litra ikke fundet
219                          //husnr fundet men litra blev ikke fundet                          if (config.nearestLitra == true) {
220                          result.status = Status.ERROR_UNKNOWN_ADDRESSPOINT;                                  result.nearestLitra = true;
221                          return result;                                                    addr = litraList.values().iterator().next();                            
222                            } else {
223                                    //husnr fundet men litra blev ikke fundet
224                                    result.status = Status.ERROR_UNKNOWN_ADDRESSPOINT;
225                                    return result;  
226                            }                      
227                  }                  }
228                                    
229                  result.address = addr;                  result.address = addr;
# Line 241  public class AddressSearch { Line 265  public class AddressSearch {
265                  }                  }
266                                    
267                  if (gadeident == null) {                  if (gadeident == null) {
268                          String vej = levenshteinHelper.proposeStreetName(request, result);                          String vej = metaphoneHelper.proposeStreetName(request, result);
269                          if (vej != null) {                          if (vej != null) {
270                                  gadeident =  request.streetNames.get(vej);                                  gadeident =  request.streetNames.get(vej);
271                          }                          }
# Line 297  public class AddressSearch { Line 321  public class AddressSearch {
321                  Map<Integer,Address> idAddressMap = new HashMap<Integer,Address>( alleAdresser.size() );                  Map<Integer,Address> idAddressMap = new HashMap<Integer,Address>( alleAdresser.size() );
322                  DeduplicateHelper<String> aliasHelper = new DeduplicateHelper<String>();                  DeduplicateHelper<String> aliasHelper = new DeduplicateHelper<String>();
323                                    
324                    DeduplicateHelper<Short> shortHelper = new DeduplicateHelper<Short>();
325                    DeduplicateHelper<Integer> intHelper = new DeduplicateHelper<Integer>();
326                    
327                    
328                  for (Address a : alleAdresser) {                  for (Address a : alleAdresser) {
329                          idAddressMap.put(a.id, a);                          idAddressMap.put(a.id, a);
330                                                    
331                          Map<String,Integer> postnrVeje = searchPostnrVejnavnGadeid.get(a.postnr);                                        Short postnr = shortHelper.getInstance(a.postnr);
332                            
333                            Map<String,Integer> postnrVeje = searchPostnrVejnavnGadeid.get(postnr);        
334                                                    
335                          if (postnrVeje == null) {                          if (postnrVeje == null) {
336                                  postnrVeje = new ConcurrentHashMap<String,Integer>();                                  postnrVeje = new HashMap<String,Integer>(10240); //lige nu indeholder den største 9500 entries
337                                  searchPostnrVejnavnGadeid.put(a.postnr, postnrVeje);                                  searchPostnrVejnavnGadeid.put(postnr, postnrVeje);
338                          }                          }
339                                                                    
340                                                    
# Line 313  public class AddressSearch { Line 343  public class AddressSearch {
343                          if (gadeident == null) {                                                          if (gadeident == null) {                                
344                                  //postnrVeje.put(vasketVejnavn, a.gadeid);                                  //postnrVeje.put(vasketVejnavn, a.gadeid);
345                                                                    
346                                  gadeident = a.gadeid;                                  gadeident = intHelper.getInstance( a.gadeid );
347                                                                    
348                                  Set<String> aliaser = findVejAliaser(a.vejnavn);                                  Set<String> aliaser = findVejAliaser(a.vejnavn);
349                                  for(String alias : aliaser) {                                  for(String alias : aliaser) {
# Line 321  public class AddressSearch { Line 351  public class AddressSearch {
351                                          vasketAlias = aliasHelper.getInstance(vasketAlias);                                          vasketAlias = aliasHelper.getInstance(vasketAlias);
352                                                                                    
353                                          postnrVeje.put(vasketAlias, gadeident);                                          postnrVeje.put(vasketAlias, gadeident);
354                                  }                                                                }
355                                    
356                          }                          }
357                                                    
358                            
359                          Map<Short, Map<String,Address>> gade =  searchGadeidentAdresser.get(gadeident);                          Map<Short, Map<String,Address>> gade =  searchGadeidentAdresser.get(gadeident);
360                          if (gade == null) {                          if (gade == null) {
361                                  gade = new TreeMap<Short, Map<String,Address>>();                                  gade = new TreeMap<Short, Map<String,Address>>();
# Line 338  public class AddressSearch { Line 370  public class AddressSearch {
370                                                    
371                          litraList.put(a.husnrbogstav, a);                                                litraList.put(a.husnrbogstav, a);                      
372                  }                  }
373                    
374                  ////////////////////////////////////////////////////////////////////////////////////////                  ////////////////////////////////////////////////////////////////////////////////////////
375                  long start2 = System.currentTimeMillis();                  long start2 = System.currentTimeMillis();
376                  System.out.println("Build, stage1 elapsed: " + (start2-start1) );                  System.out.println("Build, stage1 elapsed: " + (start2-start1) );
# Line 773  public class AddressSearch { Line 805  public class AddressSearch {
805                                    
806                  // Opbyg æøå varianter over alle fundne aliaser                  // Opbyg æøå varianter over alle fundne aliaser
807                                    
808                  @SuppressWarnings("unchecked")                  HashSet<String> variants = new HashSet<String>( aliasSet );
                 HashSet<String> variants = (HashSet<String>) aliasSet.clone();  
809                                    
810                  for (String vVejnavn : variants) {                                                        for (String vVejnavn : variants) {                                      
811                          // danske tegn 1                          // danske tegn 1
# Line 794  public class AddressSearch { Line 825  public class AddressSearch {
825                          aliasSet.add( vVejnavn.replace("oe", "ø").replace("aa", "å") );                          aliasSet.add( vVejnavn.replace("oe", "ø").replace("aa", "å") );
826                                                    
827                          //danske tegn 3                          //danske tegn 3
828                          aliasSet.add( vejnavn.replace("æ", "ae").replace("ø", "oe").replace("å", "aa") );                          aliasSet.add( vVejnavn.replace("æ", "ae").replace("ø", "oe").replace("å", "aa") );
829                          aliasSet.add( vejnavn.replace("ae", "æ").replace("oe", "ø").replace("aa", "å") );                          aliasSet.add( vVejnavn.replace("ae", "æ").replace("oe", "ø").replace("aa", "å") );
830                                                    
831                                                    
832                          //udenlandsketegn                          //udenlandsketegn
833                          aliasSet.add(vejnavn.replace("u", "ü") );                          aliasSet.add( vVejnavn.replace("u", "ü") );
834                          aliasSet.add(vejnavn.replace("ü", "u") );                          aliasSet.add( vVejnavn.replace("ü", "u") );
835                                                    
836                          aliasSet.add(vejnavn.replace("ä", "æ") );                          aliasSet.add( vVejnavn.replace("ä", "æ") );
837                          aliasSet.add(vejnavn.replace("æ", "ä") );                          aliasSet.add( vVejnavn.replace("æ", "ä") );
838                                                    
839                          aliasSet.add(vejnavn.replace("ö", "ø") );                          aliasSet.add( vVejnavn.replace("ö", "ø") );
840                          aliasSet.add(vejnavn.replace("ø", "ö") );                          aliasSet.add( vVejnavn.replace("ø", "ö") );
841                  }                  }
842                                    
843                  return aliasSet;                  return aliasSet;
# Line 839  public class AddressSearch { Line 870  public class AddressSearch {
870          }          }
871                    
872          public Address getAdresse(int gadeid, String husnrStr) {          public Address getAdresse(int gadeid, String husnrStr) {
873                                    short husnr = Short.parseShort( husnrStr.replaceAll("[^\\d]","") );
874                  short husnr = Short.parseShort( husnrStr.replaceAll("\\d","") );                  String litra =  husnrStr.replaceAll("\\d", "");        
                 String litra =  husnrStr.replaceAll("^\\d", "");  
875                                    
876                  Map<Short,Map<String, Address>> gade = searchGadeidentAdresser.get(gadeid);                  Map<Short,Map<String, Address>> gade = searchGadeidentAdresser.get(gadeid);
877                  Map<String, Address> litraList = gade.get(husnr);                  Map<String, Address> litraList = gade.get(husnr);

Legend:
Removed from v.2783  
changed lines
  Added in v.2803

  ViewVC Help
Powered by ViewVC 1.1.20