/* * Copyright 2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.springsource.greenhouse.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLEncoder; public class GeoLocation { private final static String ENCODING = "UTF-8"; // This is a Google API Key, generated by a member of the UA Spring team, can be changed if needed private final static String KEY = "ABQIAAAAtibbxuabc4IbMMd3Lz6YKxT8h4OmK3OACxx2GTyIwybqxjarwRRNysxHsfcnzRtf9nk6CkJc3fb05Q"; private String lon, lat; private GeoLocation (String lat, String lon) { this.lon = lon; this.lat = lat; } public String toString () { return "Lat: "+lat+", Lon: "+lon; } public Double toLongitude () { return new Double(lon); } public Double toLatitude () { return new Double(lat); } public static GeoLocation getGeoLocation (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; GeoLocation 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 GeoLocation ( 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; } }