From 0b6e435e9b37d5a005a002cd94bcb08e5a273b4b Mon Sep 17 00:00:00 2001 From: Carl Date: Tue, 19 Dec 2023 21:23:22 +0000 Subject: [PATCH] tweaks --- .gitignore | 2 + fire.py | 8 +-- pages/01_leafmap.py | 8 ++- solara-app.ipynb | 141 ++++++++++++++++++++++++++++++++++++++++++++ solara-test.ipynb | 19 ++++-- 5 files changed, 167 insertions(+), 11 deletions(-) create mode 100644 solara-app.ipynb diff --git a/.gitignore b/.gitignore index 01b7b98..313048c 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,5 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ .Rproj.user + +*.tif \ No newline at end of file diff --git a/fire.py b/fire.py index bf0c724..831520c 100644 --- a/fire.py +++ b/fire.py @@ -1,5 +1,4 @@ -import leafmap -import solara + import pystac_client import planetary_computer import odc.stac @@ -61,7 +60,7 @@ def compute_nbs(items, box): big = recent[recent.Shape_Area == recent.Shape_Area.max()].to_crs("EPSG:4326") # Get bounding box + dates before & after fire for STAC search -box = big.buffer(0.005).bounds.to_numpy()[0] # Fire bbox + buffer +box = big.buffer(0.01).bounds.to_numpy()[0] # Fire bbox + buffer alarm_date = datetime.strptime(big.ALARM_DATE.item(), "%Y-%m-%dT%H:%M:%S+00:00") before_date = alarm_date - timedelta(days=14) after_date = alarm_date + timedelta(days=14) @@ -79,4 +78,5 @@ def run(): if __name__ == "__main__": - run() \ No newline at end of file + run() + diff --git a/pages/01_leafmap.py b/pages/01_leafmap.py index d52f2e6..2764cd6 100644 --- a/pages/01_leafmap.py +++ b/pages/01_leafmap.py @@ -27,12 +27,16 @@ after_url = "https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif" + class Map(leafmap.Map): def __init__(self, **kwargs): super().__init__(**kwargs) # Add what you want below - self.add_gdf(jtree_fires) - self.split_map(before_url, after_url) + self.add_gdf(jtree_fires, "All Fires", ) + self.add_gdf(big, big.FIRE_NAME.item()) + self.split_map(before_url, after_url, + left_label = "NBS before fire", + right_label = "NBS after fire") @solara.component diff --git a/solara-app.ipynb b/solara-app.ipynb new file mode 100644 index 0000000..b62292e --- /dev/null +++ b/solara-app.ipynb @@ -0,0 +1,141 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import leafmap\n", + "import solara\n", + "from fire import *" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "run()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "zoom = solara.reactive(14)\n", + "center = solara.reactive((34, -116))\n", + "\n", + "before_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/before.tif\"\n", + "after_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif\"\n", + "\n", + "style = {\n", + " \"stroke\": False,\n", + " \"fill\": True,\n", + " \"fillColor\": \"#ff6666\",\n", + " \"fillOpacity\": 0.5,\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "class Map(leafmap.Map):\n", + " def __init__(self, **kwargs):\n", + " super().__init__(**kwargs)\n", + " # Add what you want below\n", + " # self.add_gdf(jtree, layer_name = \"Joshua Tree NP\")\n", + " self.add_gdf(jtree_fires, layer_name = \"All Fires\", style=style)\n", + " self.add_gdf(big, layer_name = big.FIRE_NAME.item())\n", + " #self.add_raster(\"before.tif\", layer_name = \"before\", colormap=\"viridis\")\n", + " #self.add_raster(\"after.tif\", layer_name = \"after\", colormap=\"viridis\")\n", + " self.split_map(before_url, after_url, \n", + " left_label= \"before fire\", \n", + " right_label = \"after fire\")\n", + " #self.add_stac_gui()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "@solara.component\n", + "def Page():\n", + " with solara.Column(style={\"min-width\": \"500px\"}):\n", + " # solara components support reactive variables\n", + " # solara.SliderInt(label=\"Zoom level\", value=zoom, min=1, max=20)\n", + " # using 3rd party widget library require wiring up the events manually\n", + " # using zoom.value and zoom.set\n", + " Map.element( # type: ignore\n", + " zoom=zoom.value,\n", + " on_zoom=zoom.set,\n", + " center=center.value,\n", + " on_center=center.set,\n", + " scroll_wheel_zoom=True,\n", + " toolbar_ctrl=False,\n", + " data_ctrl=False,\n", + " height=\"780px\",\n", + " )\n", + " solara.Text(f\"Zoom: {zoom.value}\")\n", + " solara.Text(f\"Center: {center.value}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "40a3f4affe8749f6882c35fe09663017", + "version_major": 2, + "version_minor": 0 + }, + "text/html": [ + "Cannot show widget. You probably want to rerun the code cell above (Click in the code cell, and press Shift+Enter +)." + ], + "text/plain": [ + "Cannot show ipywidgets in text" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Page()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/solara-test.ipynb b/solara-test.ipynb index e4c6f52..fe53248 100644 --- a/solara-test.ipynb +++ b/solara-test.ipynb @@ -145,7 +145,14 @@ "source": [ "\n", "before_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/before.tif\"\n", - "after_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif\"\n" + "after_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif\"\n", + "\n", + "style = {\n", + " \"stroke\": False,\n", + " \"fill\": True,\n", + " \"fillColor\": \"#ff6666\",\n", + " \"fillOpacity\": 0.5,\n", + "}" ] }, { @@ -159,11 +166,13 @@ " super().__init__(**kwargs)\n", " # Add what you want below\n", " # self.add_gdf(jtree, layer_name = \"Joshua Tree NP\")\n", - " # self.add_gdf(jtree_fires)\n", - " self.add_gdf(big, later_name = big.FIRE_NAME.item())\n", + " self.add_gdf(jtree_fires, layer_name = \"All Fires\", style=style)\n", + " self.add_gdf(big, layer_name = big.FIRE_NAME.item())\n", " #self.add_raster(\"before.tif\", layer_name = \"before\", colormap=\"viridis\")\n", " #self.add_raster(\"after.tif\", layer_name = \"after\", colormap=\"viridis\")\n", - " self.split_map(before_url, after_url)\n", + " self.split_map(before_url, after_url, \n", + " left_label= \"before fire\", \n", + " right_label = \"after fire\")\n", " #self.add_stac_gui()\n", "\n", "\n", @@ -196,7 +205,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b59035e5df2a4f5eb4ab5d2de9243664", + "model_id": "822080e3202b494888a05630fb5bf798", "version_major": 2, "version_minor": 0 },