Spaces:
Running
Running
import locationtagger | |
from geopy.geocoders import Nominatim | |
from geopy.exc import GeocoderTimedOut, GeocoderUnavailable | |
from models.location_models import LocationData, Coordinates, ErrorResponse | |
class LocationService: | |
def get_coordinates(data:dict) -> Coordinates | ErrorResponse: | |
print("Inside get coordinates") | |
print(data) | |
try: | |
location = data.get('location') | |
except: | |
return Coordinates(latitude=None , longitude=None) | |
location_string=None | |
city=None | |
state=None | |
country=None | |
if location: | |
place_entity = locationtagger.find_locations(text=location) | |
extracted_cities = list(place_entity.cities) | |
extracted_regions = list(place_entity.regions) | |
extracted_countries = list(place_entity.countries) | |
if extracted_cities: | |
city = extracted_cities[0] | |
if extracted_regions: | |
state = extracted_regions[0] | |
if extracted_countries: | |
country = extracted_countries[0] | |
# location_string = ' '.join(filter(None, [city, state, country])) | |
if not location_string: | |
location_string = location | |
else: | |
return ErrorResponse(error="No location information provided") | |
geolocator = Nominatim(user_agent="Geolocation") | |
print("Printing location string") | |
print(location_string) | |
if city or state or country : | |
location_string = city | |
elif country is None: | |
location_string = city | |
elif city is None: | |
location_string = state | |
elif state is None: | |
location_string = city | |
try: | |
getLoc = geolocator.geocode(location_string) | |
print(getLoc.latitude) | |
print(getLoc.longitude) | |
return Coordinates( | |
latitude=getLoc.latitude, | |
longitude=getLoc.longitude | |
) | |
except Exception as e: | |
print(f"Error {e}") | |
return Coordinates(latitude=None , longitude=None) |