Spaces:
Running
Running
| import leafmap | |
| import solara | |
| import ipywidgets as widgets | |
| import pandas as pd | |
| zoom = solara.reactive(2) | |
| center = solara.reactive((20, 0)) | |
| def get_datasets(m): | |
| url = 'https://raw.githubusercontent.com/opengeos/ee-tile-layers/main/datasets.tsv' | |
| df = pd.read_csv(url, sep='\t') | |
| setattr(m, 'df', df) | |
| return df | |
| def add_widget(m, position="topright"): | |
| get_datasets(m) | |
| df = m.df | |
| datasets = df['id'].values.tolist() | |
| style = {"description_width": "initial"} | |
| padding = "0px 0px 0px 5px" | |
| dataset = widgets.Dropdown( | |
| options=datasets, | |
| description="Dataset:", | |
| style=style, | |
| layout=widgets.Layout(padding=padding, width="275px"), | |
| ) | |
| dataset.value = None | |
| def dataset_changed(change): | |
| if change["new"]: | |
| selected = change["new"] | |
| if selected not in m.get_layer_names(): | |
| m.add_ee_layer(selected) | |
| dataset.observe(dataset_changed, names="value") | |
| m.add_widget(dataset, position=position) | |
| class Map(leafmap.Map): | |
| def __init__(self, **kwargs): | |
| super().__init__(**kwargs) | |
| # Add what you want below | |
| self.add_basemap("SATELLITE", shown=False) | |
| self.find_layer("Google Satellite").visible = False | |
| self.add_layer_manager() | |
| add_widget(self) | |
| def Page(): | |
| with solara.Column(style={"min-width": "500px"}): | |
| # solara components support reactive variables | |
| # solara.SliderInt(label="Zoom level", value=zoom, min=1, max=20) | |
| # using 3rd party widget library require wiring up the events manually | |
| # using zoom.value and zoom.set | |
| Map.element( # type: ignore | |
| zoom=zoom.value, | |
| on_zoom=zoom.set, | |
| center=center.value, | |
| on_center=center.set, | |
| scroll_wheel_zoom=True, | |
| toolbar_ctrl=False, | |
| data_ctrl=False, | |
| height="780px", | |
| ) | |
| solara.Text(f"Zoom: {zoom.value}") | |
| solara.Text(f"Center: {center.value}") | |