"""
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