huggingface-solara / toy_app /pages /02_eurocrops.py.bak
Jonathan Marokhovsky
Made the cog-focused page, reorganized into more of an app framework, and updated the requirements
c140c33
raw
history blame contribute delete
No virus
4.4 kB
import leafmap
from leafmap import pmtiles_style
import solara
import ipyleaflet
# 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))
# Euromap info
eurocrops_pmtiles = "https://s3.us-west-2.amazonaws.com/us-west-2.opendata.source.coop/cholmes/eurocrops/eurocrops-all.pmtiles"
original_style = {
"version": 8,
"sources": {
"source": {
"type": "vector",
"url": "pmtiles://https://s3.us-west-2.amazonaws.com/us-west-2.opendata.source.coop/cholmes/eurocrops/eurocrops-all.pmtiles",
"attribution": "PMTiles",
}
},
"layers": [
{
"id": "eurocrops_point",
"source": "source",
"source-layer": "eurocrops",
"type": "circle",
"paint": {"circle-color": "#8dd3c7", "circle-radius": 5},
"filter": ["==", ["geometry-type"], "Point"],
},
{
"id": "eurocrops_stroke",
"source": "source",
"source-layer": "eurocrops",
"type": "line",
"paint": {"line-color": "#8dd3c7", "line-width": 1},
"filter": ["==", ["geometry-type"], "LineString"],
},
{
"id": "eurocrops_fill",
"source": "source",
"source-layer": "eurocrops",
"type": "fill",
"paint": {"fill-color": "#8dd3c7", "fill-opacity": 0.5},
"filter": ["==", ["geometry-type"], "Polygon"],
},
],
}
style = original_style
del style["version"]
del style["sources"]
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"},
},
],
}
# self.add_pmtiles(url, name='PMTiles', style=style)
class Map(leafmap.Map):
def __init__(self, **kwargs) -> None:
super().__init__(**kwargs)
self.add_basemap("CartoDB.DarkMatter")
self.add_pmtiles(
eurocrops_pmtiles,
style=style,
name="Euro Crops",
overlay=True,
show=True,
zoom_to_layer=True,
)
# print(pmtiles_style(eurocrops_pmtiles))
# print(style)
# self.add_pmtiles(
# q_url,
# # style=pmtiles_style(q_url),
# style=q_style,
# name="Quisheng Layer",
# overlay=True,
# show=True,
# zoom_to_layer=True,
# )
# self.add_my_pmtiles()
# self.add_stac_gui() ## TODO: make sure I need this
def add_my_pmtiles(self, **kwargs):
layer = ipyleaflet.PMTilesLayer(url=eurocrops_pmtiles, style=style)
self.add(layer)
@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
# m = 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",
)