Jupyter: Geospatial integration with Lonboard #305
kylebarron
started this conversation in
Ideas
Replies: 1 comment 3 replies
-
Thanks for reaching out! I'd love to explore connections between projects. (Also, I moved this out of issues and over to GitHub discussions.)
|
Beta Was this translation helpful? Give feedback.
3 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
👋 This is really cool and I've been a fan of both of your work for a long time!
I saw you added some geospatial support and I'm curious if there could be some benefits to integrations between our projects. I'm working on Lonboard, an interactive geospatial visualization library for Jupyter Notebooks built on (Geo)Arrow, Parquet, and deck.gl (which uses WebGL). Since both projects are very performant, I think they could be quite complementary. So for example, your taxi example is really nice, but it plots the data on a plain canvas. For many users being able to plot data on an interactive map with a basemap is really useful context.
To give an idea of the expected performance, here's 3 million points rendered from a GeoDataFrame in 3 seconds, including calculating a unique color and radius per point.
lonboard-fig1.mov
One potential area of collaboration is for cross filtering between spatial and non-spatial views, since it seems Mosaic really excels at this. Lonboard recently added support for GPU-based data filtering for numeric attributes. Geometries whose attributes are outside the selected ranges are not displayed. Here those same 3 million points (from internet speedtest data) are filtered based on download/upload speeds
Screen.Recording.2024-02-13.at.11.55.00.AM.mov
A natural integration would be through our jupyter APIs. When I looked at mosaic a few weeks ago I thought I saw that the selection state of the widget was passed back to Python as a SQL string, and I had been worried that I'd need to parse the SQL string to interpret ranges. Am I imagining that it used to be SQL-based? But with 0.6.0 it looks like
widget.params
now holds a dict possibly containing ranges?So I'm thinking a compelling demo would be to set up a widget connection where expected behavior might be:
observe
handler sees the change in filter parameter and sets the filter on lonboard's mapWe'll have multiple copies of the data, but I think that's ok because mosaic seems quite integrated around duckdb and I'm blocked on duckdb integration pending duckdb/duckdb-spatial#153.
What do you think? Is this of any interest to you?
Beta Was this translation helpful? Give feedback.
All reactions