var geocoder = new google.maps.Geocoder(); geocoder.geocode({'latLng': foundLoc}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[1]) { var loc = getCityState(results); } } }); function getCityState(results) { var citystateArray = results[1].formatted_address.split(",",2); var city = citystateArray[0]; var state = citystateArray[1].substring(1, 3); return (city + ', ' + state) }
This is what I use now, and it works in about 90% of cases. In other cases, formatted_address contains the city and the city along with the state, sometimes only the city and the city, and sometimes everything you can dream of.
I have not yet found a CONSISTENT way to ALWAYS get the city / state from the results of the Google Maps API. Do any of you guys have one? Thanks.
An example of one answer that Google uses as an example on its page:
{ "status": "OK", "results": [ { "types": [ "street_address" ], "formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA", "address_components": [ { "long_name": "1600", "short_name": "1600", "types": [ "street_number" ] }, { "long_name": "Amphitheatre Pkwy", "short_name": "Amphitheatre Pkwy", "types": [ "route" ] }, { "long_name": "Mountain View", "short_name": "Mountain View", "types": [ "locality", "political" ] }, { "long_name": "California", "short_name": "CA", "types": [ "administrative_area_level_1", "political" ] }, { "long_name": "United States", "short_name": "US", "types": [ "country", "political" ] }, { "long_name": "94043", "short_name": "94043", "types": [ "postal_code" ] } ], "geometry": { "location": { "lat": 37.4219720, "lng": -122.0841430 }, "location_type": "ROOFTOP", "viewport": { "southwest": { "lat": 37.4188244, "lng": -122.0872906 }, "northeast": { "lat": 37.4251196, "lng": -122.0809954 } } } } ] }
Sometimes these fields do not matter, sometimes they do.