From 229f9114a61fce0906b61f9b56c2af1f9c6b0ea3 Mon Sep 17 00:00:00 2001 From: Daley Adrichem Date: Thu, 22 Jun 2023 11:42:46 +0200 Subject: [PATCH] Seperate callback_functions --- .../cyclone_track_callback_functions.py | 89 +++++++++++++++ cht_cyclones/cyclone_track_database.py | 107 ------------------ 2 files changed, 89 insertions(+), 107 deletions(-) create mode 100644 cht_cyclones/cyclone_track_callback_functions.py diff --git a/cht_cyclones/cyclone_track_callback_functions.py b/cht_cyclones/cyclone_track_callback_functions.py new file mode 100644 index 0000000..3eaf490 --- /dev/null +++ b/cht_cyclones/cyclone_track_callback_functions.py @@ -0,0 +1,89 @@ +import datetime +import os +from functools import reduce + +import geopandas as gpd +import numpy as np +import pandas as pd +import shapely +import xarray as xr + +from .tropical_cyclone import TropicalCyclone + + +def map_ready(mpbox): + try: + from app import app + except Exception: + # This should be removed. ddb in Delft Dashboard should be renamed to app! + from ddb import ddb as app + + mp = app.gui.popup_window.find_element_by_id("track_selector_map").widget + mp.jump_to(0.0, 0.0, 1) + data = app.gui.popup_data + # Container layers + data["main_layer"] = mp.add_layer("track_selector") + # Tracks layers + data["track_layer"] = data["main_layer"].add_layer( + "tracks", + type="line_selector", + file_name="tracks.geojson", + select=select_track, + selection_type="single", + line_color="dodgerblue", + line_width=2, + line_color_selected="red", + line_width_selected=3, + hover_param="description", + ) + + # Update data in tracks layer + update_tracks() + + +def update_tracks(): + try: + from app import app + except Exception: + # This should be removed. ddb in Delft Dashboard should be renamed to app! + from ddb import ddb as app + + data = app.gui.popup_data + + tdb = data["track_database"] + tracks_layer = data["track_layer"] + + # Get filter data + distance = app.gui.getvar("cyclone_track_selector", "distance") + year_min = app.gui.getvar("cyclone_track_selector", "year0") + year_max = app.gui.getvar("cyclone_track_selector", "year1") + lon = app.gui.getvar("cyclone_track_selector", "lon") + lat = app.gui.getvar("cyclone_track_selector", "lat") + + # Get indices based on filter + index = tdb.filter( + lon=lon, lat=lat, distance=distance, year_min=year_min, year_max=year_max + ) + + # Get GeoDataFrame of tracks + gdf = tdb.to_gdf(index=index) + + tracks_layer.set_data(gdf, 0) + + +def map_moved(coords, mpbox): + pass + + +def select_track(feature, mpbox): + try: + from app import app + except Exception: + # This should be removed. ddb in Delft Dashboard should be renamed to app! + from ddb import ddb as app + + app.gui.popup_data["database_index"] = feature["properties"]["database_index"] + + +def edit_filter(*args): + update_tracks() diff --git a/cht_cyclones/cyclone_track_database.py b/cht_cyclones/cyclone_track_database.py index 627b1ce..491c240 100644 --- a/cht_cyclones/cyclone_track_database.py +++ b/cht_cyclones/cyclone_track_database.py @@ -196,32 +196,6 @@ def filter( return index - def track_selector( - self, app, lon=0.0, lat=0.0, distance=1000.0, year_min=1850, year_max=2030 - ): - app.gui.setvar("cyclone_track_selector", "lon", lon) - app.gui.setvar("cyclone_track_selector", "lat", lat) - app.gui.setvar("cyclone_track_selector", "distance", distance) - app.gui.setvar("cyclone_track_selector", "year0", year_min) - app.gui.setvar("cyclone_track_selector", "year1", year_max) - app.gui.setvar("cyclone_track_selector", "name", "") - - data = {} - data["track_database"] = self - - # Read GUI config file - config = app.gui.read_gui_config( - os.path.dirname(__file__), "cyclone_track_selector.yml" - ) - okay, data = app.gui.popup(config, data) - - track = None - if okay: - # Get the track from the database - track = self.get_track(data["database_index"]) - - return track, okay - def compute_distance(lon1, lat1, lon2, lat2): R = 6373.0 @@ -236,84 +210,3 @@ def compute_distance(lon1, lat1, lon2, lat2): a = (np.sin(dlat / 2)) ** 2 + np.cos(lat1) * np.cos(lat2) * (np.sin(dlon / 2)) ** 2 c = 2 * np.arctan2(np.sqrt(a), np.sqrt(1.0 - a)) return R * c - - -### Callback functions for track selector ### - - -def map_ready(): - try: - from app import app - except Exception: - # This should be removed. ddb in Delft Dashboard should be renamed to app! - from ddb import ddb as app - - mp = app.gui.popup_window.find_element_by_id("track_selector_map").widget - mp.jump_to(0.0, 0.0, 1) - data = app.gui.popup_data - # Container layers - data["main_layer"] = mp.add_layer("track_selector") - # Tracks layers - data["track_layer"] = data["main_layer"].add_layer( - "tracks", - type="line_selector", - file_name="tracks.geojson", - select=select_track, - selection_type="single", - line_color="dodgerblue", - line_width=2, - line_color_selected="red", - line_width_selected=3, - hover_param="description", - ) - - # Update data in tracks layer - update_tracks() - - -def update_tracks(): - try: - from app import app - except Exception: - # This should be removed. ddb in Delft Dashboard should be renamed to app! - from ddb import ddb as app - - data = app.gui.popup_data - - tdb = data["track_database"] - tracks_layer = data["track_layer"] - - # Get filter data - distance = app.gui.getvar("cyclone_track_selector", "distance") - year_min = app.gui.getvar("cyclone_track_selector", "year0") - year_max = app.gui.getvar("cyclone_track_selector", "year1") - lon = app.gui.getvar("cyclone_track_selector", "lon") - lat = app.gui.getvar("cyclone_track_selector", "lat") - - # Get indices based on filter - index = tdb.filter( - lon=lon, lat=lat, distance=distance, year_min=year_min, year_max=year_max - ) - - # Get GeoDataFrame of tracks - gdf = tdb.to_gdf(index=index) - - tracks_layer.set_data(gdf, 0) - - -def map_moved(coords): - pass - - -def select_track(feature): - try: - from app import app - except Exception: - # This should be removed. ddb in Delft Dashboard should be renamed to app! - from ddb import ddb as app - - app.gui.popup_data["database_index"] = feature["properties"]["database_index"] - - -def edit_filter(*args): - update_tracks()