Skip to content

Commit

Permalink
add method to make geospace as a solara component
Browse files Browse the repository at this point in the history
  • Loading branch information
wang-boyu committed Sep 6, 2024
1 parent af7f82d commit 92abfdd
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 260 deletions.
5 changes: 2 additions & 3 deletions mesa_geo/visualization/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# Import specific classes or functions from the modules
from mesa_geo.visualization.geojupyter_viz import GeoJupyterViz
from mesa_geo.visualization.leaflet_viz import LeafletViz
from .components.geospace_leaflet import make_geospace_leaflet

__all__ = ["GeoJupyterViz", "LeafletViz"]
__all__ = ["make_geospace_leaflet"]
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
"""
# ipyleaflet
Map visualization using [ipyleaflet](https://ipyleaflet.readthedocs.io/), a ipywidgets wrapper for [leaflet.js](https://leafletjs.com/)
"""

import dataclasses
from dataclasses import dataclass

Expand All @@ -11,30 +6,57 @@
import solara
import xyzservices
from folium.utilities import image_to_url
from mesa.visualization.utils import update_counter
from shapely.geometry import Point, mapping

from mesa_geo.raster_layers import RasterBase, RasterLayer
from mesa_geo.tile_layers import LeafletOption, RasterWebTile


@solara.component
def map(model, map_drawer, zoom, center_default, scroll_wheel_zoom):
# render map in browser
zoom_map = solara.reactive(zoom)
center = solara.reactive(center_default)
def make_geospace_leaflet(
agent_portrayal,
view=None,
tiles=xyzservices.providers.OpenStreetMap.Mapnik,
**kwargs,
):
def MakeSpaceMatplotlib(model):
return GeoSpaceLeaflet(model, agent_portrayal, view, tiles, **kwargs)

base_map = map_drawer.tiles
layers = map_drawer.render(model)
return MakeSpaceMatplotlib


@solara.component
def GeoSpaceLeaflet(model, agent_portrayal, view, tiles, **kwargs):
update_counter.get()
map_drawer = MapModule(portrayal_method=agent_portrayal, tiles=tiles)
model_view = map_drawer.render(model)

if view is None:
# longlat [min_x, min_y, max_x, max_y] to latlong [min_y, min_x, max_y, max_x]
transformed_xx, transformed_yy = model.space.transformer.transform(
xx=[model.space.total_bounds[0], model.space.total_bounds[2]],
yy=[model.space.total_bounds[1], model.space.total_bounds[3]],
)
view = [
(transformed_yy[0] + transformed_yy[1]) / 2,
(transformed_xx[0] + transformed_xx[1]) / 2,
]

layers = (
[ipyleaflet.TileLayer.element(url=map_drawer.tiles["url"])] if tiles else []
)
for layer in model_view["layers"]["rasters"]:
layers.append(ipyleaflet.ImageOverlay(element=image_to_url(layer)))
for layer in model_view["layers"]["vectors"]:
layers.append(ipyleaflet.GeoJSON(element=layer))
ipyleaflet.Map.element(
zoom=zoom_map.value,
center=center.value,
scroll_wheel_zoom=scroll_wheel_zoom,
center=view,
layers=[
ipyleaflet.TileLayer.element(url=base_map["url"]),
ipyleaflet.GeoJSON.element(data=layers["agents"][0]),
*layers["agents"][1],
*layers,
ipyleaflet.GeoJSON.element(data=model_view["agents"][0]),
*model_view["agents"][1],
],
**kwargs,
)


Expand Down Expand Up @@ -65,9 +87,6 @@ class MapModule:
def __init__(
self,
portrayal_method,
view,
zoom,
scroll_wheel_zoom,
tiles,
):
"""
Expand Down
236 changes: 0 additions & 236 deletions mesa_geo/visualization/geojupyter_viz.py

This file was deleted.

0 comments on commit 92abfdd

Please sign in to comment.