/[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 2801 by torben, Wed Jan 13 10:42:47 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 839  public class AddressSearch { Line 871  public class AddressSearch {
871          }          }
872                    
873          public Address getAdresse(int gadeid, String husnrStr) {          public Address getAdresse(int gadeid, String husnrStr) {
874                                    short husnr = Short.parseShort( husnrStr.replaceAll("[^\\d]","") );
875                  short husnr = Short.parseShort( husnrStr.replaceAll("\\d","") );                  String litra =  husnrStr.replaceAll("\\d", "");        
                 String litra =  husnrStr.replaceAll("^\\d", "");  
876                                    
877                  Map<Short,Map<String, Address>> gade = searchGadeidentAdresser.get(gadeid);                  Map<Short,Map<String, Address>> gade = searchGadeidentAdresser.get(gadeid);
878                  Map<String, Address> litraList = gade.get(husnr);                  Map<String, Address> litraList = gade.get(husnr);

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

  ViewVC Help
Powered by ViewVC 1.1.20