Add Heat Map Generation
This commit is contained in:
parent
7c58cfc335
commit
cd6746d0ea
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
@ -48,7 +48,7 @@ class RemoteDB:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.exception(f"Connection failed: {e}")
|
logger.exception(f"Connection failed: {e}")
|
||||||
|
|
||||||
def execute_query(self, query):
|
def execute_query(self, query: str):
|
||||||
session = self.Session()
|
session = self.Session()
|
||||||
try:
|
try:
|
||||||
result = session.execute(sqlalchemy.text(query))
|
result = session.execute(sqlalchemy.text(query))
|
||||||
@ -60,6 +60,18 @@ class RemoteDB:
|
|||||||
finally:
|
finally:
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
|
def execute_command(self, cmd: str):
|
||||||
|
session = self.Session()
|
||||||
|
try:
|
||||||
|
result = session.execute(sqlalchemy.text(cmd))
|
||||||
|
session.commit()
|
||||||
|
logger.debug(f"Command {cmd} committed.")
|
||||||
|
except Exception as e:
|
||||||
|
session.rollback()
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if self.engine:
|
if self.engine:
|
||||||
self.engine.dispose()
|
self.engine.dispose()
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import folium
|
|||||||
from folium import plugins
|
from folium import plugins
|
||||||
import logging
|
import logging
|
||||||
from db_connector import RemoteDB
|
from db_connector import RemoteDB
|
||||||
|
import shapely
|
||||||
from shapely import wkb
|
from shapely import wkb
|
||||||
import json
|
import json
|
||||||
|
|
||||||
@ -60,6 +61,22 @@ color_dict = {
|
|||||||
"T100": "gray"
|
"T100": "gray"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def drop_heat_view():
|
||||||
|
drop_heat_view_sql = """
|
||||||
|
DROP VIEW IF EXISTS heat;
|
||||||
|
"""
|
||||||
|
|
||||||
|
remote_db = RemoteDB()
|
||||||
|
try:
|
||||||
|
result = remote_db.execute_query(drop_heat_view_sql)
|
||||||
|
logger.info("Heat View dropped.")
|
||||||
|
except Exception as e:
|
||||||
|
logger.exception(f"Exception while dropping heat view. Msg: {e} ")
|
||||||
|
finally:
|
||||||
|
remote_db.close()
|
||||||
|
logger.debug(f"RemoteDB object closed.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def create_heat_view():
|
def create_heat_view():
|
||||||
create_heat_view_sql = """
|
create_heat_view_sql = """
|
||||||
@ -77,13 +94,11 @@ def create_heat_view():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
remote_db = RemoteDB()
|
remote_db = RemoteDB()
|
||||||
remote_db.execute_query(create_heat_view_sql)
|
remote_db.execute_command(create_heat_view_sql)
|
||||||
remote_db.close()
|
remote_db.close()
|
||||||
logger.info("Heat View Created")\
|
logger.info("Heat View Created")\
|
||||||
|
|
||||||
def get_heat_view():
|
def get_heat_view():
|
||||||
#create_heat_view()
|
|
||||||
|
|
||||||
get_heat_view_sql = """
|
get_heat_view_sql = """
|
||||||
SELECT latitude, longitude, year
|
SELECT latitude, longitude, year
|
||||||
FROM heat;
|
FROM heat;
|
||||||
@ -120,19 +135,21 @@ def create_heat_map_with_time():
|
|||||||
index=index,
|
index=index,
|
||||||
name="Accident Heatmap")
|
name="Accident Heatmap")
|
||||||
hm.add_to(interactive_map)
|
hm.add_to(interactive_map)
|
||||||
|
interactive_map.save("test.html")
|
||||||
|
|
||||||
# Add signald speeds data
|
# Add signald speeds data
|
||||||
sig_speeds_data = get_signaled_speed_sql()
|
sig_speeds_data = get_signaled_speed_sql()
|
||||||
sig_speed_df = gpd.GeoDataFrame(sig_speeds_data, columns=['tempo','wkb_geometry'])
|
sig_speed_df = pd.DataFrame(sig_speeds_data, columns=['tempo','wkb_geometry'])
|
||||||
sig_speed_df['geometry'] = sig_speed_df['wkb_geometry'].apply(lambda x: wkb.loads(x, hex=True))
|
sig_speed_df['geometry'] = sig_speed_df['wkb_geometry'].apply(lambda x: wkb.loads(x, hex=True))
|
||||||
|
logger.debug(f"{sig_speed_df.head()}")
|
||||||
|
sig_speed_gdf = gpd.GeoDataFrame(sig_speed_df, geometry="geometry")
|
||||||
|
|
||||||
for speedlimit in speedLimits:
|
for speedlimit in speedLimits:
|
||||||
signal_speed = sig_speed_df[sig_speed_df["tempo"].str.contains(speedlimit, case=False)]
|
signal_speed = sig_speed_gdf[sig_speed_gdf["tempo"].str.contains(speedlimit, case=False)]
|
||||||
geometry = signal_speed['geometry']
|
geometries = json.loads(json.dumps(shapely.geometry.mapping(signal_speed['geometry'].unary_union)))
|
||||||
|
|
||||||
folium.GeoJson(
|
folium.GeoJson(
|
||||||
data=geometry,
|
data=geometries,
|
||||||
name=f'Signaled Speed {speedlimit}',
|
name=f'Signaled Speed {speedlimit}',
|
||||||
color=color_dict[speedlimit],
|
color=color_dict[speedlimit],
|
||||||
show=False,
|
show=False,
|
||||||
@ -140,6 +157,8 @@ def create_heat_map_with_time():
|
|||||||
).add_to(interactive_map)
|
).add_to(interactive_map)
|
||||||
|
|
||||||
folium.LayerControl(collapsed=True).add_to(interactive_map)
|
folium.LayerControl(collapsed=True).add_to(interactive_map)
|
||||||
|
interactive_map.save("test.html")
|
||||||
|
|
||||||
|
|
||||||
def get_signaled_speed_sql():
|
def get_signaled_speed_sql():
|
||||||
sigspeed_sql = """
|
sigspeed_sql = """
|
||||||
@ -165,5 +184,7 @@ def save_map_as_html(map, name):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
drop_heat_view()
|
||||||
|
create_heat_view()
|
||||||
create_heat_map_with_time()
|
create_heat_map_with_time()
|
||||||
save_map_as_html(interactive_map, "heat_map_with_time")
|
save_map_as_html(interactive_map, "heat_map_with_time")
|
||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user