geo_location_api / services /location_service.py
Omkar008's picture
Upload 9 files
2542be6 verified
raw
history blame
2.19 kB
import locationtagger
from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut, GeocoderUnavailable
from models.location_models import LocationData, Coordinates, ErrorResponse
class LocationService:
@staticmethod
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)