Spaces:
Runtime error
Runtime error
Jonathan Marokhovsky
Made the cog-focused page, reorganized into more of an app framework, and updated the requirements
c140c33
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", | |
) | |