--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/15 14:17:03 2300
+++ dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AdressSearch.java 2015/02/16 13:49:56 2310
@@ -3,6 +3,7 @@
import java.sql.SQLException;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -23,6 +24,8 @@
List
alleAdresser;
+ Map helperCache;
+
Map hundredePct;
@@ -31,6 +34,8 @@
int postnr=0;
boolean google = false;
+ boolean osm = false;
+ String helperSearchKey = "";
try {
postnr = Integer.parseInt(postnrStr);
@@ -53,12 +58,39 @@
}
Long gadeident = postnrVeje.get(vasketVejnavn);
+
+
+ if ( gadeident == null) {
+ helperSearchKey = "" + postnr + "/" + vasketVejnavn;
+ gadeident = helperCache.get(helperSearchKey);
+ }
+
+
if ( gadeident == null) {
String googleVej = GeocodeHelper.googleHelper(postnr, split.vej );
+ google = true;
+
if (googleVej != null) {
String googleVasket = AddressUtils.vaskVejnavn( googleVej );
gadeident = postnrVeje.get(googleVasket);
- google = true;
+
+ if (gadeident != null) {
+ helperCache.put(helperSearchKey, gadeident);
+ }
+ }
+ }
+
+ if ( gadeident == null) {
+ String osmVej = GeocodeHelper.openstreetmapHelper(postnr, split.vej );
+ osm = true;
+
+ if (osmVej != null) {
+ String osmVasket = AddressUtils.vaskVejnavn( osmVej );
+ gadeident = postnrVeje.get(osmVasket);
+
+ if (gadeident != null) {
+ helperCache.put(helperSearchKey, gadeident);
+ }
}
}
@@ -86,6 +118,7 @@
SearchResult res = new SearchResult(addr);
res.google = google;
+ res.osm = osm;
return res;
}
@@ -93,7 +126,9 @@
public void buildSearchStructures() throws SQLException{
searchPostnrVejnavnGadeid = new HashMap>();
searchGadeidentAdresser = new HashMap>();
-
+ helperCache = new ConcurrentHashMap();
+
+ long start1 = System.currentTimeMillis();
System.out.println("Build -- stage 1");
alleAdresser = DatabaseLayer.getAllAdresses();
@@ -136,6 +171,8 @@
////////////////////////////////////////////////////////////////////////////////////////
+ long start2 = System.currentTimeMillis();
+ System.out.println("Build, stage1 elapsed: " + (start2-start1) );
System.out.println("Build -- stage 2 udvidet dækning");
List extDao = DatabaseLayer.getExtendedAdresslist();
@@ -193,6 +230,8 @@
idAddressMap = null;
//////////////////////////////////////////////////////////////////////////////////////
+ long start3 = System.currentTimeMillis();
+ System.out.println("Build, stage2 elapsed: " + (start3-start2) );
System.out.println("Build -- stage 3 - 100pct");
hundredePct = DatabaseLayer.get100PctList();
@@ -219,6 +258,8 @@
}
////////////////////////////////////////////////////////////////////////////////////
+ long stop = System.currentTimeMillis();
+ System.out.println("Build, stage3 elapsed: " + (stop-start3) );
System.out.println("Build -- Gathering statistics");
int direkteCount = 0;
@@ -247,6 +288,7 @@
System.out.println("Build: hundredePctCount: " + hundredePctCount);
System.out.println("Build: ikkeDaekketCount: " + ikkeDaekketCount);
+ System.out.println("Build: Total Elapsed: " + (stop-start1) );
System.out.println("Build Completed");
}
@@ -306,32 +348,11 @@
private Set findVejAliaser(String vejnavn) {
vejnavn = vejnavn.toLowerCase();
- Set aliasSet = new HashSet();
+ HashSet aliasSet = new HashSet();
aliasSet.add(vejnavn);
aliasSet.add(vejnavn.replace("alle", "allé") );
- aliasSet.add(vejnavn.replace("allé", "alle") );
-
- // danske tegn 1
- aliasSet.add(vejnavn.replace("æ", "ae") );
- aliasSet.add(vejnavn.replace("ø", "oe") );
- aliasSet.add(vejnavn.replace("å", "aa") );
- aliasSet.add(vejnavn.replace("ae", "æ") );
- aliasSet.add(vejnavn.replace("oe", "ø") );
- aliasSet.add(vejnavn.replace("aa", "å") );
-
- //danske tegn 2
- aliasSet.add( vejnavn.replace("æ", "ae").replace("ø", "oe") );
- aliasSet.add( vejnavn.replace("æ", "ae").replace("å", "aa") );
- aliasSet.add( vejnavn.replace("ø", "ae").replace("å", "aa") );
- aliasSet.add( vejnavn.replace("ae", "æ").replace("oe","ø") );
- aliasSet.add( vejnavn.replace("ae", "æ").replace("aa","å") );
- aliasSet.add( vejnavn.replace("oe", "ø").replace("aa", "å") );
-
- //danske tegn 3
- aliasSet.add( vejnavn.replace("æ", "ae").replace("ø", "oe").replace("å", "aa") );
- aliasSet.add( vejnavn.replace("ae", "æ").replace("oe", "ø").replace("aa", "å") );
-
+ aliasSet.add(vejnavn.replace("allé", "alle") );
aliasSet.add(vejnavn.replace("dronningens", "dr") );
aliasSet.add(vejnavn.replace("dr.", "dronningens") );
@@ -362,10 +383,41 @@
aliasSet.add(vejnavn.replace("ndr", "nordre") );
aliasSet.add(vejnavn.replace("sankt", "skt") );
+ aliasSet.add(vejnavn.replace("sankt", "sct") );
aliasSet.add(vejnavn.replace("skt", "sankt") );
aliasSet.add(vejnavn.replace("skt", "sct") );
- aliasSet.add(vejnavn.replace("sct", "skt") );
+ aliasSet.add(vejnavn.replace("sct", "skt") );
+
+ // Opbyg æøå varianter over alle fundne aliaser
+
+ @SuppressWarnings("unchecked")
+ HashSet variants = (HashSet) aliasSet.clone();
+
+ Iterator vIt = variants.iterator();
+ while ( vIt.hasNext() ) {
+ String vVejnavn = vIt.next();
+
+ // danske tegn 1
+ aliasSet.add( vVejnavn.replace("æ", "ae") );
+ aliasSet.add( vVejnavn.replace("ø", "oe") );
+ aliasSet.add( vVejnavn.replace("å", "aa") );
+ aliasSet.add( vVejnavn.replace("ae", "æ") );
+ aliasSet.add( vVejnavn.replace("oe", "ø") );
+ aliasSet.add( vVejnavn.replace("aa", "å") );
+
+ //danske tegn 2
+ aliasSet.add( vVejnavn.replace("æ", "ae").replace("ø", "oe") );
+ aliasSet.add( vVejnavn.replace("æ", "ae").replace("å", "aa") );
+ aliasSet.add( vVejnavn.replace("ø", "ae").replace("å", "aa") );
+ aliasSet.add( vVejnavn.replace("ae", "æ").replace("oe","ø") );
+ aliasSet.add( vVejnavn.replace("ae", "æ").replace("aa","å") );
+ aliasSet.add( vVejnavn.replace("oe", "ø").replace("aa", "å") );
+
+ //danske tegn 3
+ aliasSet.add( vejnavn.replace("æ", "ae").replace("ø", "oe").replace("å", "aa") );
+ aliasSet.add( vejnavn.replace("ae", "æ").replace("oe", "ø").replace("aa", "å") );
+ }
return aliasSet;
}