Add Heat Map Generation

This commit is contained in:
Sebastian Lenzlinger 2024-01-05 13:52:04 +01:00
parent 7c58cfc335
commit 40adf8a397
4 changed files with 400 additions and 88 deletions

8
.idea/.gitignore generated vendored Normal file
View 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

View File

@ -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()

View File

@ -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,16 +135,18 @@ 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=geometry,
@ -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