cboettig commited on
Commit
0b6e435
·
1 Parent(s): 186b0eb
Files changed (5) hide show
  1. .gitignore +2 -0
  2. fire.py +4 -4
  3. pages/01_leafmap.py +6 -2
  4. solara-app.ipynb +141 -0
  5. solara-test.ipynb +14 -5
.gitignore CHANGED
@@ -160,3 +160,5 @@ cython_debug/
160
  # option (not recommended) you can uncomment the following to ignore the entire idea folder.
161
  #.idea/
162
  .Rproj.user
 
 
 
160
  # option (not recommended) you can uncomment the following to ignore the entire idea folder.
161
  #.idea/
162
  .Rproj.user
163
+
164
+ *.tif
fire.py CHANGED
@@ -1,5 +1,4 @@
1
- import leafmap
2
- import solara
3
  import pystac_client
4
  import planetary_computer
5
  import odc.stac
@@ -61,7 +60,7 @@ recent = jtree_fires[jtree_fires.YEAR_ > "2015"]
61
  big = recent[recent.Shape_Area == recent.Shape_Area.max()].to_crs("EPSG:4326")
62
 
63
  # Get bounding box + dates before & after fire for STAC search
64
- box = big.buffer(0.005).bounds.to_numpy()[0] # Fire bbox + buffer
65
  alarm_date = datetime.strptime(big.ALARM_DATE.item(), "%Y-%m-%dT%H:%M:%S+00:00")
66
  before_date = alarm_date - timedelta(days=14)
67
  after_date = alarm_date + timedelta(days=14)
@@ -79,4 +78,5 @@ def run():
79
 
80
 
81
  if __name__ == "__main__":
82
- run()
 
 
1
+
 
2
  import pystac_client
3
  import planetary_computer
4
  import odc.stac
 
60
  big = recent[recent.Shape_Area == recent.Shape_Area.max()].to_crs("EPSG:4326")
61
 
62
  # Get bounding box + dates before & after fire for STAC search
63
+ box = big.buffer(0.01).bounds.to_numpy()[0] # Fire bbox + buffer
64
  alarm_date = datetime.strptime(big.ALARM_DATE.item(), "%Y-%m-%dT%H:%M:%S+00:00")
65
  before_date = alarm_date - timedelta(days=14)
66
  after_date = alarm_date + timedelta(days=14)
 
78
 
79
 
80
  if __name__ == "__main__":
81
+ run()
82
+
pages/01_leafmap.py CHANGED
@@ -27,12 +27,16 @@ before_url = "https://huggingface.co/datasets/cboettig/solara-data/resolve/main/
27
  after_url = "https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif"
28
 
29
 
 
30
  class Map(leafmap.Map):
31
  def __init__(self, **kwargs):
32
  super().__init__(**kwargs)
33
  # Add what you want below
34
- self.add_gdf(jtree_fires)
35
- self.split_map(before_url, after_url)
 
 
 
36
 
37
 
38
  @solara.component
 
27
  after_url = "https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif"
28
 
29
 
30
+
31
  class Map(leafmap.Map):
32
  def __init__(self, **kwargs):
33
  super().__init__(**kwargs)
34
  # Add what you want below
35
+ self.add_gdf(jtree_fires, "All Fires", )
36
+ self.add_gdf(big, big.FIRE_NAME.item())
37
+ self.split_map(before_url, after_url,
38
+ left_label = "NBS before fire",
39
+ right_label = "NBS after fire")
40
 
41
 
42
  @solara.component
