""" Alternative approach: Create a custom Folium layer that processes tiles on-the-fly This ensures we get the exact same clean tiles that Tab 1 displays """ import folium import numpy as np from PIL import Image import io import base64 from radar_processor import RadarImageProcessor class ProcessingWmsTileLayer(folium.raster_layers.WmsTileLayer): """Custom WMS layer that processes tiles with American colors on-the-fly.""" def __init__(self, *args, **kwargs): # Extract our custom processor self.processor = kwargs.pop('processor', None) super().__init__(*args, **kwargs) def render(self, **kwargs): # Get the standard WMS layer HTML standard_html = super().render(**kwargs) # Add JavaScript to intercept and process tiles processing_js = """ """ return standard_html + processing_js def create_processing_radar_map(wms_url, layer_name, opacity=0.7): """Create a map with processing WMS layer that converts colors on-the-fly.""" # Create base map m = folium.Map( location=[56.1304, -106.3468], # Canada center zoom_start=4, tiles="OpenStreetMap" ) # Add the processing WMS layer processor = RadarImageProcessor() processing_layer = ProcessingWmsTileLayer( url=wms_url, layers=layer_name, version="1.3.0", transparent=True, format="image/png", name="Processed Canadian Radar (American Colors)", overlay=True, control=True, opacity=opacity, processor=processor, attr='ECCC (Recolored)' ) processing_layer.add_to(m) # Add layer control folium.LayerControl().add_to(m) return m