Help

Built with Seam

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;
	}
}