hrrr_smoke / test_folium.py
nakas's picture
Add folium/leaflet map visualization with grayscale smoke rendering
be977be
#!/usr/bin/env python3
"""
Test folium/leaflet map functionality
"""
def test_folium_availability():
"""Test if folium is available and basic functionality works"""
try:
import folium
from folium.plugins import HeatMap
print("βœ… Folium and HeatMap available")
FOLIUM_AVAILABLE = True
except ImportError as e:
print(f"❌ Folium not available: {e}")
FOLIUM_AVAILABLE = False
return False
# Test basic map creation
try:
m = folium.Map(location=[39.5, -98.5], zoom_start=5)
print("βœ… Basic folium map creation works")
except Exception as e:
print(f"❌ Basic map creation failed: {e}")
return False
# Test polygon creation
try:
# Sample polygon coordinates (roughly Colorado)
coords = [
[40.0, -109.0],
[40.0, -102.0],
[37.0, -102.0],
[37.0, -109.0],
[40.0, -109.0] # Close polygon
]
folium.Polygon(
locations=coords,
popup="Test Smoke Plume",
tooltip="Test polygon",
fillColor='#AAAAAA',
color='#888888',
weight=2,
fillOpacity=0.6,
opacity=0.8
).add_to(m)
print("βœ… Polygon creation works")
except Exception as e:
print(f"❌ Polygon creation failed: {e}")
return False
# Test heat map
try:
heat_data = [
[40.0, -105.0, 0.8], # Denver area with intensity
[39.7, -104.9, 0.9], # Higher intensity nearby
[39.5, -105.2, 0.6] # Lower intensity
]
HeatMap(
heat_data,
min_opacity=0.2,
radius=15,
gradient={
0.0: 'rgba(0,0,0,0)',
0.5: 'rgba(128,128,128,0.6)',
1.0: 'rgba(64,64,64,0.9)'
}
).add_to(m)
print("βœ… Heat map creation works")
except Exception as e:
print(f"❌ Heat map creation failed: {e}")
return False
# Test layer control
try:
folium.LayerControl().add_to(m)
print("βœ… Layer control works")
except Exception as e:
print(f"❌ Layer control failed: {e}")
return False
# Test tile layers
try:
folium.TileLayer(
tiles='CartoDB positron',
name='Clean',
overlay=False,
control=True
).add_to(m)
print("βœ… Tile layer creation works")
except Exception as e:
print(f"❌ Tile layer creation failed: {e}")
return False
print("🌬️ Folium smoke visualization test completed successfully!")
print("All core folium features are working properly:")
print(" βœ“ Map creation")
print(" βœ“ Polygon rendering with grayscale styling")
print(" βœ“ Heat map visualization")
print(" βœ“ Layer controls")
print(" βœ“ Multiple tile layer support")
return True
def test_grayscale_styling():
"""Test grayscale color scheme for smoke"""
grayscale_styles = {
'light': {
'fillColor': '#E8E8E8', # Light gray
'color': '#CCCCCC', # Border
'weight': 1,
'fillOpacity': 0.4,
'opacity': 0.6
},
'medium': {
'fillColor': '#AAAAAA', # Medium gray
'color': '#888888', # Border
'weight': 2,
'fillOpacity': 0.6,
'opacity': 0.8
},
'heavy': {
'fillColor': '#666666', # Dark gray
'color': '#444444', # Border
'weight': 2,
'fillOpacity': 0.8,
'opacity': 1.0
}
}
print("🎨 Grayscale Smoke Styling Test:")
for category, style in grayscale_styles.items():
print(f" {category.capitalize():6s}: Fill={style['fillColor']}, Border={style['color']}, Opacity={style['fillOpacity']}")
print("βœ… Grayscale styling configuration validated")
return True
if __name__ == "__main__":
print("🌬️ Testing Folium/Leaflet Smoke Visualization")
print("=" * 50)
folium_works = test_folium_availability()
grayscale_works = test_grayscale_styling()
if folium_works and grayscale_works:
print("\nπŸŽ‰ All tests passed! Folium smoke visualization is ready.")
else:
print("\n⚠️ Some tests failed. Check dependencies or implementation.")