SYNC COMMIT

This commit is contained in:
Sebastian Lenzlinger 2024-01-04 18:20:55 +01:00
parent 843ed0a1a3
commit 6af1f734ef
4 changed files with 228 additions and 120 deletions

View File

@ -5,8 +5,10 @@ import folium
from folium import plugins from folium import plugins
import logging import logging
from db_connector import RemoteDB from db_connector import RemoteDB
from shapely import wkb
import json
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger('map.py') logger = logging.getLogger('map.py')
stream_handler = logging.StreamHandler() stream_handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
@ -28,13 +30,44 @@ fixed_map_zurich_original_coords = folium.Map(
doubleClickZoom=False doubleClickZoom=False
) )
gradient = {
0.1: 'blue',
0.3: 'cyan',
0.5: 'lime',
0.7: 'yellow',
0.9: 'red'
}
interactive_map = folium.Map(
location=zurich_coordinates,
zoom_start=13,
zoom_control=True,
dragging=True,
scrollWheelZoom=True,
doubleClickZoom=False,
tiles="cartodb positron"
)
speedLimits = ["T0","T10","T20","T30","T50","T60","T80","T100"]
color_dict = {
"T0": "red",
"T10": "blue",
"T20": "orange",
"T30": "green",
"T50": "yellow",
"T60": "purple",
"T80": "pink",
"T100": "gray"
}
def create_heat_view(): def create_heat_view():
create_heat_view_sql = """ create_heat_view_sql = """
CREATE VIEW heat AS CREATE VIEW heat AS
SELECT SELECT
ST_Y(geometry) AS latitude, ST_Y(geometry) AS latitude,
ST_X(geometry) AS longitude, ST_X(geometry) AS longitude,
AccidentYear AS Weight AccidentYear AS year
FROM FROM
accidents accidents
WHERE WHERE
@ -49,10 +82,10 @@ def create_heat_view():
logger.info("Heat View Created")\ logger.info("Heat View Created")\
def get_heat_view(): def get_heat_view():
create_heat_view() #create_heat_view()
get_heat_view_sql = """ get_heat_view_sql = """
SELECT latitude, longitude, weight SELECT latitude, longitude, year
FROM heat; FROM heat;
""" """
@ -61,17 +94,76 @@ def get_heat_view():
# Get heat map data from database # Get heat map data from database
try: try:
result = remote_db.execute_query(get_heat_view_sql) result = remote_db.execute_query(get_heat_view_sql)
logger.info(f"Succesfully retrieved result {result}") logger.info(f"Succesfully retrieved result")
return result return result
except Exception as e: except Exception as e:
logger.exception(f"Failed getting result with exception {e}") logger.exception(f"Failed getting result with exception {e}")
finally: finally:
remote_db.close() remote_db.close()
def create_acc_map(): def create_heat_map_with_time():
# Process heat map data # Process heat map data
pass heat_view_data = get_heat_view()
#heat_df = pd.DataFrame(result, columns=['latitude', 'longitude', 'weight']) heat_df = gpd.GeoDataFrame(heat_view_data, columns=['latitude', 'longitude', 'year'])
assert not heat_df.empty, f" Heat Dataframe is empty: {heat_df.head(5)}"
heat_data = [[[row['latitude'], row['longitude']] for index, row in heat_df[heat_df['year'] == i].iterrows()] for
i in range(2011, 2023)]
index = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022]
# plot heat map
hm = plugins.HeatMapWithTime(heat_data,
auto_play=False,
max_opacity=0.8,
index=index,
name="Accident Heatmap")
hm.add_to(interactive_map)
# Add signald speeds data
sig_speeds_data = get_signaled_speed_sql()
sig_speed_df = gpd.GeoDataFrame(sig_speeds_data, columns=['tempo','wkb_geometry'])
sig_speed_df['geometry'] = sig_speed_df['wkb_geometry'].apply(lambda x: wkb.loads(x, hex=True))
for speedlimit in speedLimits:
signal_speed = sig_speed_df[sig_speed_df["tempo"].str.contains(speedlimit, case=False)]
geometry = signal_speed['geometry']
folium.GeoJson(
data=geometry,
name=f'Signaled Speed {speedlimit}',
color=color_dict[speedlimit],
show=False,
line_cap="butt",
).add_to(interactive_map)
folium.LayerControl(collapsed=True).add_to(interactive_map)
def get_signaled_speed_sql():
sigspeed_sql = """
SELECT
temporegime_technical as tempo,
wkb_geometry
FROM signaled_speeds;
"""
remote_db = RemoteDB()
try:
result = remote_db.execute_query(sigspeed_sql)
logger.info(f"Succesfully retrieved result")
return result
except Exception as e:
logger.exception(f"Failed getting result with exception {e}")
finally:
remote_db.close()
def save_map_as_html(map, name):
map.save(f"{name}.html")
logger.info(f"Succesfully saved map {name}.")
if __name__ == "__main__":
create_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

View File

@ -342,8 +342,7 @@
"55824 47.389583 8.472041 2022.0\n", "55824 47.389583 8.472041 2022.0\n",
"55825 47.363387 8.557256 2022.0\n", "55825 47.363387 8.557256 2022.0\n",
"\n", "\n",
"[55826 rows x 3 columns]\n", "[55826 rows x 3 columns]\n"
"\n"
] ]
}, },
{ {
@ -1221,7 +1220,26 @@
"id": "28ec4563-f94e-49ba-a2d8-ec49e936d729", "id": "28ec4563-f94e-49ba-a2d8-ec49e936d729",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [],
"source": [] "source": [
"for year in example_years:\n",
" \n",
" year_data = acc_gdf[acc_gdf['AccidentYear'] == year]\n",
" \n",
" \n",
" heatmap_layer = HeatMap(\n",
" data=year_data[['latitude', 'longitude']],\n",
" radius=8, \n",
" gradient=gradient,\n",
" min_opacity=0.5,\n",
" max_opacity=0.8,\n",
" blur=10,\n",
" show=False,\n",
" name=f'Accidents in {year}'\n",
" )\n",
" \n",
" \n",
" heatmap_layer.add_to(interactive_map)"
]
} }
], ],
"metadata": { "metadata": {

View File

@ -98,11 +98,11 @@ if __name__ == '__main__':
db_info['port'], db_info['port'],
accident_table_name) accident_table_name)
logger.info('Finished loading accident geojson into db using bash script.') logger.info('Finished loading accident geojson into db using bash script.')
geojson_loader(signaled_speeds_file, geojson_loader(accident_loader_script,
signaled_speeds_file,
db_info['database'], db_info['database'],
db_info['user'], db_info['user'],
db_info['password'], db_info['password'],
db_info['host'], db_info['host'],
db_info['port'], db_info['port'],
signaled_speeds_table_name, signaled_speeds_table_name)
modus='overwrite')