Spaces:
Running
Running
Add DW dataset
Browse files- pages/00_home.py +1 -0
- pages/01_datasets.py +15 -2
- pages/02_explore.py +78 -27
pages/00_home.py
CHANGED
@@ -15,6 +15,7 @@ def Page():
|
|
15 |
|
16 |
- Rajib et al. 2023. A call for consistency and integration in global surface water estimates. *Environmental Research Letters*. <https://doi.org/10.1088/1748-9326/ad1722 >
|
17 |
- Rajib A, Khare A, Wu Q and Gupta B. 2023. Global Surface Water Information System (GSWIS). Available at: <https://gswis.gishub.org>
|
|
|
18 |
|
19 |
### Acknowledgements
|
20 |
|
|
|
15 |
|
16 |
- Rajib et al. 2023. A call for consistency and integration in global surface water estimates. *Environmental Research Letters*. <https://doi.org/10.1088/1748-9326/ad1722 >
|
17 |
- Rajib A, Khare A, Wu Q and Gupta B. 2023. Global Surface Water Information System (GSWIS). Available at: <https://gswis.gishub.org>
|
18 |
+
- Rajib A and Khare A, 2024. <https://doi.org/10.4211/hs.9d60389f55b648149a788a2ff7bc3766>
|
19 |
|
20 |
### Acknowledgements
|
21 |
|
pages/01_datasets.py
CHANGED
@@ -6,7 +6,12 @@ def Page():
|
|
6 |
with solara.Column(align="center"):
|
7 |
markdown = """
|
8 |
|
9 |
-
GSWIS currently houses five global surface water datasets used to generate a processed,
|
|
|
|
|
|
|
|
|
|
|
10 |
|
11 |
### Datasets
|
12 |
|
@@ -41,10 +46,18 @@ def Page():
|
|
41 |
#### HydroLakes
|
42 |
- **Description:** HydroLAKES is vector global lake dataset derived from merged hydrography
|
43 |
- **Website:** <https://www.hydrosheds.org/products/hydrolakes>
|
44 |
-
- **Reference**: Messager et al 2016. <https://doi.org/10.1038/ncomms13603
|
45 |
- **Year used in GSWIS:** HydroLAKES is not associated with any specific time or year
|
46 |
- **Water Classes used in GSWIS:** Global Lakes with size of at least 10 ha
|
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
**Note: Numbers indicate the class ID in the original dataset**
|
49 |
|
50 |
"""
|
|
|
6 |
with solara.Column(align="center"):
|
7 |
markdown = """
|
8 |
|
9 |
+
GSWIS currently houses five global surface water datasets used to generate a processed,
|
10 |
+
multi-band gridded dataset at 10-meter spatial resolution, with each band corresponding
|
11 |
+
to one of the five datasets used. It also hosts a 10-meter spatial resolution multi-band
|
12 |
+
gridded global composite of surface water occurrence, permanent and seasonal surface water
|
13 |
+
extent, and surface water variability, derived from Dynamic World Land Cover product.
|
14 |
+
**Click on the Explore tab above to visualize the datasets interactively.**
|
15 |
|
16 |
### Datasets
|
17 |
|
|
|
46 |
#### HydroLakes
|
47 |
- **Description:** HydroLAKES is vector global lake dataset derived from merged hydrography
|
48 |
- **Website:** <https://www.hydrosheds.org/products/hydrolakes>
|
49 |
+
- **Reference**: Messager et al 2016. <https://doi.org/10.1038/ncomms13603>
|
50 |
- **Year used in GSWIS:** HydroLAKES is not associated with any specific time or year
|
51 |
- **Water Classes used in GSWIS:** Global Lakes with size of at least 10 ha
|
52 |
|
53 |
+
#### Dynamic World (DW) based global surface water (GSW) dataset
|
54 |
+
- **Description:** DW based GSW dataset is a 10-m gridded multi-band global composite derived from Sentinel-2 based Dynamic World Land cover product ([Brown et al., 2022](https://doi.org/10.1038/s41597-022-01307-4))
|
55 |
+
- **Website:** <https://dynamicworld.app>
|
56 |
+
- **Reference**: Rajib and Khare, 2024. <https://doi.org/10.4211/hs.9d60389f55b648149a788a2ff7bc3766>
|
57 |
+
- **Year used in GSWIS:** 2015-2023
|
58 |
+
- **Water Classes used in GSWIS:** Surface water occurrence, Permanent and Seasonal surface water extent, Surface water variability
|
59 |
+
|
60 |
+
|
61 |
**Note: Numbers indicate the class ID in the original dataset**
|
62 |
|
63 |
"""
|
pages/02_explore.py
CHANGED
@@ -24,7 +24,7 @@ def zonal_stats_chart(image, vector, **kwargs):
|
|
24 |
df = geemap.ee_to_df(result).T
|
25 |
df.reset_index(inplace=True)
|
26 |
df.columns = ["Type", "Area"]
|
27 |
-
chart = geemap.bar_chart(df, "Type", "Area", x_label=
|
28 |
chart.update_layout(
|
29 |
margin=dict(l=0, r=0, t=10, b=0),
|
30 |
height=280,
|
@@ -33,7 +33,7 @@ def zonal_stats_chart(image, vector, **kwargs):
|
|
33 |
return chart
|
34 |
|
35 |
|
36 |
-
def add_analysis_gui(m=None, position=
|
37 |
"""Create a toolbar widget.
|
38 |
|
39 |
Args:
|
@@ -41,8 +41,8 @@ def add_analysis_gui(m=None, position='topright', opened=True):
|
|
41 |
opened (bool, optional): Whether to open the toolbar. Defaults to True.
|
42 |
"""
|
43 |
|
44 |
-
fc = ee.FeatureCollection(
|
45 |
-
countries = fc.aggregate_array(
|
46 |
countries.sort()
|
47 |
gswe = ee.ImageCollection("users/h2i_lab/gswe/gswe_datasets")
|
48 |
image = gswe.mosaic()
|
@@ -117,9 +117,9 @@ def add_analysis_gui(m=None, position='topright', opened=True):
|
|
117 |
def change_country(change):
|
118 |
if change["new"]:
|
119 |
country_name = country.value
|
120 |
-
country_fc = fc.filter(ee.Filter.eq(
|
121 |
-
vec_style = {
|
122 |
-
m.addLayer(country_fc.style(**vec_style), {},
|
123 |
m.centerObject(country_fc)
|
124 |
m.selected_country = country_fc
|
125 |
toolbar_footer.children = [radio, country, buttons]
|
@@ -207,14 +207,14 @@ def add_analysis_gui(m=None, position='topright', opened=True):
|
|
207 |
class Map(geemap.Map):
|
208 |
def __init__(self, **kwargs):
|
209 |
super().__init__(**kwargs)
|
210 |
-
self.add_basemap(
|
211 |
self.add_ee_data()
|
212 |
self.add_layer_manager()
|
213 |
-
add_analysis_gui(self)
|
214 |
# self.add_inspector()
|
215 |
|
216 |
def add_ee_data(self):
|
217 |
-
# gswe = ee.ImageCollection("users/h2i_lab/gswe/gswe_datasets")
|
218 |
# self.addLayer(gswe.select("esa"), {'palette': ['red']}, "ESA")
|
219 |
# self.addLayer(gswe.select("esri"), {'palette': ['yellow']}, "ESRI")
|
220 |
# self.addLayer(gswe.select("jrc"), {'palette': ['blue']}, "JRC")
|
@@ -223,25 +223,76 @@ class Map(geemap.Map):
|
|
223 |
|
224 |
gswe = ee.ImageCollection("users/h2i_lab/gswe/datasets")
|
225 |
gswe = gswe.select(
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
self.addLayer(gswe.select("
|
230 |
-
self.addLayer(gswe.select("
|
231 |
-
self.addLayer(gswe.select("
|
232 |
-
self.addLayer(gswe.select("
|
233 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
234 |
legend_dict = {
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
}
|
241 |
# self.add_legend(legend_dict=legend_dict, position='bottomleft')
|
242 |
-
fc = ee.FeatureCollection(
|
243 |
-
style = {
|
244 |
-
self.addLayer(fc.style(**style), {},
|
245 |
|
246 |
|
247 |
@solara.component
|
@@ -253,7 +304,7 @@ def Page():
|
|
253 |
center=center.value,
|
254 |
on_center=center.set,
|
255 |
scroll_wheel_zoom=True,
|
256 |
-
add_google_map=
|
257 |
height="800px",
|
258 |
data_ctrl=False,
|
259 |
)
|
|
|
24 |
df = geemap.ee_to_df(result).T
|
25 |
df.reset_index(inplace=True)
|
26 |
df.columns = ["Type", "Area"]
|
27 |
+
chart = geemap.bar_chart(df, "Type", "Area", x_label="", y_label="Area (m2)")
|
28 |
chart.update_layout(
|
29 |
margin=dict(l=0, r=0, t=10, b=0),
|
30 |
height=280,
|
|
|
33 |
return chart
|
34 |
|
35 |
|
36 |
+
def add_analysis_gui(m=None, position="topright", opened=True):
|
37 |
"""Create a toolbar widget.
|
38 |
|
39 |
Args:
|
|
|
41 |
opened (bool, optional): Whether to open the toolbar. Defaults to True.
|
42 |
"""
|
43 |
|
44 |
+
fc = ee.FeatureCollection("users/giswqs/public/countries")
|
45 |
+
countries = fc.aggregate_array("NAME").getInfo()
|
46 |
countries.sort()
|
47 |
gswe = ee.ImageCollection("users/h2i_lab/gswe/gswe_datasets")
|
48 |
image = gswe.mosaic()
|
|
|
117 |
def change_country(change):
|
118 |
if change["new"]:
|
119 |
country_name = country.value
|
120 |
+
country_fc = fc.filter(ee.Filter.eq("NAME", country_name))
|
121 |
+
vec_style = {"color": "000000ff", "width": 3, "fillColor": "00000000"}
|
122 |
+
m.addLayer(country_fc.style(**vec_style), {}, "Selected Country")
|
123 |
m.centerObject(country_fc)
|
124 |
m.selected_country = country_fc
|
125 |
toolbar_footer.children = [radio, country, buttons]
|
|
|
207 |
class Map(geemap.Map):
|
208 |
def __init__(self, **kwargs):
|
209 |
super().__init__(**kwargs)
|
210 |
+
self.add_basemap("SATELLITE", show=False)
|
211 |
self.add_ee_data()
|
212 |
self.add_layer_manager()
|
213 |
+
# add_analysis_gui(self)
|
214 |
# self.add_inspector()
|
215 |
|
216 |
def add_ee_data(self):
|
217 |
+
# gswe = ee.ImageCollection("users/h2i_lab/gswe/gswe_datasets")
|
218 |
# self.addLayer(gswe.select("esa"), {'palette': ['red']}, "ESA")
|
219 |
# self.addLayer(gswe.select("esri"), {'palette': ['yellow']}, "ESRI")
|
220 |
# self.addLayer(gswe.select("jrc"), {'palette': ['blue']}, "JRC")
|
|
|
223 |
|
224 |
gswe = ee.ImageCollection("users/h2i_lab/gswe/datasets")
|
225 |
gswe = gswe.select(
|
226 |
+
["b1", "b2", "b3", "b4", "b5"], ["esa", "esri", "osm", "jrc", "hydrolakes"]
|
227 |
+
)
|
228 |
+
self.addLayer(gswe.select("esa"), {"palette": ["red"]}, "ESA")
|
229 |
+
self.addLayer(gswe.select("osm"), {"palette": ["green"]}, "OSM")
|
230 |
+
self.addLayer(gswe.select("jrc"), {"palette": ["blue"]}, "JRC")
|
231 |
+
self.addLayer(gswe.select("esri"), {"palette": ["yellow"]}, "ESRI")
|
232 |
+
self.addLayer(gswe.select("hydrolakes"), {"palette": ["purple"]}, "Hydrolakes")
|
233 |
+
|
234 |
+
water_grids = ee.ImageCollection(
|
235 |
+
"projects/h2i-lab/assets/DynamicWorld_v1/Main/GlobalGrids_10m"
|
236 |
+
)
|
237 |
+
water_classVis = {"min": 1, "max": 3, "palette": ["blue", "yellow", "red"]}
|
238 |
+
|
239 |
+
water_occurrence_vis = {
|
240 |
+
"min": 0,
|
241 |
+
"max": 100,
|
242 |
+
"palette": ["red", "yellow", "green", "blue"],
|
243 |
+
}
|
244 |
+
water_variability_vis = {
|
245 |
+
"min": 0,
|
246 |
+
"max": 100,
|
247 |
+
"palette": ["blue", "green", "yellow", "red"],
|
248 |
+
}
|
249 |
+
|
250 |
+
self.addLayer(
|
251 |
+
water_grids.select("b3"),
|
252 |
+
water_variability_vis,
|
253 |
+
"DW Water Variability",
|
254 |
+
False,
|
255 |
+
)
|
256 |
+
self.addLayer(
|
257 |
+
water_grids.select("b2"), water_occurrence_vis, "DW Water Occurrence", False
|
258 |
+
)
|
259 |
+
self.addLayer(water_grids.select("b1"), water_classVis, "DW Water Class", False)
|
260 |
+
|
261 |
+
self.add_colorbar(
|
262 |
+
vis_params=water_variability_vis,
|
263 |
+
label="DW Water Variability (%)",
|
264 |
+
orientation="horizontal",
|
265 |
+
layer_name="DW Water Variability",
|
266 |
+
)
|
267 |
+
self.add_colorbar(
|
268 |
+
vis_params=water_occurrence_vis,
|
269 |
+
label="DW Water Occurrence (%)",
|
270 |
+
orientation="horizontal",
|
271 |
+
layer_name="DW Water Occurrence",
|
272 |
+
)
|
273 |
+
|
274 |
+
waterclass_dict = {
|
275 |
+
"Permanent": "0000FF",
|
276 |
+
"Seasonal": "FFFF00",
|
277 |
+
"Land": "FF0000",
|
278 |
+
}
|
279 |
+
self.add_legend(
|
280 |
+
legend_dict=waterclass_dict,
|
281 |
+
title="DW Water Class",
|
282 |
+
layer_name="DW Water Class",
|
283 |
+
)
|
284 |
+
|
285 |
legend_dict = {
|
286 |
+
"ESA": "ff0000",
|
287 |
+
"ESRI": "ffff00",
|
288 |
+
"JRC": "0000ff",
|
289 |
+
"OSM": "00ff00",
|
290 |
+
"Hydrolakes": "800080",
|
291 |
}
|
292 |
# self.add_legend(legend_dict=legend_dict, position='bottomleft')
|
293 |
+
fc = ee.FeatureCollection("users/giswqs/public/countries")
|
294 |
+
style = {"color": "000000ff", "width": 1, "fillColor": "00000000"}
|
295 |
+
self.addLayer(fc.style(**style), {}, "Countries", False)
|
296 |
|
297 |
|
298 |
@solara.component
|
|
|
304 |
center=center.value,
|
305 |
on_center=center.set,
|
306 |
scroll_wheel_zoom=True,
|
307 |
+
add_google_map=False,
|
308 |
height="800px",
|
309 |
data_ctrl=False,
|
310 |
)
|