Spaces:
Running
Running
File size: 2,035 Bytes
ab1be12 619a0a2 ab1be12 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
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)
@solara.component
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}")
|