Spaces:
Runtime error
Runtime error
File size: 2,518 Bytes
bb5a9d0 c140c33 bb5a9d0 dc438fe bb5a9d0 c140c33 bb5a9d0 dc438fe bb5a9d0 c140c33 bb5a9d0 dc438fe bb5a9d0 |
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import leafmap
from leafmap import pmtiles_style
from reacton import component as component
import solara
import ipywidgets as widgets
# THings to come:
# TODO: Calculate some metrics given the area.
# TODO: add a raster to the toy
# TODO: Dynamically check the center of the map and change what's displayed depending on that.
# variables
zoom = solara.reactive(2)
center = solara.reactive((20, 0))
q_url = "https://storage.googleapis.com/ahp-research/overture/pmtiles/overture.pmtiles"
q_style = {
"layers": [
{
"id": "admins",
"source": "example_source",
"source-layer": "admins",
"type": "fill",
"paint": {"fill-color": "#BDD3C7", "fill-opacity": 0.1},
},
{
"id": "buildings",
"source": "example_source",
"source-layer": "buildings",
"type": "fill",
"paint": {"fill-color": "#FFFFB3", "fill-opacity": 0.5},
},
{
"id": "places",
"source": "example_source",
"source-layer": "places",
"type": "fill",
"paint": {"fill-color": "#BEBADA", "fill-opacity": 0.5},
},
{
"id": "roads",
"source": "example_source",
"source-layer": "roads",
"type": "line",
"paint": {"line-color": "#FB8072"},
},
],
}
class Map(leafmap.Map):
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.add_basemap("CartoDB.DarkMatter")
self.add_pmtiles(
q_url,
style=q_style,
name="Quisheng Layer",
overlay=True,
show=True,
zoom_to_layer=True,
)
def run_area(self):
print(self.user_roi)
@component
def Page():
with solara.Row():
solara.Button(label="Area", on_click=Map.run_area)
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",
)
|