package com.catglo.deliveryDatabase; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import com.google.android.maps.GeoPoint; public class ZipCode { public static final int STATE_NEEDS_LOOKUP = 1; public static final int STATE_LOOKUP_SUCCESS = 2; public static final int STATE_LOOKUP_FAILED = 3; public static final int STATE_NOT_IN_DELIVERY_AREA = 4; public int zipCode; GeoPoint geoPoint; public float distance; public int state; float longitude; float latitude; String provence; // <AdministrativeAreaName>WA</AdministrativeAreaName> static private Pattern findStateFromGeocode = Pattern.compile("\\<AdministrativeAreaName\\>(\\w+)\\<"); // <Point><coordinates>-121.9931680,47.8785090,0</coordinates></Point> static private Pattern parsePointCordinates = Pattern .compile("\\<Point\\>\\<coordinates\\>([0-9\\.\\-]+),([0-9\\.\\-]+)"); // <address>Snohomish, WA 98290, USA</address> static private Pattern findAddress = Pattern.compile("\\<address\\>.*\\<\\/address"); ZipCode(final String key) { super(); zipCode = new Integer(key); } ZipCode(final int zipcode, final int state, final float lat, final float lon, final float dist, final String st) { super(); zipCode = zipcode; this.state = state; geoPoint = new GeoPoint((int) (lat * 1E6), (int) (lon * 1E6)); longitude = lon; latitude = lat; distance = dist; provence = st; } public ZipCode(final int zipcode, final int state, final HttpClient client) { super(); zipCode = zipcode; this.state = state; getZipCodeGeopoint(this, client); } static public ZipCode getZipCodeGeopoint(final ZipCode cur, final HttpClient client) { // String provence String requestString = new String("http://maps.google.com/maps/geo?q=" + cur.zipCode + "&output=xml&key=061vUOvKcZ-cIdJqdiHt1Yix5A_Zi5CoquFaL_g"); final HttpGet request = new HttpGet(requestString); HttpResponse response; try { response = client.execute(request); InputStream in; in = response.getEntity().getContent(); final BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String line = null; while ((line = reader.readLine()) != null) { final Matcher m2 = findStateFromGeocode.matcher(line); if (m2.find()) { cur.provence = m2.group(1); } final Matcher m = parsePointCordinates.matcher(line); while (m.find()) { final String lng = m.group(1); final String lat = m.group(2); try { cur.latitude = new Float(lng); cur.latitude = new Float(lat); cur.geoPoint = new GeoPoint((int) (cur.latitude * 1E6), (int) (cur.longitude * 1E6)); return cur; } catch (final Exception e) { return null; } } // m = findAddress.matcher(line); // if (m.find()){ // nearByAddress = m.group(1); // } } in.close(); } catch (final Exception ex) { //Log.i("ZIP", "reverse geocode Lookup failed "); } return null; } }