def test_add_location(): db = Manifest() latitude, longitude, name = helper.get_test_location() db.add_location(latitude, longitude, name) retrieved_name = db.get_location_name(latitude, longitude, 5) assert name == retrieved_name
def test_get_location_name_outside_threshold(): db = Manifest() latitude, longitude, name = helper.get_test_location() db.add_location(latitude, longitude, name) new_latitude = helper.random_coordinate(latitude, 1) new_longitude = helper.random_coordinate(longitude, 1) # 800 meters retrieved_name = db.get_location_name(new_latitude, new_longitude, 800) assert retrieved_name is None
def test_get_location_name_within_threshold(): db = Manifest() latitude, longitude, name = helper.get_test_location() db.add_location(latitude, longitude, name) print(latitude) new_latitude = helper.random_coordinate(latitude, 4) new_longitude = helper.random_coordinate(longitude, 4) print(new_latitude) # 10 miles retrieved_name = db.get_location_name(new_latitude, new_longitude, 1600*10) assert name == retrieved_name, 'Name (%r) did not match retrieved name (%r)' % (name, retrieved_name)
def place_name(lat, lon): lookup_place_name_default = {'default': __DEFAULT_LOCATION__} if (lat is None or lon is None): return lookup_place_name_default # Convert lat/lon to floats if (not isinstance(lat, float)): lat = float(lat) if (not isinstance(lon, float)): lon = float(lon) # Try to get cached location first db = Manifest() # 3km distace radious for a match cached_place_name = db.get_location_name(lat, lon, 3000) # We check that it's a dict to coerce an upgrade of the location # db from a string location to a dictionary. See gh-160. if (isinstance(cached_place_name, dict)): return cached_place_name lookup_place_name = {} geolocation_info = lookup(lat=lat, lon=lon) if (geolocation_info is not None and 'address' in geolocation_info): address = geolocation_info['address'] for loc in ['city', 'state', 'country']: if (loc in address): lookup_place_name[loc] = address[loc] # In many cases the desired key is not available so we # set the most specific as the default. if ('default' not in lookup_place_name): lookup_place_name['default'] = address[loc] if (lookup_place_name): db.add_location(lat, lon, lookup_place_name) # TODO: Maybe this should only be done on exit and not for every write. db.update_location_db() if ('default' not in lookup_place_name): lookup_place_name = lookup_place_name_default return lookup_place_name