Zayeemk commited on
Commit
e929ca4
·
verified ·
1 Parent(s): e7da8f8

Update route_optimizer/green_route_optimizer.py

Browse files
route_optimizer/green_route_optimizer.py CHANGED
@@ -1,48 +1,65 @@
1
  # route_optimizer/green_route_optimizer.py
2
 
3
  import math
 
4
 
5
  class GreenRouteOptimizer:
6
  """
7
- Green Route Optimizer class.
8
- Provides route optimization and recommends the most eco-friendly route.
9
  """
10
 
11
- # Approximate emission factors (kg CO2 per km)
12
  EMISSION_FACTORS = {
13
- "driving": 0.21, # example: car
14
- "cycling": 0.0, # bicycles produce zero direct emissions
15
- "walking": 0.0 # walking produces zero direct emissions
16
  }
17
 
18
- def __init__(self):
19
- pass
20
 
21
- def optimize(self, start, end, mode="driving"):
22
  """
23
- Returns a mock optimized route for a given transport mode.
24
- Uses Euclidean distance as a simple approximation.
 
25
  """
26
- distance_km = math.dist(start, end)
 
 
 
 
 
 
 
 
 
 
 
27
  optimized_route = {
28
- "start": start,
29
- "end": end,
30
  "mode": mode,
31
  "optimized_distance_km": round(distance_km, 2),
32
  "estimated_emission_kg": round(distance_km * self.EMISSION_FACTORS.get(mode, 0.21), 3)
33
  }
34
  return optimized_route
35
 
36
- def recommend_green_routes(self, start, end):
37
  """
38
- Recommends the greenest route among driving, cycling, and walking.
39
- Returns a sorted list by estimated emissions.
40
  """
 
 
 
 
41
  routes = []
42
  for mode in self.EMISSION_FACTORS.keys():
43
- route = self.optimize(start, end, mode)
44
  routes.append(route)
45
 
46
- # Sort routes by estimated emissions (ascending)
47
  routes_sorted = sorted(routes, key=lambda x: x["estimated_emission_kg"])
48
  return routes_sorted
 
1
  # route_optimizer/green_route_optimizer.py
2
 
3
  import math
4
+ from geopy.geocoders import Nominatim
5
 
6
  class GreenRouteOptimizer:
7
  """
8
+ Green Route Optimizer for rail, road, and ship transport.
9
+ Accepts place names (with optional country/state codes) and recommends the greenest route.
10
  """
11
 
12
+ # Example emission factors (kg CO2 per km)
13
  EMISSION_FACTORS = {
14
+ "rail": 0.041, # kg CO2 per km
15
+ "road": 0.21, # kg CO2 per km
16
+ "ship": 0.015 # kg CO2 per km
17
  }
18
 
19
+ def __init__(self, user_agent="green_route_optimizer"):
20
+ self.geolocator = Nominatim(user_agent=user_agent)
21
 
22
+ def geocode(self, place_name):
23
  """
24
+ Converts a place name to latitude and longitude.
25
+ Example input: "New York, NY" or "London, UK"
26
+ Returns a tuple: (lat, lon)
27
  """
28
+ location = self.geolocator.geocode(place_name)
29
+ if location:
30
+ return (location.latitude, location.longitude)
31
+ else:
32
+ raise ValueError(f"Could not geocode place: {place_name}")
33
+
34
+ def optimize(self, start_coords, end_coords, mode="road"):
35
+ """
36
+ Returns a mock optimized route for the specified transport mode.
37
+ Distance is calculated as Euclidean distance (approximation).
38
+ """
39
+ distance_km = math.dist(start_coords, end_coords)
40
  optimized_route = {
41
+ "start": start_coords,
42
+ "end": end_coords,
43
  "mode": mode,
44
  "optimized_distance_km": round(distance_km, 2),
45
  "estimated_emission_kg": round(distance_km * self.EMISSION_FACTORS.get(mode, 0.21), 3)
46
  }
47
  return optimized_route
48
 
49
+ def recommend_green_routes(self, start_place, end_place):
50
  """
51
+ Recommends the greenest route among rail, road, and ship using place names.
52
+ Returns a list of routes sorted by lowest estimated emissions.
53
  """
54
+ # Convert place names to coordinates
55
+ start_coords = self.geocode(start_place)
56
+ end_coords = self.geocode(end_place)
57
+
58
  routes = []
59
  for mode in self.EMISSION_FACTORS.keys():
60
+ route = self.optimize(start_coords, end_coords, mode)
61
  routes.append(route)
62
 
63
+ # Sort by estimated emissions (ascending)
64
  routes_sorted = sorted(routes, key=lambda x: x["estimated_emission_kg"])
65
  return routes_sorted