You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.
This is a utility class to geo-code uk postal addresses, useful for pre-persist interceptor on entities!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
public class GeoCoder {
private final static String ENCODING = "UTF-8";
private final static String KEY = "YOU_GOOGLE_KEY_HERE";
public static class Location {
public String lon, lat;
private Location(String lat, String lon) {
this.lon = lon;
this.lat = lat;
}
public String toString() {
return "Lat: " + lat + ", Lon: " + lon;
}
}
public static Location getLocation(String address) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(new URL(
"http://maps.google.com/maps/geo?q="
+ URLEncoder.encode(address, ENCODING)
+ "&output=csv&key=" + KEY).openStream()));
String line;
Location location = null;
int statusCode = -1;
while ((line = in.readLine()) != null) {
// Format: 200,6,42.730070,-73.690570
statusCode = Integer.parseInt(line.substring(0, 3));
if (statusCode == 200)
location = new Location(line.substring("200,6,".length(), line
.indexOf(',', "200,6,".length())), line.substring(line
.indexOf(',', "200,6,".length()) + 1, line.length()));
}
if (location == null) {
switch (statusCode) {
case 400:
throw new IOException("Bad Request");
case 500:
throw new IOException("Unknown error from Google Encoder");
case 601:
throw new IOException("Missing query");
case 602:
return null;
case 603:
throw new IOException("Legal problem");
case 604:
throw new IOException("No route");
case 610:
throw new IOException("Bad key");
case 620:
throw new IOException("Too many queries");
}
}
return location;
}
}