Skip to content

Commit ce86e6c

Browse files
committed
Working RioTilerLayer
1 parent a0287f2 commit ce86e6c

File tree

6 files changed

+551
-11
lines changed

6 files changed

+551
-11
lines changed

lonboard/_layer/core.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ class BitmapTileLayer(BaseLayer):
515515

516516
called = 0
517517

518-
def __init__(self, **kwargs: BitmapTileLayerKwargs):
518+
def __init__(self, **kwargs: Unpack[BitmapTileLayerKwargs]):
519519
def _handle_anywidget_dispatch(
520520
widget: ipywidgets.Widget, msg: Union[str, list, dict], buffers: List[bytes]
521521
) -> None:
@@ -541,12 +541,14 @@ def _handle_anywidget_dispatch(
541541

542542
print("before on msg")
543543
self.on_msg(_handle_anywidget_dispatch)
544-
super().__init__(**kwargs) # type: ignore
544+
super().__init__(**kwargs)
545545

546546
_layer_type = traitlets.Unicode("bitmap-tile").tag(sync=True)
547547

548548
data = traitlets.Union(
549-
[traitlets.Unicode(), traitlets.List(traitlets.Unicode(), minlen=1)]
549+
[traitlets.Unicode(), traitlets.List(traitlets.Unicode(), minlen=1)],
550+
default_value=None,
551+
allow_none=True,
550552
).tag(sync=True)
551553
"""
552554
Either a URL template or an array of URL templates from which the tile data should

lonboard/_layer/rasterio_layer.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
from __future__ import annotations
2+
3+
import traceback
4+
from typing import Unpack
5+
6+
from rio_tiler.io.base import BaseReader
7+
8+
# from rio_tiler.io import Reader
9+
# from rio_tiler.models import ImageData
10+
from lonboard.types.layer import BitmapTileLayerKwargs
11+
12+
from .core import BitmapTileLayer
13+
14+
# # path = "/Users/kyle/Downloads/m_1806551_nw_20_030_20221212_20230329.tif"
15+
# path = "/Users/kyle/github/developmentseed/lonboard/m_4007307_sw_18_060_20220803.tif"
16+
# reader = Reader(path)
17+
# reader.geographic_bounds
18+
# reader.tms
19+
# reader.bounds
20+
# test = reader.tile(2601, 3674, 13)
21+
# dir(test)
22+
# # test.mask.all()
23+
# attrs.evolve(test, data=test.data[:3, :, :])
24+
# ImageData()
25+
# image_data = reader.tile(0, 0, 0)
26+
27+
# with open("tmp.png", "wb") as f:
28+
# f.write(image_data.render())
29+
30+
31+
def handle_anywidget_dispatch(
32+
widget: RioTilerLayer, msg: str | list | dict, buffers: list[bytes]
33+
) -> None:
34+
# widget.called += 1
35+
print(msg)
36+
37+
if not isinstance(msg, dict) or msg.get("kind") != "anywidget-command":
38+
return
39+
40+
try:
41+
content = msg["msg"]
42+
tile_id = content["tile_id"]
43+
tile_x, tile_y, tile_z = tile_id.split("-")
44+
tile_x = int(tile_x)
45+
tile_y = int(tile_y)
46+
tile_z = int(tile_z)
47+
48+
if tile_z < widget.min_zoom:
49+
return widget.send(
50+
{
51+
"id": msg["id"],
52+
"kind": "anywidget-command-response",
53+
"response": {},
54+
},
55+
[],
56+
)
57+
58+
image_data = widget.reader.tile(int(tile_x), int(tile_y), int(tile_z))
59+
60+
# test.evolve
61+
# rio_tiler.
62+
image_buf = image_data.render(add_mask=True)
63+
buffers = [image_buf]
64+
65+
response = "helloworld from init"
66+
widget.send(
67+
{
68+
"id": msg["id"],
69+
"kind": "anywidget-command-response",
70+
"response": response,
71+
},
72+
buffers,
73+
)
74+
except: # noqa: E722
75+
response = traceback.format_exc()
76+
widget.send(
77+
{
78+
"id": msg["id"],
79+
"kind": "anywidget-command-response",
80+
"response": response,
81+
},
82+
buffers,
83+
)
84+
85+
86+
class RioTilerLayer(BitmapTileLayer):
87+
reader: BaseReader
88+
89+
def __init__(
90+
self,
91+
reader: BaseReader,
92+
*,
93+
min_zoom: int = 10,
94+
**kwargs: Unpack[BitmapTileLayerKwargs],
95+
):
96+
self.reader = reader
97+
self.min_zoom = min_zoom
98+
99+
extent = reader.geographic_bounds
100+
kwargs["extent"] = tuple(extent)
101+
102+
self.on_msg(handle_anywidget_dispatch)
103+
super().__init__(**kwargs) # type: ignore
104+
105+
pass

0 commit comments

Comments
 (0)