def test_reverse_geocode(self): lat, lng = 40.714224, -73.961452 gmaps = GoogleMaps(GMAPS_API_KEY) results = gmaps.reverse_geocode(lat, lng) first = results[0] for info in ({'long_name': '285', 'short_name': '285', 'types': ['street_number']}, {'long_name': 'Bedford Ave', 'short_name': 'Bedford Ave', 'types': ['route']}, {'long_name': 'New York', 'short_name': 'New York', 'types': ['locality', 'political']}, {'long_name': '11211', 'short_name': '11211', 'types': ['postal_code']}, {'long_name': 'New York', 'short_name': 'NY', 'types': ['administrative_area_level_1', 'political']}, {'long_name': 'United States', 'short_name': 'US', 'types': ['country', 'political']}): self.assertIn(info, first['address_components']) self.assertEqual(first['formatted_address'], '285 Bedford Ave, Brooklyn, NY 11211, USA') location = first['geometry']['location'] self.assertAlmostEquals(location['lat'], lat, 3) self.assertAlmostEquals(location['lng'], lng, 3)
def to_address(value, google_api_key, min_accuracy=1): if value is None: return None gmaps = GoogleMaps(google_api_key) if isinstance(value, (list, tuple)) and len(value) >= 2: if isinstance(value[0], (int, float)) and isinstance(value[1], (int, float)): result = gmaps.reverse_geocode(value[0], value[1]) else: result = gmaps.geocode(value[0] + ' near ' + value[1]) else: result = gmaps.geocode(value) address = result['Placemark'][0]['address'] details = result['Placemark'][0]['AddressDetails'] accuracy = details['Accuracy'] # Raise an error if the accuracy is insufficient. if accuracy < min_accuracy: raise GoogleMapsError(602) # unknown address country = containers.find(details, 'CountryName', '') country_code = containers.find(details, 'CountryNameCode', '') state = containers.find(details, 'AdministrativeAreaName', '') state_code = containers.find(details, 'AdministrativeAreaNameCode', '') locality = containers.find(details, 'LocalityName', '') postal_code = containers.find(details, 'PostalCodeNumber', '') street_address = containers.find(details, 'ThoroughfareName', '') try: lng, lat = result['Placemark'][0]['Point']['coordinates'][0:2] except: lng, lat = None, None # Run through some common fixups. address_dict = dict( country=country, country_code=country_code, state=state, state_code=state_code, locality=locality, street_address=street_address, postal_code=postal_code, formatted=address, latitude=lat, longitude=lng, ) address_fixups(address_dict) return address_dict
def test_reverse_geocode(self): """Test googlemaps reverse_geocode() and latlng_to_address()""" lat, lng = 40.714224, -73.961452 gmaps = GoogleMaps(GMAPS_API_KEY) result = gmaps.reverse_geocode(lat, lng) self.assertEqual(result['Status']['code'], 200) result = result['Placemark'][0] self.assertEqual(searchkey(result, 'CountryName'), 'USA') self.assertEqual(searchkey(result, 'PostalCodeNumber'), '11211') self.assertEqual(searchkey(result, 'ThoroughfareName'), '277 Bedford Ave') self.assertEqual(searchkey(result, 'LocalityName'), 'Brooklyn') self.assertEqual(searchkey(result, 'AdministrativeAreaName'), 'NY') self.assertEqual(searchkey(result, 'CountryNameCode'), 'US') addr = searchkey(result, 'address') self.assertEqual(addr, '277 Bedford Ave, Brooklyn, NY 11211, USA') lat2, lng2 = searchkey(result, 'coordinates')[1::-1] self.assertAlmostEquals(lat, lat2, 3) self.assertAlmostEquals(lng, lng2, 3) addr2 = gmaps.latlng_to_address(lat, lng) self.assertEqual(addr, addr2)
def test_reverse_geocode(self): """Test googlemaps reverse_geocode() and latlng_to_address()""" lat, lng = 40.714224, -73.961452 gmaps = GoogleMaps(GMAPS_API_KEY) result = gmaps.reverse_geocode(lat, lng) self.assertEqual(result['status'], 'OK') result = result['results'][0] # self.assertEqual(searchkey(result, 'CountryName'), 'USA') # self.assertEqual(searchkey(result, 'PostalCodeNumber'), '11211') # self.assertEqual(searchkey(result, 'ThoroughfareName'), '277 Bedford Ave') # self.assertEqual(searchkey(result, 'LocalityName'), 'Brooklyn') # self.assertEqual(searchkey(result, 'AdministrativeAreaName'), 'NY') # self.assertEqual(searchkey(result, 'CountryNameCode'), 'US') addr = searchkey(result, 'formatted_address') self.assertEqual(addr, '285 Bedford Avenue, Brooklyn, NY 11211, USA') loc = searchkey(result, 'location') lat2, lng2 = loc['lat'], loc['lng'] self.assertAlmostEquals(lat, lat2, 3) self.assertAlmostEquals(lng, lng2, 3) addr2 = gmaps.latlng_to_address(lat, lng) self.assertEqual(addr, addr2)