solara-app.ipynb ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 6,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import leafmap\n",
10
+ "import solara\n",
11
+ "from fire import *"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 3,
17
+ "metadata": {},
18
+ "outputs": [],
19
+ "source": [
20
+ "run()"
21
+ ]
22
+ },
23
+ {
24
+ "cell_type": "code",
25
+ "execution_count": 10,
26
+ "metadata": {},
27
+ "outputs": [],
28
+ "source": [
29
+ "zoom = solara.reactive(14)\n",
30
+ "center = solara.reactive((34, -116))\n",
31
+ "\n",
32
+ "before_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/before.tif\"\n",
33
+ "after_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif\"\n",
34
+ "\n",
35
+ "style = {\n",
36
+ " \"stroke\": False,\n",
37
+ " \"fill\": True,\n",
38
+ " \"fillColor\": \"#ff6666\",\n",
39
+ " \"fillOpacity\": 0.5,\n",
40
+ "}"
41
+ ]
42
+ },
43
+ {
44
+ "cell_type": "code",
45
+ "execution_count": 11,
46
+ "metadata": {},
47
+ "outputs": [],
48
+ "source": [
49
+ "class Map(leafmap.Map):\n",
50
+ " def __init__(self, **kwargs):\n",
51
+ " super().__init__(**kwargs)\n",
52
+ " # Add what you want below\n",
53
+ " # self.add_gdf(jtree, layer_name = \"Joshua Tree NP\")\n",
54
+ " self.add_gdf(jtree_fires, layer_name = \"All Fires\", style=style)\n",
55
+ " self.add_gdf(big, layer_name = big.FIRE_NAME.item())\n",
56
+ " #self.add_raster(\"before.tif\", layer_name = \"before\", colormap=\"viridis\")\n",
57
+ " #self.add_raster(\"after.tif\", layer_name = \"after\", colormap=\"viridis\")\n",
58
+ " self.split_map(before_url, after_url, \n",
59
+ " left_label= \"before fire\", \n",
60
+ " right_label = \"after fire\")\n",
61
+ " #self.add_stac_gui()\n",
62
+ "\n"
63
+ ]
64
+ },
65
+ {
66
+ "cell_type": "code",
67
+ "execution_count": null,
68
+ "metadata": {},
69
+ "outputs": [],
70
+ "source": [
71
+ "@solara.component\n",
72
+ "def Page():\n",
73
+ " with solara.Column(style={\"min-width\": \"500px\"}):\n",
74
+ " # solara components support reactive variables\n",
75
+ " # solara.SliderInt(label=\"Zoom level\", value=zoom, min=1, max=20)\n",
76
+ " # using 3rd party widget library require wiring up the events manually\n",
77
+ " # using zoom.value and zoom.set\n",
78
+ " Map.element( # type: ignore\n",
79
+ " zoom=zoom.value,\n",
80
+ " on_zoom=zoom.set,\n",
81
+ " center=center.value,\n",
82
+ " on_center=center.set,\n",
83
+ " scroll_wheel_zoom=True,\n",
84
+ " toolbar_ctrl=False,\n",
85
+ " data_ctrl=False,\n",
86
+ " height=\"780px\",\n",
87
+ " )\n",
88
+ " solara.Text(f\"Zoom: {zoom.value}\")\n",
89
+ " solara.Text(f\"Center: {center.value}\")\n"
90
+ ]
91
+ },
92
+ {
93
+ "cell_type": "code",
94
+ "execution_count": 12,
95
+ "metadata": {},
96
+ "outputs": [
97
+ {
98
+ "data": {
99
+ "application/vnd.jupyter.widget-view+json": {
100
+ "model_id": "40a3f4affe8749f6882c35fe09663017",
101
+ "version_major": 2,
102
+ "version_minor": 0
103
+ },
104
+ "text/html": [
105
+ "Cannot show widget. You probably want to rerun the code cell above (<i>Click in the code cell, and press Shift+Enter <kbd>⇧</kbd>+<kbd>↩</kbd></i>)."
106
+ ],
107
+ "text/plain": [
108
+ "Cannot show ipywidgets in text"
109
+ ]
110
+ },
111
+ "metadata": {},
112
+ "output_type": "display_data"
113
+ }
114
+ ],
115
+ "source": [
116
+ "Page()"
117
+ ]
118
+ }
119
+ ],
120
+ "metadata": {
121
+ "kernelspec": {
122
+ "display_name": ".venv",
123
+ "language": "python",
124
+ "name": "python3"
125
+ },
126
+ "language_info": {
127
+ "codemirror_mode": {
128
+ "name": "ipython",
129
+ "version": 3
130
+ },
131
+ "file_extension": ".py",
132
+ "mimetype": "text/x-python",
133
+ "name": "python",
134
+ "nbconvert_exporter": "python",
135
+ "pygments_lexer": "ipython3",
136
+ "version": "3.11.6"
137
+ }
138
+ },
139
+ "nbformat": 4,
140
+ "nbformat_minor": 2
141
+ }
solara-test.ipynb CHANGED
@@ -145,7 +145,14 @@
145
  "source": [
146
  "\n",
147
  "before_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/before.tif\"\n",
148
- "after_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif\"\n"
 
 
 
 
 
 
 
149
  ]
150
  },
151
  {
@@ -159,11 +166,13 @@
159
  " super().__init__(**kwargs)\n",
160
  " # Add what you want below\n",
161
  " # self.add_gdf(jtree, layer_name = \"Joshua Tree NP\")\n",
162
- " # self.add_gdf(jtree_fires)\n",
163
- " self.add_gdf(big, later_name = big.FIRE_NAME.item())\n",
164
  " #self.add_raster(\"before.tif\", layer_name = \"before\", colormap=\"viridis\")\n",
165
  " #self.add_raster(\"after.tif\", layer_name = \"after\", colormap=\"viridis\")\n",
166
- " self.split_map(before_url, after_url)\n",
 
 
167
  " #self.add_stac_gui()\n",
168
  "\n",
169
  "\n",
@@ -196,7 +205,7 @@
196
  {
197
  "data": {
198
  "application/vnd.jupyter.widget-view+json": {
199
- "model_id": "b59035e5df2a4f5eb4ab5d2de9243664",
200
  "version_major": 2,
201
  "version_minor": 0
202
  },
 
145
  "source": [
146
  "\n",
147
  "before_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/before.tif\"\n",
148
+ "after_url = \"https://huggingface.co/datasets/cboettig/solara-data/resolve/main/after.tif\"\n",
149
+ "\n",
150
+ "style = {\n",
151
+ " \"stroke\": False,\n",
152
+ " \"fill\": True,\n",
153
+ " \"fillColor\": \"#ff6666\",\n",
154
+ " \"fillOpacity\": 0.5,\n",
155
+ "}"
156
  ]
157
  },
158
  {
 
166
  " super().__init__(**kwargs)\n",
167
  " # Add what you want below\n",
168
  " # self.add_gdf(jtree, layer_name = \"Joshua Tree NP\")\n",
169
+ " self.add_gdf(jtree_fires, layer_name = \"All Fires\", style=style)\n",
170
+ " self.add_gdf(big, layer_name = big.FIRE_NAME.item())\n",
171
  " #self.add_raster(\"before.tif\", layer_name = \"before\", colormap=\"viridis\")\n",
172
  " #self.add_raster(\"after.tif\", layer_name = \"after\", colormap=\"viridis\")\n",
173
+ " self.split_map(before_url, after_url, \n",
174
+ " left_label= \"before fire\", \n",
175
+ " right_label = \"after fire\")\n",
176
  " #self.add_stac_gui()\n",
177
  "\n",
178
  "\n",
 
205
  {
206
  "data": {
207
  "application/vnd.jupyter.widget-view+json": {
208
+ "model_id": "822080e3202b494888a05630fb5bf798",
209
  "version_major": 2,
210
  "version_minor": 0
211
  },