Spaces:
Sleeping
Sleeping
| import requests | |
| import json | |
| import pandas as pd | |
| import gmplot | |
| import matplotlib.pyplot as plt | |
| from matplotlib.colors import LinearSegmentedColormap | |
| import os | |
| from dotenv import load_dotenv | |
| # Load the .env file | |
| load_dotenv() | |
| lta_data_mall_token = os.getenv('LTA_DATAMALL_API_KEY') | |
| headers = { | |
| 'AccountKey': lta_data_mall_token | |
| } | |
| payload = {} | |
| def get_lta_data(url_dict, headers=headers, payload=payload): | |
| for key, url in url_dict.items(): | |
| response = requests.request("GET", url, headers=headers, data=payload) | |
| json_data = response.text | |
| data_dict = json.loads(json_data) | |
| if key == "Incidents": | |
| incidents_df = pd.DataFrame(data_dict['value']) | |
| elif key == "SpeedBands": | |
| speedbands_df = pd.DataFrame(data_dict['value']) | |
| return incidents_df, speedbands_df | |
| def zip_columns(row): | |
| ''' | |
| Function to zip values from four columns | |
| ''' | |
| return list(zip([row['StartLat'], row['StartLon']], [row['EndLat'], row['EndLon']])) | |
| # Define color mapping function | |
| def get_color_from_value(value): | |
| ''' | |
| This function allows you to change the colors of the plotted points on Google Map. | |
| For example, you could use a gradient scale based on value ranges | |
| Return the color based on your logic | |
| ''' | |
| # Example: Mapping values from 0 to 100 to a gradient scale from red to green | |
| min_value = 0 | |
| max_value = 1 | |
| # Can be used with color gradient | |
| normalized_value = (value - min_value) / (max_value - min_value) # Normalize value between 0 and 1 | |
| if normalized_value <= 0.5: | |
| return '#ffff00' # Yellow color for values less than or equal to 0 | |
| elif normalized_value >= 0.5: | |
| return '#ff0000' # Red color for values greater than or equal to 1 | |
| else: | |
| return '#0000ff' # Blue color for other values | |
| def plot_polygon_with_speed(polygons, speeds, gmap, map='map.html'): | |
| # Define a custom color map from red to blue | |
| colors = [(1, 0, 0), (0, 0, 1)] # Red to Blue | |
| cmap = LinearSegmentedColormap.from_list("CustomMap", colors, N=8) | |
| # Plot polygons with corresponding colors based on speed | |
| for polygon, speed in zip(polygons, speeds): | |
| color = cmap(speed / 8) # Map speed to color gradient | |
| # Convert latitudes and longitudes to floats | |
| lats = [float(polygon[0][0]), float(polygon[0][1])] | |
| lngs = [float(polygon[1][0]), float(polygon[1][1])] | |
| gmap.polygon(lats, lngs, color='#%02x%02x%02x' % (int(color[0]*255), int(color[1]*255), int(color[2]*255)), edge_width=2) | |
| # Draw the map | |
| gmap.draw(map) | |