package dk.daoas.daoadresseservice; import java.io.IOException; import java.net.URLEncoder; import java.util.List; import com.google.code.geocoder.Geocoder; import com.google.code.geocoder.GeocoderRequestBuilder; import com.google.code.geocoder.model.GeocodeResponse; import com.google.code.geocoder.model.GeocoderAddressComponent; import com.google.code.geocoder.model.GeocoderRequest; import com.google.code.geocoder.model.GeocoderResult; import com.google.code.geocoder.model.GeocoderStatus; import com.google.gson.Gson; import dk.daoas.daoadresseservice.admin.ServiceConfig; import dk.daoas.daoadresseservice.beans.OSMAddress; import dk.daoas.daoadresseservice.util.HttpUtil; public class GeocodeHelper { public static void main(String[] args) throws IOException { ServiceConfig conf = new ServiceConfig(); int post = 8700; String vej = "Enebarvej"; long start1 = System.currentTimeMillis(); System.out.println( "Google:" + GeocodeHelper.googleHelper(conf, post, vej) ); long stop1 = System.currentTimeMillis(); long start2 = System.currentTimeMillis(); System.out.println( "OSM:" + GeocodeHelper.openstreetmapHelper(post, vej) ); long stop2 = System.currentTimeMillis(); System.out.println("Google: " + (stop1-start1)); System.out.println("OSM: " + (stop2-start2)); } public static String openstreetmapHelper(int postnr, String vejnavn) { try { String encVej = URLEncoder.encode(vejnavn, "UTF-8"); String url = "http://nominatim.openstreetmap.org/search?country=DK&street=" + encVej + "&postalcode=" + postnr + "&format=json&addressdetails=1"; //String url = "http://nominatim.openstreetmap.org/search?country=DK&street=" + encVej + "&format=json&addressdetails=1"; //System.out.println (url); String json = HttpUtil.getContentString(url, 1000); //System.out.println(json); Gson gson = new Gson(); OSMAddress adrList[] = gson.fromJson(json, OSMAddress[].class); //System.out.println("Count: " + adrList.length); if (adrList.length != 1) return null; if (adrList[0].address != null) { return adrList[0].address.road; } } catch (Exception e) { System.out.println( "Error: " + e.getMessage() ); } return null; } public static String googleHelper(ServiceConfig conf, int postnr, String vejnavn) { try { //Todo: Load api key from context config final Geocoder geocoder; if ( conf.googleApiKey != null ) { geocoder = new Geocoder(conf.googleApiUser, conf.googleApiKey); //Throws InvalidKeyException } else { geocoder = new Geocoder(); } String search = vejnavn + ", " + postnr + ", Denmark"; GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(search).setLanguage("en").getGeocoderRequest(); GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest); //System.out.println( "Status: >" + geocoderResponse.getStatus() + "<"); if ( geocoderResponse.getStatus() != GeocoderStatus.OK) { System.out.println("Google responded with " + geocoderResponse.getStatus() ); return null; } List resList = geocoderResponse.getResults(); //System.out.println( "Count: " + resList.size() ); if (resList.size() != 1) { return null; } GeocoderResult res = resList.get(0); List compList = res.getAddressComponents(); for (GeocoderAddressComponent c : compList) { //System.out.println(c); if (c.getTypes().contains("route")) { return c.getLongName(); } } } catch (Exception e) { System.out.println( "GoogleError: " + e.getMessage() ); } return null; } }