Spaces:
Sleeping
Sleeping
Keep OpenStreetMap when layers clear
Browse files- pages/burn_mapping.py +10 -45
pages/burn_mapping.py
CHANGED
@@ -13,39 +13,13 @@ dNBRvisParams = {'min': 0.0,'max': 0.8, 'palette': ['green', 'yellow','orange','
|
|
13 |
class Map(geemap.Map):
|
14 |
def __init__(self, **kwargs):
|
15 |
super().__init__(**kwargs)
|
16 |
-
|
17 |
self.customize_ee_data(selected_fire.value, selected_days.value)
|
18 |
self.add_selector()
|
19 |
self.add_intSlider()
|
20 |
-
|
21 |
self.add("layer_manager")
|
22 |
self.remove("draw_control")
|
23 |
-
|
24 |
-
def add_ee_data(self):
|
25 |
-
def calc_nbr(pre_start, pre_stop, post_start, post_stop, bbox):
|
26 |
-
PREgoesCMI = ee.ImageCollection('NOAA/GOES/17/MCMIPF').filter(ee.Filter.date(pre_start, pre_stop)).mean()
|
27 |
-
POSTgoesCMI = ee.ImageCollection('NOAA/GOES/17/MCMIPF').filter(ee.Filter.date(post_start, post_stop)).mean()
|
28 |
-
preNBR = PREgoesCMI.select(['CMI_C03','CMI_C06']).normalizedDifference(['CMI_C03', 'CMI_C06']).toFloat().rename('NBR')
|
29 |
-
postNBR = POSTgoesCMI.select(['CMI_C03','CMI_C06']).normalizedDifference(['CMI_C03', 'CMI_C06']).toFloat().rename('NBR')
|
30 |
-
dNBR = preNBR.subtract(postNBR).select('NBR')
|
31 |
-
dNBRclipped = dNBR.clip(bbox)
|
32 |
-
return dNBRclipped
|
33 |
-
|
34 |
-
north_complex_bb = ee.Geometry.BBox(-121.616097, 39.426723, -120.668526, 40.030845)
|
35 |
-
dixie_bb = ee.Geometry.BBox(-121.680467, 39.759303, -120.065477, 40.873387)
|
36 |
-
cam_peak_bb = ee.Geometry.BBox(-106.014784, 40.377907, -105.116651, 40.822094)
|
37 |
-
aug_complex_bb = ee.Geometry.BBox(-123.668726, 39.337654, -122.355860, 40.498304)
|
38 |
-
|
39 |
-
north_complex = calc_nbr('2020-08-15', '2020-08-16', '2020-09-15', '2020-09-16', north_complex_bb)
|
40 |
-
dixie = calc_nbr('2021-07-12', '2021-07-13', '2021-09-15', '2021-09-16', dixie_bb)
|
41 |
-
cam_peak = calc_nbr('2020-08-12', '2020-08-13', '2020-09-12', '2020-09-13', cam_peak_bb)
|
42 |
-
aug_complex = calc_nbr('2020-08-15', '2020-08-16', '2020-11-10', '2020-11-11', aug_complex_bb)
|
43 |
-
|
44 |
-
self.addLayer(north_complex, dNBRvisParams, 'North Complex GOES NBR', False)
|
45 |
-
self.addLayer(dixie, dNBRvisParams, 'Dixie Complex GOES NBR', False)
|
46 |
-
self.addLayer(cam_peak, dNBRvisParams, 'Cameron Peak GOES NBR', False)
|
47 |
-
self.addLayer(aug_complex, dNBRvisParams, 'August Complex GOES NBR', False)
|
48 |
-
'''
|
49 |
|
50 |
def customize_ee_data(self, fire, elapDays):
|
51 |
elapDayNum = ee.Number(elapDays)
|
@@ -72,7 +46,7 @@ class Map(geemap.Map):
|
|
72 |
dNBRclipped = dNBR.clip(bbox)
|
73 |
return dNBRclipped
|
74 |
|
75 |
-
self.
|
76 |
|
77 |
if fire == "North Complex":
|
78 |
north_complex = calc_nbr(north_startDate.advance(-7, 'day'), north_startDate, north_startDate.advance(elapDayNum, 'day'), north_startDate.advance(elapDay_plusOne,'day'), north_complex_bb)
|
@@ -86,7 +60,13 @@ class Map(geemap.Map):
|
|
86 |
elif fire == "August Complex":
|
87 |
aug_complex = calc_nbr(aug_startDate.advance(-7, 'day'), aug_startDate, aug_startDate.advance(elapDayNum, 'day'), aug_startDate.advance(elapDay_plusOne,'day'), aug_complex_bb)
|
88 |
self.addLayer(aug_complex, dNBRvisParams, 'August Complex GOES NBR', True)
|
89 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
|
91 |
def add_selector(self):
|
92 |
selector = widgets.Dropdown(options=fireList, value="North Complex", description='Wildfire Case Study:')
|
@@ -95,16 +75,6 @@ class Map(geemap.Map):
|
|
95 |
if change['name'] == 'value':
|
96 |
selected_fire.value = change['new']
|
97 |
self.customize_ee_data(selected_fire.value, selected_days.value)
|
98 |
-
|
99 |
-
'''#self.clear_layers()
|
100 |
-
if selected_fire == "North Complex":
|
101 |
-
self.find_layer('North Complex GOES NBR').visible = True
|
102 |
-
elif selected_fire == "Dixie":
|
103 |
-
self.find_layer('Dixie Complex GOES NBR').visible = True
|
104 |
-
elif selected_fire == "Cameron Peak":
|
105 |
-
self.find_layer('Cameron Peak GOES NBR').visible = True
|
106 |
-
elif selected_fire == "August Complex":
|
107 |
-
self.find_layer('August Complex GOES NBR').visible = True'''
|
108 |
|
109 |
selector.observe(on_selector_change, names='value')
|
110 |
self.add_widget(selector, position="topleft")
|
@@ -124,11 +94,6 @@ class Map(geemap.Map):
|
|
124 |
@solara.component
|
125 |
def Page():
|
126 |
|
127 |
-
#with solara.Column(style={"align":"start", "min-width": "200px", "height": "200px"}):
|
128 |
-
#solara.Select(label="Wildfire Case Study", value=selected_fire, values=fireList)
|
129 |
-
#solara.Markdown(f"**Selected**: {selected_fire.value}")
|
130 |
-
#solara.Button(label="Map the burn scar",) #on_click = on_button_clicked)
|
131 |
-
|
132 |
with solara.Column(align="center"):
|
133 |
markdown = """
|
134 |
## Burn Map Generator Case Studies """
|
|
|
13 |
class Map(geemap.Map):
|
14 |
def __init__(self, **kwargs):
|
15 |
super().__init__(**kwargs)
|
16 |
+
self.add_basemap('OpenStreetMap')
|
17 |
self.customize_ee_data(selected_fire.value, selected_days.value)
|
18 |
self.add_selector()
|
19 |
self.add_intSlider()
|
|
|
20 |
self.add("layer_manager")
|
21 |
self.remove("draw_control")
|
22 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
|
24 |
def customize_ee_data(self, fire, elapDays):
|
25 |
elapDayNum = ee.Number(elapDays)
|
|
|
46 |
dNBRclipped = dNBR.clip(bbox)
|
47 |
return dNBRclipped
|
48 |
|
49 |
+
self.clear_specific_layers()
|
50 |
|
51 |
if fire == "North Complex":
|
52 |
north_complex = calc_nbr(north_startDate.advance(-7, 'day'), north_startDate, north_startDate.advance(elapDayNum, 'day'), north_startDate.advance(elapDay_plusOne,'day'), north_complex_bb)
|
|
|
60 |
elif fire == "August Complex":
|
61 |
aug_complex = calc_nbr(aug_startDate.advance(-7, 'day'), aug_startDate, aug_startDate.advance(elapDayNum, 'day'), aug_startDate.advance(elapDay_plusOne,'day'), aug_complex_bb)
|
62 |
self.addLayer(aug_complex, dNBRvisParams, 'August Complex GOES NBR', True)
|
63 |
+
|
64 |
+
def clear_specific_layers(self):
|
65 |
+
layers_to_keep = ['OpenStreetMap']
|
66 |
+
layers = self.layers.copy()
|
67 |
+
for layer in layers:
|
68 |
+
if layer.name not in layers_to_keep:
|
69 |
+
self.remove_layer(layer)
|
70 |
|
71 |
def add_selector(self):
|
72 |
selector = widgets.Dropdown(options=fireList, value="North Complex", description='Wildfire Case Study:')
|
|
|
75 |
if change['name'] == 'value':
|
76 |
selected_fire.value = change['new']
|
77 |
self.customize_ee_data(selected_fire.value, selected_days.value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
|
79 |
selector.observe(on_selector_change, names='value')
|
80 |
self.add_widget(selector, position="topleft")
|
|
|
94 |
@solara.component
|
95 |
def Page():
|
96 |
|
|
|
|
|
|
|
|
|
|
|
97 |
with solara.Column(align="center"):
|
98 |
markdown = """
|
99 |
## Burn Map Generator Case Studies """
|