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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20