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

Contents of /dao/DaoAdresseService/src/dk/daoas/daoadresseservice/GeocodeHelper.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2368 - (show annotations) (download)
Tue Feb 24 13:00:46 2015 UTC (9 years, 2 months ago) by torben
File size: 5551 byte(s)
Load nominatim Base url from config
1 package dk.daoas.daoadresseservice;
2
3 import java.io.IOException;
4 import java.net.URLEncoder;
5 import java.util.List;
6
7 import com.google.code.geocoder.Geocoder;
8 import com.google.code.geocoder.GeocoderRequestBuilder;
9 import com.google.code.geocoder.model.GeocodeResponse;
10 import com.google.code.geocoder.model.GeocoderAddressComponent;
11 import com.google.code.geocoder.model.GeocoderRequest;
12 import com.google.code.geocoder.model.GeocoderResult;
13 import com.google.code.geocoder.model.GeocoderStatus;
14 import com.google.gson.Gson;
15
16 import dk.daoas.daoadresseservice.admin.ServiceConfig;
17 import dk.daoas.daoadresseservice.beans.OSMAddress;
18 import dk.daoas.daoadresseservice.util.HttpUtil;
19 import dk.thoerup.circuitbreaker.CircuitBreaker;
20 import dk.thoerup.circuitbreaker.CircuitBreakerManager;
21 import dk.thoerup.circuitbreaker.CircuitInvocation;
22
23 public class GeocodeHelper {
24
25
26
27 public static void main(String[] args) throws IOException {
28 ServiceConfig conf = new ServiceConfig();
29 conf.osmTimeout = 1000;
30
31 int post = 8700;
32 String vej = "Enebarvej";
33
34 long start1 = System.currentTimeMillis();
35 System.out.println( "Google:" + GeocodeHelper.googleHelper(conf, post, vej) );
36 long stop1 = System.currentTimeMillis();
37
38 long start2 = System.currentTimeMillis();
39 System.out.println( "OSM:" + GeocodeHelper.openstreetmapHelper(conf, post, vej) );
40 long stop2 = System.currentTimeMillis();
41
42 System.out.println("Google: " + (stop1-start1));
43 System.out.println("OSM: " + (stop2-start2));
44 }
45
46 public static String openstreetmapHelper(ServiceConfig conf, int postnr, String vejnavn) {
47
48 try {
49
50 OSMInvocation wrapper = new OSMInvocation( conf, postnr, vejnavn );
51 CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("osm");
52
53 return (String) breaker.invoke(wrapper);
54
55
56 } catch (Exception e) {
57 System.out.println( "OSMError: " + e.getClass().getName() +" / "+ e.getMessage() );
58 }
59 return null;
60 }
61
62
63
64 public static String googleHelper(ServiceConfig conf, int postnr, String vejnavn) {
65 try {
66 GoogleInvocation wrapper = new GoogleInvocation( conf, postnr, vejnavn );
67 CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("google");
68
69 return (String) breaker.invoke(wrapper);
70
71 } catch (Exception e) {
72 System.out.println( "GoogleError: " + e.getClass().getName() +" / "+ e.getMessage() );
73 }
74 return null;
75 }
76
77
78 public static class OSMInvocation implements CircuitInvocation {
79 int postnr;
80 String vejnavn;
81 ServiceConfig conf;
82
83 public OSMInvocation(ServiceConfig conf, int postnr, String vejnavn) {
84 this.conf = conf;
85 this.postnr= postnr;
86 this.vejnavn = vejnavn;
87 }
88
89 @Override
90 public String proceed() throws Exception {
91 //TimingHelper timer = new TimingHelper();
92 String encVej = URLEncoder.encode(vejnavn, "UTF-8");
93
94
95 String url = conf.nominatimBase + "/search?country=DK&street=" + encVej + "&postalcode=" + postnr + "&format=json&addressdetails=1";
96
97 //String url = "http://nominatim.openstreetmap.org/search?country=DK&street=" + encVej + "&format=json&addressdetails=1";
98 //System.out.println (url);
99
100 String json = HttpUtil.getContentString(url, conf.osmTimeout);
101 //System.out.println(json);
102
103 Gson gson = new Gson();
104 OSMAddress adrList[] = gson.fromJson(json, OSMAddress[].class);
105
106 //timer.printElapsed("OSM elapsed");
107
108 //System.out.println("Count: " + adrList.length);
109 if (adrList.length != 1)
110 return null;
111
112 if (adrList[0].address != null) {
113 return adrList[0].address.road;
114 }
115
116 return null;
117 }
118 }
119
120
121 public static class GoogleInvocation implements CircuitInvocation {
122 ServiceConfig conf;
123 int postnr;
124 String vejnavn;
125
126 public GoogleInvocation(ServiceConfig conf, int postnr, String vejnavn) {
127 this.conf = conf;
128 this.postnr= postnr;
129 this.vejnavn = vejnavn;
130
131 }
132
133 @Override
134 public String proceed() throws Exception {
135
136 final Geocoder geocoder;
137 if ( conf.googleApiKey != null ) {
138 geocoder = new Geocoder(conf.googleApiUser, conf.googleApiKey); //Throws InvalidKeyException
139 } else {
140 geocoder = new Geocoder();
141 }
142 //TimingHelper timer = new TimingHelper();
143
144 String search = vejnavn + ", " + postnr + ", Denmark";
145 GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(search).setLanguage("en").getGeocoderRequest();
146 GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
147
148 //timer.printElapsed("Google elapsed");
149
150 //System.out.println( "Status: >" + geocoderResponse.getStatus() + "<");
151 if ( geocoderResponse.getStatus() != GeocoderStatus.OK) {
152
153 if (geocoderResponse.getStatus() == GeocoderStatus.ZERO_RESULTS) {
154 return null;
155 } else {
156 System.out.println("Google responded with " + geocoderResponse.getStatus() );
157 //Hvis det er alvorlige fejl skal vi afbryde med exception og trigger circuitbreakeren
158 throw new Exception("Google responded with " + geocoderResponse.getStatus() );
159 }
160
161 }
162
163 List<GeocoderResult> resList = geocoderResponse.getResults();
164 //System.out.println( "Count: " + resList.size() );
165
166 if (resList.size() != 1) {
167 return null;
168 }
169 GeocoderResult res = resList.get(0);
170
171 List<GeocoderAddressComponent> compList = res.getAddressComponents();
172 for (GeocoderAddressComponent c : compList) {
173 //System.out.println(c);
174 if (c.getTypes().contains("route")) {
175 return c.getLongName();
176 }
177 }
178 return null;
179 }
180
181 }
182
183 }

  ViewVC Help
Powered by ViewVC 1.1.20