From dac50e64dfc1c91cd8495fe54d22bef7d016bad9 Mon Sep 17 00:00:00 2001 From: Ruiz Rivera <63206444+vanislekahuna@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:40:47 -0800 Subject: [PATCH] Created using Colab --- tutorials/BC_Wildfire_Mapping.ipynb | 10505 +++++++++++++------------- 1 file changed, 5252 insertions(+), 5253 deletions(-) diff --git a/tutorials/BC_Wildfire_Mapping.ipynb b/tutorials/BC_Wildfire_Mapping.ipynb index 10b138b1..f37b3144 100644 --- a/tutorials/BC_Wildfire_Mapping.ipynb +++ b/tutorials/BC_Wildfire_Mapping.ipynb @@ -1,5400 +1,5399 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "colab_type": "text", - "id": "view-in-github" - }, - "source": [ - "\"Open" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "Q4cJY74nZBVE" - }, - "source": [ - "# **BC Wildfire Mapping Tutorial**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dsujLjYRakaY" - }, - "source": [ - "\n", - "\n", - "\n", - "[Photo Source](https://www.huskyhavenfl.org/hhofl-blog/2022/5/2/the-abcs-of-burns-in-dogs)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TLIFDxNunvRW" - }, - "source": [ - "## Introduction\n", - "\n", - "In Canada's westernmost province, British Columbia, the uptick in the severity and occurrence of wildfires have caused substantial damage to the social and ecological systems in the province. For instance, in 2023 alone, 2,245 total wildfires burned in the province amounting to 2.84 million hectares of land going up in smoke (BC Public Service, 2023). Although British Columbia is a large region in terms of land mass with diverse terrain, the total acres burnt was truly an anomaly as it had more than doubled the previous record of 1.215 million acres in 2018 (BC Public Service, 2023). As a result of these wildfires, tens of thousands of people were forced to evacuate their homes. While those fortunate were able to flee from the crisis, there were plenty of other living creatures who didn't have the means, ability, or fortune to escape such an agonizing fate. And so far, no estimates have been released on the amount of wildlife that perished in those flames.\n", - "\n", - "Whether a wildfire was caused through natural means like lightning strikes or by humans, detecting it and estimating its perimeter is one of the most challenging, yet impactful ways to minimize their destruction. One reason the early detection of a wildfire can be so impactful is that those that spark in remote forests can grow to unmanageable proportions before they spread close enough to an urban centre for locals to report it. Especially when we have a province as large as British Columbia with vast amounts of terrain such as dense forests, rocky mountains, or dry grasslands, communities on the ground may not be able to detect wildfires as easily if they start in a remote area until it's already burnt hundreds, or even thousands, of acres and wildlife. As an example, on May 12th, 2023, a lightning strike in [Donnie Creek](https://maps.app.goo.gl/c6zBveq2N529DkHX9) which is an area about 136 km southeast of the nearest urban centre, Fort Nelson, lit the fuse for a wildfire to burn about 5,700 square km before it was finally contained (Kulkarni, 2023).\n", - "\n", - "However, with the recent advances in satellite technology and remote sensing techniques, we can now combine raw images from various orbiting satellites with maps to build estimations of a wildfire perimeter. In this article, we'll use the raw images from the Sentinel-2 and the GOES-16/17 satellites stored in the [Google Cloud Earth Engine data catalogue](https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_FDCF#bands) to build a wildfire perimeter that we can overlay on a map that serves as a reference point to urban centres and other significant landmarks. By accessing image data from various satellite sources, we can highlight the strengths and weaknesses of the two approaches to have a broader foundation in wildfire detection and remote-sending more broadly.\n", - "\n", - "Let's begin." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XpBio11WQMyF" - }, - "source": [ - "\n", - "\n", - "\n", - "[Photo Source](https://www.bbc.com/news/world-australia-50511963)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "YJj05qlbrwuu" - }, - "source": [ - "First, a bit of bookkeeping. Let's ensure that we're using the same versions of packages required in this article to ensure reproducibility and to follow coding best practices." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 + "provenance": [], + "include_colab_link": true }, - "collapsed": true, - "id": "k_xsUtyuYs_7", - "outputId": "4a972461-2b8a-4ae3-bdfb-0342b871fbc7" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting earthengine-api==0.1.406\n", - " Downloading earthengine_api-0.1.406-py3-none-any.whl.metadata (1.9 kB)\n", - "Requirement already satisfied: google-cloud-storage in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.8.0)\n", - "Requirement already satisfied: google-api-python-client>=1.12.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.137.0)\n", - "Requirement already satisfied: google-auth>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.27.0)\n", - "Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (0.2.0)\n", - "Requirement already satisfied: httplib2<1dev,>=0.9.2 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (0.22.0)\n", - "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.32.3)\n", - "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api==0.1.406) (2.19.2)\n", - "Requirement already satisfied: uritemplate<5,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api==0.1.406) (4.1.1)\n", - "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api==0.1.406) (5.5.0)\n", - "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api==0.1.406) (0.4.1)\n", - "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api==0.1.406) (4.9)\n", - "Requirement already satisfied: pyparsing!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4,>=2.4.2 in /usr/local/lib/python3.10/dist-packages (from httplib2<1dev,>=0.9.2->earthengine-api==0.1.406) (3.2.0)\n", - "Requirement already satisfied: google-cloud-core<3.0dev,>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api==0.1.406) (2.4.1)\n", - "Requirement already satisfied: google-resumable-media>=2.3.2 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api==0.1.406) (2.7.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (3.4.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (2.2.3)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (2024.8.30)\n", - "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api==0.1.406) (1.65.0)\n", - "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api==0.1.406) (3.20.3)\n", - "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api==0.1.406) (1.25.0)\n", - "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib/python3.10/dist-packages (from google-resumable-media>=2.3.2->google-cloud-storage->earthengine-api==0.1.406) (1.6.0)\n", - "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.4.1->earthengine-api==0.1.406) (0.6.1)\n", - "Downloading earthengine_api-0.1.406-py3-none-any.whl (368 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m368.1/368.1 kB\u001b[0m \u001b[31m4.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hInstalling collected packages: earthengine-api\n", - " Attempting uninstall: earthengine-api\n", - " Found existing installation: earthengine-api 1.2.0\n", - " Uninstalling earthengine-api-1.2.0:\n", - " Successfully uninstalled earthengine-api-1.2.0\n", - "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", - "geemap 0.35.0 requires earthengine-api>=1.0.0, but you have earthengine-api 0.1.406 which is incompatible.\u001b[0m\u001b[31m\n", - "\u001b[0mSuccessfully installed earthengine-api-0.1.406\n", - "Collecting folium==0.14.0\n", - " Downloading folium-0.14.0-py2.py3-none-any.whl.metadata (3.5 kB)\n", - "Requirement already satisfied: branca>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (0.8.0)\n", - "Requirement already satisfied: jinja2>=2.9 in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (3.1.4)\n", - "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (1.26.4)\n", - "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (2.32.3)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=2.9->folium==0.14.0) (3.0.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (3.4.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (2.2.3)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (2024.8.30)\n", - "Downloading folium-0.14.0-py2.py3-none-any.whl (102 kB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m102.3/102.3 kB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hInstalling collected packages: folium\n", - " Attempting uninstall: folium\n", - " Found existing installation: folium 0.18.0\n", - " Uninstalling folium-0.18.0:\n", - " Successfully uninstalled folium-0.18.0\n", - "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", - "geemap 0.35.0 requires earthengine-api>=1.0.0, but you have earthengine-api 0.1.406 which is incompatible.\n", - "geemap 0.35.0 requires folium>=0.17.0, but you have folium 0.14.0 which is incompatible.\u001b[0m\u001b[31m\n", - "\u001b[0mSuccessfully installed folium-0.14.0\n", - "Collecting geemap==0.32.1\n", - " Downloading geemap-0.32.1-py2.py3-none-any.whl.metadata (14 kB)\n", - "Requirement already satisfied: bqplot in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.12.43)\n", - "Requirement already satisfied: colour in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.1.5)\n", - "Requirement already satisfied: earthengine-api>=0.1.347 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.1.406)\n", - "Requirement already satisfied: eerepr>=0.0.4 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.0.4)\n", - "Requirement already satisfied: folium>=0.13.0 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.14.0)\n", - "Requirement already satisfied: geocoder in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (1.38.1)\n", - "Requirement already satisfied: ipyevents in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (2.0.2)\n", - "Requirement already satisfied: ipyfilechooser>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.6.0)\n", - "Collecting ipyleaflet==0.18.2 (from geemap==0.32.1)\n", - " Downloading ipyleaflet-0.18.2-py3-none-any.whl.metadata (1.0 kB)\n", - "Requirement already satisfied: ipytree in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.2.2)\n", - "Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (3.8.0)\n", - "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (1.26.4)\n", - "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (2.2.2)\n", - "Requirement already satisfied: plotly in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (5.24.1)\n", - "Requirement already satisfied: pyperclip in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (1.9.0)\n", - "Requirement already satisfied: pyshp>=2.1.3 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (2.3.1)\n", - "Requirement already satisfied: python-box in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (7.2.0)\n", - "Requirement already satisfied: scooby in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.10.0)\n", - "Requirement already satisfied: ipywidgets<9,>=7.6.0 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (7.7.1)\n", - "Requirement already satisfied: traittypes<3,>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (0.2.1)\n", - "Requirement already satisfied: xyzservices>=2021.8.1 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (2024.9.0)\n", - "Requirement already satisfied: branca>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (0.8.0)\n", - "Requirement already satisfied: google-cloud-storage in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.8.0)\n", - "Requirement already satisfied: google-api-python-client>=1.12.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.137.0)\n", - "Requirement already satisfied: google-auth>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.27.0)\n", - "Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (0.2.0)\n", - "Requirement already satisfied: httplib2<1dev,>=0.9.2 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (0.22.0)\n", - "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.32.3)\n", - "Requirement already satisfied: jinja2>=2.9 in /usr/local/lib/python3.10/dist-packages (from folium>=0.13.0->geemap==0.32.1) (3.1.4)\n", - "Requirement already satisfied: traitlets>=4.3.0 in /usr/local/lib/python3.10/dist-packages (from bqplot->geemap==0.32.1) (5.7.1)\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas->geemap==0.32.1) (2.8.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->geemap==0.32.1) (2024.2)\n", - "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.10/dist-packages (from pandas->geemap==0.32.1) (2024.2)\n", - "Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (8.1.7)\n", - "Requirement already satisfied: future in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (1.0.0)\n", - "Requirement already satisfied: ratelim in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (0.1.6)\n", - "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (1.16.0)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (1.3.0)\n", - "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (4.54.1)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (1.4.7)\n", - "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (24.1)\n", - "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (10.4.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (3.2.0)\n", - "Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from plotly->geemap==0.32.1) (9.0.0)\n", - "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (2.19.2)\n", - "Requirement already satisfied: uritemplate<5,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (4.1.1)\n", - "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (5.5.0)\n", - "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (0.4.1)\n", - "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (4.9)\n", - "Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (5.5.6)\n", - "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.0)\n", - "Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.6.10)\n", - "Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (7.34.0)\n", - "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.0.13)\n", - "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=2.9->folium>=0.13.0->geemap==0.32.1) (3.0.2)\n", - "Requirement already satisfied: google-cloud-core<3.0dev,>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api>=0.1.347->geemap==0.32.1) (2.4.1)\n", - "Requirement already satisfied: google-resumable-media>=2.3.2 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api>=0.1.347->geemap==0.32.1) (2.7.2)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (3.4.0)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (3.10)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (2.2.3)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (2024.8.30)\n", - "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ratelim->geocoder->geemap==0.32.1) (4.4.2)\n", - "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (1.65.0)\n", - "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (3.20.3)\n", - "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (1.25.0)\n", - "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib/python3.10/dist-packages (from google-resumable-media>=2.3.2->google-cloud-storage->earthengine-api>=0.1.347->geemap==0.32.1) (1.6.0)\n", - "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel>=4.5.1->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.1.12)\n", - "Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel>=4.5.1->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.3.3)\n", - "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (75.1.0)\n", - "Collecting jedi>=0.16 (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1)\n", - " Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)\n", - "Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.7.5)\n", - "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.0.48)\n", - "Requirement already satisfied: pygments in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.18.0)\n", - "Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.0)\n", - "Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.1.7)\n", - "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.9.0)\n", - "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (0.6.1)\n", - "Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.5.5)\n", - "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.8.4)\n", - "Requirement already satisfied: pyzmq<25,>=17 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (24.0.1)\n", - "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (23.1.0)\n", - "Requirement already satisfied: jupyter-core>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (5.7.2)\n", - "Requirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (5.10.4)\n", - "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (7.16.4)\n", - "Requirement already satisfied: nest-asyncio>=1.5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.6.0)\n", - "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.8.3)\n", - "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.18.1)\n", - "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.21.0)\n", - "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.1.0)\n", - "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.7.0)\n", - "Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.13)\n", - "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.6.1->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.3.6)\n", - "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.4)\n", - "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.12.3)\n", - "Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.2.0)\n", - "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.7.1)\n", - "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.3.0)\n", - "Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.0.2)\n", - "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.10.0)\n", - "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.5.1)\n", - "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.4.0)\n", - "Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.20.0)\n", - "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.23.0)\n", - "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (21.2.0)\n", - "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.5.1)\n", - "Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (24.2.0)\n", - "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2024.10.1)\n", - "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.35.1)\n", - "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.20.0)\n", - "Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.10/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.24.0)\n", - "Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.17.1)\n", - "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.6)\n", - "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.22)\n", - "Requirement already satisfied: anyio<4,>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.7.1)\n", - "Requirement already satisfied: websocket-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.8.0)\n", - "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.3.1)\n", - "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.2.2)\n", - "Downloading geemap-0.32.1-py2.py3-none-any.whl (2.2 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m17.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hDownloading ipyleaflet-0.18.2-py3-none-any.whl (3.7 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.7/3.7 MB\u001b[0m \u001b[31m34.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hDownloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m36.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hInstalling collected packages: jedi, ipyleaflet, geemap\n", - " Attempting uninstall: ipyleaflet\n", - " Found existing installation: ipyleaflet 0.19.2\n", - " Uninstalling ipyleaflet-0.19.2:\n", - " Successfully uninstalled ipyleaflet-0.19.2\n", - " Attempting uninstall: geemap\n", - " Found existing installation: geemap 0.35.0\n", - " Uninstalling geemap-0.35.0:\n", - " Successfully uninstalled geemap-0.35.0\n", - "Successfully installed geemap-0.32.1 ipyleaflet-0.18.2 jedi-0.19.2\n", - "Collecting matplotlib==3.7.1\n", - " Downloading matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (1.3.0)\n", - "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (0.12.1)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (4.54.1)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (1.4.7)\n", - "Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (1.26.4)\n", - "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (24.1)\n", - "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (10.4.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (3.2.0)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (2.8.2)\n", - "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib==3.7.1) (1.16.0)\n", - "Downloading matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.6 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.6/11.6 MB\u001b[0m \u001b[31m66.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hInstalling collected packages: matplotlib\n", - " Attempting uninstall: matplotlib\n", - " Found existing installation: matplotlib 3.8.0\n", - " Uninstalling matplotlib-3.8.0:\n", - " Successfully uninstalled matplotlib-3.8.0\n", - "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", - "plotnine 0.14.0 requires matplotlib>=3.8.0, but you have matplotlib 3.7.1 which is incompatible.\u001b[0m\u001b[31m\n", - "\u001b[0mSuccessfully installed matplotlib-3.7.1\n" - ] + "kernelspec": { + "name": "python3", + "display_name": "Python 3" }, - { - "data": { - "application/vnd.colab-display-data+json": { - "id": "c9c38a8387794feb9723f73317363f07", - "pip_warning": { - "packages": [ - "matplotlib", - "mpl_toolkits" - ] - } - } - }, - "metadata": {}, - "output_type": "display_data" + "language_info": { + "name": "python" }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting numpy==1.25.2\n", - " Downloading numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", - "Downloading numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.2/18.2 MB\u001b[0m \u001b[31m53.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25h\u001b[31mERROR: Operation cancelled by user\u001b[0m\u001b[31m\n", - "\u001b[0m/bin/bash: line 1: 2.7.0: No such file or directory\n" - ] + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "9470415a9dc44809940f3c967e24de34": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapModel", + "model_module_version": "^0.18", + "state": { + "_dom_classes": [], + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletMapView", + "bottom": 44621, + "bounce_at_zoom_limits": true, + "box_zoom": true, + "center": [ + 50.23128609777502, + -121.58153879631847 + ], + "close_popup_on_click": true, + "controls": [ + "IPY_MODEL_385ae06f43094e4e97e9dce81756621c", + "IPY_MODEL_04ac8eb0c97a48adaa2589588bd6a481", + "IPY_MODEL_e464f2d84e484efaa405e812e423e541", + "IPY_MODEL_f7d1501fcbb24550b305c1e857824d96", + "IPY_MODEL_ab51866f1a11495eb0e2ec95039082dc", + "IPY_MODEL_b2856e01a3854c30a01268d6d847a4da" + ], + "crs": { + "name": "EPSG3857", + "custom": false + }, + "default_style": "IPY_MODEL_02d2ce2c1d094866b5d3370f6e917f53", + "double_click_zoom": true, + "dragging": true, + "dragging_style": "IPY_MODEL_83a930218ccf459da373a6162244ff3e", + "east": -120.41015625000001, + "fullscreen": false, + "inertia": true, + "inertia_deceleration": 3000, + "inertia_max_speed": 1500, + "interpolation": "bilinear", + "keyboard": true, + "keyboard_pan_offset": 80, + "keyboard_zoom_offset": 1, + "layers": [ + "IPY_MODEL_8e5b9cb56d904a299c1146c05f720cde", + "IPY_MODEL_02f4a049e36e4963bc8446e3fc80a4a2", + "IPY_MODEL_8380126b3a7b4110a82fdec0a7f0833b", + "IPY_MODEL_93a7ffc87ec546ccb7f5ea8dffb53b23" + ], + "layout": "IPY_MODEL_a208756ef0614a63a2f2bc7e060b22de", + "left": 20844, + "max_zoom": null, + "min_zoom": null, + "modisdate": "2024-11-10", + "north": 50.75557231232454, + "options": [ + "bounce_at_zoom_limits", + "box_zoom", + "center", + "close_popup_on_click", + "double_click_zoom", + "dragging", + "fullscreen", + "inertia", + "inertia_deceleration", + "inertia_max_speed", + "interpolation", + "keyboard", + "keyboard_pan_offset", + "keyboard_zoom_offset", + "max_zoom", + "min_zoom", + "prefer_canvas", + "scroll_wheel_zoom", + "tap", + "tap_tolerance", + "touch_zoom", + "world_copy_jump", + "zoom", + "zoom_animation_threshold", + "zoom_delta", + "zoom_snap" + ], + "panes": {}, + "prefer_canvas": false, + "right": 21696, + "scroll_wheel_zoom": true, + "south": 49.70139134233472, + "style": "IPY_MODEL_93849482fcc94f20b3e1abc8b73c6915", + "tap": true, + "tap_tolerance": 15, + "top": 44021, + "touch_zoom": true, + "west": -122.75024414062501, + "window_url": "https://h8bukvs53mh-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab_20241107-060106_RC01_694212549", + "world_copy_jump": false, + "zoom": 9, + "zoom_animation_threshold": 4, + "zoom_delta": 1, + "zoom_snap": 1 + } + }, + "385ae06f43094e4e97e9dce81756621c": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletZoomControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletZoomControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletZoomControlView", + "options": [ + "position", + "zoom_in_text", + "zoom_in_title", + "zoom_out_text", + "zoom_out_title" + ], + "position": "topleft", + "zoom_in_text": "+", + "zoom_in_title": "Zoom in", + "zoom_out_text": "-", + "zoom_out_title": "Zoom out" + } + }, + "04ac8eb0c97a48adaa2589588bd6a481": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletFullScreenControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletFullScreenControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletFullScreenControlView", + "options": [ + "position" + ], + "position": "topleft" + } + }, + "e464f2d84e484efaa405e812e423e541": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletDrawControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletDrawControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletDrawControlView", + "circle": {}, + "circlemarker": {}, + "data": [], + "edit": true, + "marker": { + "shapeOptions": { + "color": "#3388ff" + } + }, + "options": [ + "position" + ], + "polygon": { + "shapeOptions": {} + }, + "polyline": { + "shapeOptions": {} + }, + "position": "topleft", + "rectangle": { + "shapeOptions": { + "color": "#3388ff" + } + }, + "remove": true + } + }, + "f7d1501fcbb24550b305c1e857824d96": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletScaleControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletScaleControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletScaleControlView", + "imperial": true, + "max_width": 100, + "metric": true, + "options": [ + "imperial", + "max_width", + "metric", + "position", + "update_when_idle" + ], + "position": "bottomleft", + "update_when_idle": false + } + }, + "ab51866f1a11495eb0e2ec95039082dc": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletWidgetControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletWidgetControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletWidgetControlView", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "options": [ + "position", + "transparent_bg" + ], + "position": "topright", + "transparent_bg": false, + "widget": "IPY_MODEL_5ab5ad8185c249229caaf19d8808d04e" + } + }, + "b2856e01a3854c30a01268d6d847a4da": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletAttributionControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletAttributionControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletAttributionControlView", + "options": [ + "position", + "prefix" + ], + "position": "bottomright", + "prefix": "ipyleaflet" + } + }, + "02d2ce2c1d094866b5d3370f6e917f53": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "grab" + } + }, + "83a930218ccf459da373a6162244ff3e": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "move" + } + }, + "8e5b9cb56d904a299c1146c05f720cde": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "© OpenStreetMap contributors", + "base": true, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 19, + "min_native_zoom": null, + "min_zoom": 1, + "name": "OpenStreetMap.Mapnik", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "visible": true, + "zoom_offset": 0 + } + }, + "02f4a049e36e4963bc8446e3fc80a4a2": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "Area of interest", + "no_wrap": false, + "opacity": 0.2, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/949cdc3eaef037d03d1f783d22744dda-6af4447de6f99ac42f7acd0273bef53c/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "8380126b3a7b4110a82fdec0a7f0833b": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "GOES-16 maximum confidence", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/21edfd179b88dc67ea84526f06db61c6-699092feb3bdba1e51cdc59a399519d4/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "93a7ffc87ec546ccb7f5ea8dffb53b23": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "GOES-17 maximum confidence", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/b456f335114c35c4960fa991a4ddb7a7-5d4d8dae72b4a78c0d4d1dd15121d890/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "a208756ef0614a63a2f2bc7e060b22de": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "600px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "93849482fcc94f20b3e1abc8b73c6915": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "grab" + } + }, + "5ab5ad8185c249229caaf19d8808d04e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "VBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [ + "geemap-colab" + ], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "VBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "VBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_7f3796cf17e044679c73ce6513c249c3" + ], + "layout": "IPY_MODEL_9156829da21a4f7797d7fad70631365f" + } + }, + "7f3796cf17e044679c73ce6513c249c3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "wrench", + "layout": "IPY_MODEL_3c16f5b1ab8f4af98c27a2b618303549", + "style": "IPY_MODEL_2f084073179c49efba19584acd27a353", + "tooltip": "Toolbar", + "value": false + } + }, + "9156829da21a4f7797d7fad70631365f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3c16f5b1ab8f4af98c27a2b618303549": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "28px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 4px", + "right": null, + "top": null, + "visibility": null, + "width": "28px" + } + }, + "2f084073179c49efba19584acd27a353": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c26e8c080d464664b7024abd238b6718": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "auto", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 4px", + "right": null, + "top": null, + "visibility": null, + "width": "auto" + } + }, + "c11fcb2bc7e14aee9b2f3a99c89c172e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "cfef96a5039c4dbea3c7b0d605089bbd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "auto", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 4px", + "right": null, + "top": null, + "visibility": null, + "width": "auto" + } + }, + "009300d787f040b187f0f9be8b3b5c92": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ad00c5871f02441898e0eb15355f707a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "auto", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 4px", + "right": null, + "top": null, + "visibility": null, + "width": "auto" + } + }, + "d5a226f7fbbe4cc0877735da3c656f68": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "cdee68c696484bea812a894f65a3f12c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "primary", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "map", + "layout": "IPY_MODEL_c26e8c080d464664b7024abd238b6718", + "style": "IPY_MODEL_c11fcb2bc7e14aee9b2f3a99c89c172e", + "tooltip": "Basemap selector", + "value": false + } + }, + "ef8fc14efe174e0e9fa8cd8adc5410ee": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "primary", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "info", + "layout": "IPY_MODEL_cfef96a5039c4dbea3c7b0d605089bbd", + "style": "IPY_MODEL_009300d787f040b187f0f9be8b3b5c92", + "tooltip": "Inspector", + "value": false + } + }, + "dca45c47f02548e995f2dbad100daad1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "primary", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "question", + "layout": "IPY_MODEL_ad00c5871f02441898e0eb15355f707a", + "style": "IPY_MODEL_d5a226f7fbbe4cc0877735da3c656f68", + "tooltip": "Get help", + "value": false + } + }, + "2aedf7599327489699d5ed8540457f98": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": "1px 1px", + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": "32px 32px 32px ", + "grid_template_rows": "32px ", + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "5px", + "right": null, + "top": null, + "visibility": null, + "width": "109px" + } + }, + "ad333e3f1fe3421684815c2566328924": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "28px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "72px" + } + }, + "d485ac9f212943af9ab0eae60e589588": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a367aaf12c2945579728b3487aa97de6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fcd71ba8dfbb4ae3ad80cda3efc5460e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "00c34898babb44598172f5edb305928e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "server", + "layout": "IPY_MODEL_ad333e3f1fe3421684815c2566328924", + "style": "IPY_MODEL_d485ac9f212943af9ab0eae60e589588", + "tooltip": "Layers", + "value": false + } + }, + "b56764dc4edf4a6b852eeb94813465cf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "GridBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "GridBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "GridBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cdee68c696484bea812a894f65a3f12c", + "IPY_MODEL_ef8fc14efe174e0e9fa8cd8adc5410ee", + "IPY_MODEL_dca45c47f02548e995f2dbad100daad1" + ], + "layout": "IPY_MODEL_2aedf7599327489699d5ed8540457f98" + } + }, + "491583fa5edf4d398f9a5e5ca71d54aa": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapModel", + "model_module_version": "^0.18", + "state": { + "_dom_classes": [], + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletMapView", + "bottom": 44621, + "bounce_at_zoom_limits": true, + "box_zoom": true, + "center": [ + 50.23128609777502, + -121.58153879631847 + ], + "close_popup_on_click": true, + "controls": [ + "IPY_MODEL_f64b26b56ac84e389d657dbe460c67fc", + "IPY_MODEL_28cdeb24a4bc48e7b6b179e9ab47d80d", + "IPY_MODEL_75a80c80751a418ebf8c6f0563182140", + "IPY_MODEL_9844fe02dbb747b6bb427572cc9db899", + "IPY_MODEL_d63f91597a284fc0870c59077f043695", + "IPY_MODEL_8f21bd7200f447c1aac3f659765ad118" + ], + "crs": { + "name": "EPSG3857", + "custom": false + }, + "default_style": "IPY_MODEL_c4c81b26a1284ba0b795c12b86d78d53", + "double_click_zoom": true, + "dragging": true, + "dragging_style": "IPY_MODEL_fec77abaf75c4932adffead454232a80", + "east": -120.41015625000001, + "fullscreen": false, + "inertia": true, + "inertia_deceleration": 3000, + "inertia_max_speed": 1500, + "interpolation": "bilinear", + "keyboard": true, + "keyboard_pan_offset": 80, + "keyboard_zoom_offset": 1, + "layers": [ + "IPY_MODEL_de4eddaa83244e3498bbd8d996b6cf30", + "IPY_MODEL_fbadb1c98fdd45d994d546a95eac0ec6", + "IPY_MODEL_060ec89c7e43471ca7da47ad99803113" + ], + "layout": "IPY_MODEL_0b106a2e37a94d44a48890258b6532f6", + "left": 20844, + "max_zoom": null, + "min_zoom": null, + "modisdate": "2024-11-10", + "north": 50.75557231232454, + "options": [ + "bounce_at_zoom_limits", + "box_zoom", + "center", + "close_popup_on_click", + "double_click_zoom", + "dragging", + "fullscreen", + "inertia", + "inertia_deceleration", + "inertia_max_speed", + "interpolation", + "keyboard", + "keyboard_pan_offset", + "keyboard_zoom_offset", + "max_zoom", + "min_zoom", + "prefer_canvas", + "scroll_wheel_zoom", + "tap", + "tap_tolerance", + "touch_zoom", + "world_copy_jump", + "zoom", + "zoom_animation_threshold", + "zoom_delta", + "zoom_snap" + ], + "panes": {}, + "prefer_canvas": false, + "right": 21696, + "scroll_wheel_zoom": true, + "south": 49.70139134233472, + "style": "IPY_MODEL_fcebfde4194d42198a3b84d5ff1e44b5", + "tap": true, + "tap_tolerance": 15, + "top": 44021, + "touch_zoom": true, + "west": -122.75024414062501, + "window_url": "https://h8bukvs53mh-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab_20241107-060106_RC01_694212549", + "world_copy_jump": false, + "zoom": 9, + "zoom_animation_threshold": 4, + "zoom_delta": 1, + "zoom_snap": 1 + } + }, + "f64b26b56ac84e389d657dbe460c67fc": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletZoomControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletZoomControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletZoomControlView", + "options": [ + "position", + "zoom_in_text", + "zoom_in_title", + "zoom_out_text", + "zoom_out_title" + ], + "position": "topleft", + "zoom_in_text": "+", + "zoom_in_title": "Zoom in", + "zoom_out_text": "-", + "zoom_out_title": "Zoom out" + } + }, + "28cdeb24a4bc48e7b6b179e9ab47d80d": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletFullScreenControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletFullScreenControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletFullScreenControlView", + "options": [ + "position" + ], + "position": "topleft" + } + }, + "75a80c80751a418ebf8c6f0563182140": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletDrawControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletDrawControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletDrawControlView", + "circle": {}, + "circlemarker": {}, + "data": [], + "edit": true, + "marker": { + "shapeOptions": { + "color": "#3388ff" + } + }, + "options": [ + "position" + ], + "polygon": { + "shapeOptions": {} + }, + "polyline": { + "shapeOptions": {} + }, + "position": "topleft", + "rectangle": { + "shapeOptions": { + "color": "#3388ff" + } + }, + "remove": true + } + }, + "9844fe02dbb747b6bb427572cc9db899": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletScaleControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletScaleControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletScaleControlView", + "imperial": true, + "max_width": 100, + "metric": true, + "options": [ + "imperial", + "max_width", + "metric", + "position", + "update_when_idle" + ], + "position": "bottomleft", + "update_when_idle": false + } + }, + "d63f91597a284fc0870c59077f043695": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletWidgetControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletWidgetControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletWidgetControlView", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "options": [ + "position", + "transparent_bg" + ], + "position": "topright", + "transparent_bg": false, + "widget": "IPY_MODEL_e5569bde1b8c40fab5cf4911bd4aeeec" + } + }, + "8f21bd7200f447c1aac3f659765ad118": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletAttributionControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletAttributionControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletAttributionControlView", + "options": [ + "position", + "prefix" + ], + "position": "bottomright", + "prefix": "ipyleaflet" + } + }, + "c4c81b26a1284ba0b795c12b86d78d53": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "grab" + } + }, + "fec77abaf75c4932adffead454232a80": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "move" + } + }, + "de4eddaa83244e3498bbd8d996b6cf30": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "© OpenStreetMap contributors", + "base": true, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 19, + "min_native_zoom": null, + "min_zoom": 1, + "name": "OpenStreetMap.Mapnik", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "visible": true, + "zoom_offset": 0 + } + }, + "fbadb1c98fdd45d994d546a95eac0ec6": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "Area of interest", + "no_wrap": false, + "opacity": 0.2, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/949cdc3eaef037d03d1f783d22744dda-8e8800e25784505b662842f083f820ff/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "060ec89c7e43471ca7da47ad99803113": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "Combined confidence", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/5eeecdb49afc16377a5519a2657f3672-f30447c8258f81593e3c2efed9ece580/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "0b106a2e37a94d44a48890258b6532f6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "600px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fcebfde4194d42198a3b84d5ff1e44b5": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "grab" + } + }, + "e5569bde1b8c40fab5cf4911bd4aeeec": { + "model_module": "@jupyter-widgets/controls", + "model_name": "VBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [ + "geemap-colab" + ], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "VBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "VBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_bed712ce36ce4bff9719f1e09c9e37b0" + ], + "layout": "IPY_MODEL_78c4e94b6d794cd6a0ce7d86257adb01" + } + }, + "bed712ce36ce4bff9719f1e09c9e37b0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "wrench", + "layout": "IPY_MODEL_6476a8ee57c249b9843df37d61640421", + "style": "IPY_MODEL_5cf55f8758334ac29f935ceae044e2d4", + "tooltip": "Toolbar", + "value": false + } + }, + "78c4e94b6d794cd6a0ce7d86257adb01": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6476a8ee57c249b9843df37d61640421": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "28px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 4px", + "right": null, + "top": null, + "visibility": null, + "width": "28px" + } + }, + "5cf55f8758334ac29f935ceae044e2d4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d7e2e560a45149f0b0c4438e2ebf61eb": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapModel", + "model_module_version": "^0.18", + "state": { + "_dom_classes": [], + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletMapView", + "bottom": 44621, + "bounce_at_zoom_limits": true, + "box_zoom": true, + "center": [ + 50.23128609777502, + -121.58153879631847 + ], + "close_popup_on_click": true, + "controls": [ + "IPY_MODEL_2d4a017cbf4f4a5c8b122bda2b82b0f3", + "IPY_MODEL_71c314d945d34598bc7de1aad53f42bd", + "IPY_MODEL_ca2b34d262fb4496b132243083638856", + "IPY_MODEL_0df9d456f17c4f8db7c7a50045cc482f", + "IPY_MODEL_21560dbaff1b4ecaae9a91b1a7f48e4f", + "IPY_MODEL_105e20950122479695f20fba4b9ae7ca" + ], + "crs": { + "name": "EPSG3857", + "custom": false + }, + "default_style": "IPY_MODEL_4f986b444bd9413fb5fbaee7480b4d17", + "double_click_zoom": true, + "dragging": true, + "dragging_style": "IPY_MODEL_fe3dd408629d42cbb59eec5fb32c0356", + "east": -120.41015625000001, + "fullscreen": false, + "inertia": true, + "inertia_deceleration": 3000, + "inertia_max_speed": 1500, + "interpolation": "bilinear", + "keyboard": true, + "keyboard_pan_offset": 80, + "keyboard_zoom_offset": 1, + "layers": [ + "IPY_MODEL_3fc7cb02d14746b28d9747e11e88c04d", + "IPY_MODEL_20e6f269bc7f4def88a5c59d7443d40c", + "IPY_MODEL_9d8272167ce64ea5a5bc262061ff965f" + ], + "layout": "IPY_MODEL_da40b07b4db04ec8a27323a78cbe0564", + "left": 20844, + "max_zoom": null, + "min_zoom": null, + "modisdate": "2024-11-10", + "north": 50.75557231232454, + "options": [ + "bounce_at_zoom_limits", + "box_zoom", + "center", + "close_popup_on_click", + "double_click_zoom", + "dragging", + "fullscreen", + "inertia", + "inertia_deceleration", + "inertia_max_speed", + "interpolation", + "keyboard", + "keyboard_pan_offset", + "keyboard_zoom_offset", + "max_zoom", + "min_zoom", + "prefer_canvas", + "scroll_wheel_zoom", + "tap", + "tap_tolerance", + "touch_zoom", + "world_copy_jump", + "zoom", + "zoom_animation_threshold", + "zoom_delta", + "zoom_snap" + ], + "panes": {}, + "prefer_canvas": false, + "right": 21696, + "scroll_wheel_zoom": true, + "south": 49.70139134233472, + "style": "IPY_MODEL_588d2c29aa5b43e58b0e6b4223951e72", + "tap": true, + "tap_tolerance": 15, + "top": 44021, + "touch_zoom": true, + "west": -122.75024414062501, + "window_url": "https://h8bukvs53mh-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab_20241107-060106_RC01_694212549", + "world_copy_jump": false, + "zoom": 9, + "zoom_animation_threshold": 4, + "zoom_delta": 1, + "zoom_snap": 1 + } + }, + "2d4a017cbf4f4a5c8b122bda2b82b0f3": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletZoomControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletZoomControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletZoomControlView", + "options": [ + "position", + "zoom_in_text", + "zoom_in_title", + "zoom_out_text", + "zoom_out_title" + ], + "position": "topleft", + "zoom_in_text": "+", + "zoom_in_title": "Zoom in", + "zoom_out_text": "-", + "zoom_out_title": "Zoom out" + } + }, + "71c314d945d34598bc7de1aad53f42bd": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletFullScreenControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletFullScreenControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletFullScreenControlView", + "options": [ + "position" + ], + "position": "topleft" + } + }, + "ca2b34d262fb4496b132243083638856": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletDrawControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletDrawControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletDrawControlView", + "circle": {}, + "circlemarker": {}, + "data": [], + "edit": true, + "marker": { + "shapeOptions": { + "color": "#3388ff" + } + }, + "options": [ + "position" + ], + "polygon": { + "shapeOptions": {} + }, + "polyline": { + "shapeOptions": {} + }, + "position": "topleft", + "rectangle": { + "shapeOptions": { + "color": "#3388ff" + } + }, + "remove": true + } + }, + "0df9d456f17c4f8db7c7a50045cc482f": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletScaleControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletScaleControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletScaleControlView", + "imperial": true, + "max_width": 100, + "metric": true, + "options": [ + "imperial", + "max_width", + "metric", + "position", + "update_when_idle" + ], + "position": "bottomleft", + "update_when_idle": false + } + }, + "21560dbaff1b4ecaae9a91b1a7f48e4f": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletWidgetControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletWidgetControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletWidgetControlView", + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "options": [ + "position", + "transparent_bg" + ], + "position": "topright", + "transparent_bg": false, + "widget": "IPY_MODEL_4ec94c173362464d94362df255516a9c" + } + }, + "105e20950122479695f20fba4b9ae7ca": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletAttributionControlModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletAttributionControlModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletAttributionControlView", + "options": [ + "position", + "prefix" + ], + "position": "bottomright", + "prefix": "ipyleaflet" + } + }, + "4f986b444bd9413fb5fbaee7480b4d17": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "grab" + } + }, + "fe3dd408629d42cbb59eec5fb32c0356": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "move" + } + }, + "3fc7cb02d14746b28d9747e11e88c04d": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "© OpenStreetMap contributors", + "base": true, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 19, + "min_native_zoom": null, + "min_zoom": 1, + "name": "OpenStreetMap.Mapnik", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", + "visible": true, + "zoom_offset": 0 + } + }, + "20e6f269bc7f4def88a5c59d7443d40c": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "Area of interest", + "no_wrap": false, + "opacity": 0.2, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/949cdc3eaef037d03d1f783d22744dda-37f474f3dd676b52404875a8105db69f/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "9d8272167ce64ea5a5bc262061ff965f": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletTileLayerModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletTileLayerModel", + "_view_count": null, + "_view_module": "jupyter-leaflet", + "_view_module_version": "^0.18", + "_view_name": "LeafletTileLayerView", + "attribution": "Google Earth Engine", + "base": false, + "bottom": true, + "bounds": null, + "detect_retina": false, + "loading": false, + "max_native_zoom": null, + "max_zoom": 24, + "min_native_zoom": null, + "min_zoom": 0, + "name": "Smoothed confidence", + "no_wrap": false, + "opacity": 1, + "options": [ + "attribution", + "bounds", + "detect_retina", + "max_native_zoom", + "max_zoom", + "min_native_zoom", + "min_zoom", + "no_wrap", + "tile_size", + "tms", + "zoom_offset" + ], + "pane": "", + "popup": null, + "popup_max_height": null, + "popup_max_width": 300, + "popup_min_width": 50, + "show_loading": false, + "subitems": [], + "tile_size": 256, + "tms": false, + "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/1584de2feef0864beda78b4ecdee09d1-4ed27e3582b6a49de98e065107e9ac32/tiles/{z}/{x}/{y}", + "visible": true, + "zoom_offset": 0 + } + }, + "da40b07b4db04ec8a27323a78cbe0564": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "600px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "588d2c29aa5b43e58b0e6b4223951e72": { + "model_module": "jupyter-leaflet", + "model_name": "LeafletMapStyleModel", + "model_module_version": "^0.18", + "state": { + "_model_module": "jupyter-leaflet", + "_model_module_version": "^0.18", + "_model_name": "LeafletMapStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "cursor": "grab" + } + }, + "4ec94c173362464d94362df255516a9c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "VBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [ + "geemap-colab" + ], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "VBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "VBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_b7450505c65648f39dff1fc0140322f0" + ], + "layout": "IPY_MODEL_f74f5b1f50424e18bc1062d4b7984706" + } + }, + "b7450505c65648f39dff1fc0140322f0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ToggleButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ToggleButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ToggleButtonView", + "button_style": "", + "description": "", + "description_tooltip": null, + "disabled": false, + "icon": "wrench", + "layout": "IPY_MODEL_7203de29c95e43408e7593e2175f8630", + "style": "IPY_MODEL_3b0d7e2b818545d0bf00e75db591bf17", + "tooltip": "Toolbar", + "value": false + } + }, + "f74f5b1f50424e18bc1062d4b7984706": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7203de29c95e43408e7593e2175f8630": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": "28px", + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": "0px 0px 0px 4px", + "right": null, + "top": null, + "visibility": null, + "width": "28px" + } + }, + "3b0d7e2b818545d0bf00e75db591bf17": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } } - ], - "source": [ - "!pip install earthengine-api==0.1.406\n", - "!pip install folium==0.14.0\n", - "!pip install geemap==0.32.1 #Backup version: 0.20.4\n", - "!pip install matplotlib==3.7.1\n", - "!pip install numpy==1.25.2\n", - "!pip install pandas<2.7.0" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "rilgOE8QYs6j" - }, - "outputs": [], - "source": [ - "import ee\n", - "import folium\n", - "import geemap.core as geemap # import geemap\n", - "import numpy as np\n", - "import pandas as pd\n", - "import pprint\n", - "import matplotlib.pyplot as plt\n", - "from IPython.display import Image\n", - "from datetime import datetime\n", - "from zoneinfo import ZoneInfo" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ivsdkiewzsIl" - }, - "source": [ - "Next, we'll need to authenticate our Google accounts so that we're able to access the images and computing power associated with this task. For our teaching purposes, we should be able to access the resources we need for free. For those who don't yet have a Google cloud project set up to access the Earth Engine API, here's a [quick guide](https://medium.com/p/fe5472ddbaeb#620c-fb99daf8c065) on how to get started. We'll need a project account name associated to the Earth Engine (`ee`) library to access the compute and data required for the rest of our code to run." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "D0yx_D8DxvBN" - }, - "source": [ - "Now, enter Google cloud project name credentials in the `project` argument to authenticate our Earth Engine account." - ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 - }, - "id": "b_cXIM3vYs4N", - "outputId": "4558afcb-bb14-4a9e-88c4-347a4b8d940d" - }, - "outputs": [ + "cells": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Trigger the authentication flow.\n", - "ee.Authenticate()\n", - "\n", - "# Initialize the library.\n", - "ee.Initialize(project=\"{enter-project-name}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "oe73qYHtZS6N" - }, - "source": [ - "With our libraries and packages set up, let's now zoom in on a particular area of interest. One major fire we can study was the tragic [Lytton Creek wildfire](https://en.wikipedia.org/wiki/Lytton_wildfire) which began on June 30th, 2021 and ravaged for several weeks (Lindsay & Dickson, 2021). The outcome left about 2,000 residents without a home as the fire burned down the entire village and killed two people in the process (Lindsay & Dickson, 2021).\n", - "\n", - "The cause of the fire stemmed from a recipe of extreme climate events which severely elevated the risk of natural disasters in the area. For starters, just the day before the wildfire started, Lytton set an all-time record of having the highest temperature ever recorded in Canada with a high of 49.6$^{\\circ}$ that day. Under those extreme drought conditions with winds travelling up to 71 km an hour that day, the fire spread incredibly fast leaving residents and firefighters with little time to prepare for the fire.\n", - "\n", - "To get a first-hand glance at the severity of the Lytton Creek wildfire, let's start by pulling images from the Sentinel-2 satellite. For the rest of this analysis, we'll use the following latitude and longitude coordinates of the old Lytton library as the central point of our satellite data, specify a 40 km radius for GOES satellites, and a time range between `2024-06-15` and `2024-07-15` so that we have a view of Lytton before and after the fire. With our Sentinel-2 data, the 40km radius won't matter as much as when we explore the images from the GOES satellites because, as we'll see shortly, it takes large snapshots of the areas below which covers large sections of land." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 }, - "id": "f5aWXtRJYs1q", - "outputId": "aa4f2ba0-3916-4f76-a445-5c9381cd393a" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "# **BC Wildfire Mapping Tutorial**" ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Getting coordinates of the point of interest\n", - "# which is the Lytton library as the poi for the Lytton Creek wildfire that started on 2021-06-30\n", - "lat = 50.23124506328952\n", - "lon = -121.58154057521354\n", - "\n", - "# start date of range to filter for\n", - "start_date = \"2021-06-15\"\n", - "\n", - "# end date\n", - "end_date = \"2021-07-15\" #\"2021-10-31\"\n", - "\n", - "# radius of interest in meters\n", - "radius_of_interest_meters = 40000\n", - "\n", - "# point of interest as an ee.Geometry\n", - "poi = ee.Geometry.Point([lon, lat]).buffer(radius_of_interest_meters)\n", - "\n", - "datetime_format = \"%Y-%m-%d %H:%M:%S\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "9oKsAcNW-wlh" - }, - "source": [ - "## Data Extraction (Part 1)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dKATh27eZ_Qx" - }, - "source": [ - "### Extracting Sentinel-2 satellite data\n", - "\n", - "Before we go further, let's do a brief overview of what Sentinel-2 is and how it differs from other satellites. **Sentinel-2** is a set of twin satellites deployed by the European Space Agency with the stated mission of gaining a \"new perspective of our land and vegetation\" through its 13 spectral bands (European Space Agency, 2024).\n", - "\n", - "For those new to satellite imaging or remote sensing, **spectral bands** refer to the wavelength of light that is either reflected or absorbed from the Earth's surface and can be detected through satellite sensors. Examples of bands we'll be using here include short-wave infrared (SWIR) bands, near-infrared (NIR) bands, and red, green, and blue bands. In the context of remote sensing, we can analyze the light from these bands to make inferences about the state of the Earth's surface. Not only can we use this information to determine the location of wildfires, but we can also use it to ascertain information about an area's water quality or quantify its amount of forest cover.\n", - "\n", - "The way that Sentinel-2 gathers data is by orbiting around the Earth and taking snapshots of the surface approximately every 5 days (European Space Agency, 2024). Each image covers about 290 km which is great because it allows us to monitor large swaths of land with just a single image, given that it's clear and largely free from clouds or smoke blocking the surface.\n", - "\n", - "In addition to the image data, we'll also make use of some functions written by Justin Braaten (2022) and his team at Google to aid us in our analysis. The first is the `mask_s2_cloud()` function which helps us reduce the noise from the cloud for clearer imaging (Braaten, 2022). The second is the `add_ee_layer()` which essentially allows us to overlay satellite images on top of a Google map-like interface from the `folium` package so that we're able to cross-reference our raw image data with all the symbols and markers we'd typically see on a map (Braaten, 2022)." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 + "metadata": { + "id": "Q4cJY74nZBVE" + } }, - "id": "Agm19ss4Z-Cf", - "outputId": "5fc19402-db07-4680-fa78-b6ed6f53c93f" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "\n", + "\n", + "\n", + "[Photo Source](https://www.huskyhavenfl.org/hhofl-blog/2022/5/2/the-abcs-of-burns-in-dogs)" ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def mask_s2_clouds(image):\n", - " \"\"\"Masks clouds in a Sentinel-2 image using the QA band.\n", - "\n", - " Args:\n", - " image (ee.Image): A Sentinel-2 image.\n", - "\n", - " Returns:\n", - " ee.Image: A cloud-masked Sentinel-2 image.\n", - " \"\"\"\n", - " qa = image.select(\"QA60\")\n", - "\n", - " # Bits 10 and 11 are clouds and cirrus, respectively.\n", - " cloud_bit_mask = 1 << 10\n", - " cirrus_bit_mask = 1 << 11\n", - "\n", - " # Both flags should be set to zero, indicating clear conditions.\n", - " mask = (\n", - " qa.bitwiseAnd(cloud_bit_mask)\n", - " .eq(0)\n", - " .And(qa.bitwiseAnd(cirrus_bit_mask).eq(0))\n", - " )\n", - "\n", - " return image.updateMask(mask).divide(10000)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 + "metadata": { + "id": "dsujLjYRakaY" + } }, - "id": "POj82YNEzyE_", - "outputId": "5f2a17c3-927c-47a1-8384-5d5284020f62" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "## Introduction\n", + "\n", + "In Canada's westernmost province, British Columbia, the uptick in the severity and occurrence of wildfires have caused substantial damage to the social and ecological systems in the province. For instance, in 2023 alone, 2,245 total wildfires burned in the province amounting to 2.84 million hectares of land going up in smoke (BC Public Service, 2023). Although British Columbia is a large region in terms of land mass with diverse terrain, the total acres burnt was truly an anomaly as it had more than doubled the previous record of 1.215 million acres in 2018 (BC Public Service, 2023). As a result of these wildfires, tens of thousands of people were forced to evacuate their homes. While those fortunate were able to flee from the crisis, there were plenty of other living creatures who didn't have the means, ability, or fortune to escape such an agonizing fate. And so far, no estimates have been released on the amount of wildlife that perished in those flames.\n", + "\n", + "Whether a wildfire was caused through natural means like lightning strikes or by humans, detecting it and estimating its perimeter is one of the most challenging, yet impactful ways to minimize their destruction. One reason the early detection of a wildfire can be so impactful is that those that spark in remote forests can grow to unmanageable proportions before they spread close enough to an urban centre for locals to report it. Especially when we have a province as large as British Columbia with vast amounts of terrain such as dense forests, rocky mountains, or dry grasslands, communities on the ground may not be able to detect wildfires as easily if they start in a remote area until it's already burnt hundreds, or even thousands, of acres and wildlife. As an example, on May 12th, 2023, a lightning strike in [Donnie Creek](https://maps.app.goo.gl/c6zBveq2N529DkHX9) which is an area about 136 km southeast of the nearest urban centre, Fort Nelson, lit the fuse for a wildfire to burn about 5,700 square km before it was finally contained (Kulkarni, 2023).\n", + "\n", + "However, with the recent advances in satellite technology and remote sensing techniques, we can now combine raw images from various orbiting satellites with maps to build estimations of a wildfire perimeter. In this article, we'll use the raw images from the Sentinel-2 and the GOES-16/17 satellites stored in the [Google Cloud Earth Engine data catalogue](https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_FDCF#bands) to build a wildfire perimeter that we can overlay on a map that serves as a reference point to urban centres and other significant landmarks. By accessing image data from various satellite sources, we can highlight the strengths and weaknesses of the two approaches to have a broader foundation in wildfire detection and remote-sending more broadly.\n", + "\n", + "Let's begin." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Google function that allows ee layers on folium\n", - "def add_ee_layer(self, ee_image_object, vis_params, name):\n", - " \"\"\"\n", - " Adds a method for displaying Earth Engine image tiles to folium map.\n", - " \"\"\"\n", - "\n", - " map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)\n", - " folium.raster_layers.TileLayer(\n", - " tiles=map_id_dict['tile_fetcher'].url_format,\n", - " attr='Map Data © Google Earth Engine',\n", - " name=name,\n", - " overlay=True,\n", - " control=True\n", - " ).add_to(self)\n", - "\n", - "# Add Earth Engine drawing method to folium\n", - "folium.Map.add_ee_layer = add_ee_layer" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "tAOb4NZroFDG" - }, - "source": [ - "With our date and geocoordinate parameters, we should extract about 27 [Sentinel-2](https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED#description) satellite images from the Google Earth Engine data catalogue and store it in our `s2_dataset` object." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 34 + "metadata": { + "id": "TLIFDxNunvRW" + } }, - "id": "yx1OYij_Z95P", - "outputId": "9a00179e-4306-44b2-a522-aa9580f368a5" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "\n", + "\n", + "\n", + "[Photo Source](https://www.bbc.com/news/world-australia-50511963)" ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total number: 27\n" - ] - } - ], - "source": [ - "s2_dataset = ee.ImageCollection(\"COPERNICUS/S2_SR_HARMONIZED\").filterDate(start_date, end_date).filterBounds(poi).filter(ee.Filter.lt(\"CLOUDY_PIXEL_PERCENTAGE\", 20)).map(mask_s2_clouds)\n", - "\n", - "# how many images did we get?\n", - "print(\"Total number:\", s2_dataset.size().getInfo())" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 + "metadata": { + "id": "XpBio11WQMyF" + } }, - "collapsed": true, - "id": "2htR-4b92JLL", - "outputId": "951aff19-9aaf-44d2-c3e2-f4aceeb4ad25" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "First, a bit of bookkeeping. Let's ensure that we're using the same versions of packages required in this article to ensure reproducibility and to follow coding best practices." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "{'type': 'Image',\n", - " 'bands': [{'id': 'B1',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [1830, 1830],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [60, 0, 499980, 0, -60, 5600040]},\n", - " {'id': 'B2',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'B3',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'B4',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'B5',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'B6',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'B7',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'B8',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'B8A',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'B9',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [1830, 1830],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [60, 0, 499980, 0, -60, 5600040]},\n", - " {'id': 'B11',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'B12',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'AOT',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'WVP',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'SCL',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'TCI_R',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'TCI_G',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'TCI_B',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'MSK_CLDPRB',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'MSK_SNWPRB',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'QA10',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [10980, 10980],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", - " {'id': 'QA20',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 429496.75},\n", - " 'dimensions': [5490, 5490],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", - " {'id': 'QA60',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 6.553500175476074},\n", - " 'dimensions': [1830, 1830],\n", - " 'crs': 'EPSG:32610',\n", - " 'crs_transform': [60, 0, 499980, 0, -60, 5600040]},\n", - " {'id': 'MSK_CLASSI_OPAQUE',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'crs': 'EPSG:4326',\n", - " 'crs_transform': [1, 0, 0, 0, 1, 0]},\n", - " {'id': 'MSK_CLASSI_CIRRUS',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'crs': 'EPSG:4326',\n", - " 'crs_transform': [1, 0, 0, 0, 1, 0]},\n", - " {'id': 'MSK_CLASSI_SNOW_ICE',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'float',\n", - " 'min': 0,\n", - " 'max': 0.02550000138580799},\n", - " 'crs': 'EPSG:4326',\n", - " 'crs_transform': [1, 0, 0, 0, 1, 0]}],\n", - " 'properties': {'system:footprint': {'type': 'LinearRing',\n", - " 'coordinates': [[-122.14795105746178, 49.56171188412999],\n", - " [-122.14790729300596, 49.561707970022596],\n", - " [-121.48241050636712, 49.55489352105015],\n", - " [-121.48226960340271, 49.55496128313161],\n", - " [-121.46675880041288, 50.048507122600746],\n", - " [-121.4508124104042, 50.54198671004312],\n", - " [-121.4509189803275, 50.542078108087395],\n", - " [-121.75711809372756, 50.54574935708296],\n", - " [-121.75716507148948, 50.54572402339127],\n", - " [-121.75723134979857, 50.54571899943225],\n", - " [-121.75900275964747, 50.54355299175503],\n", - " [-121.76260511189456, 50.53548757569572],\n", - " [-121.76802146843227, 50.522593146684116],\n", - " [-122.085461682415, 49.72846537606213],\n", - " [-122.092463120295, 49.71017094157173],\n", - " [-122.1483051727211, 49.56271071386906],\n", - " [-122.14831939269564, 49.5618909054019],\n", - " [-122.14828018587892, 49.561861416962806],\n", - " [-122.14827217485382, 49.56181930543502],\n", - " [-122.14795105746178, 49.56171188412999]]},\n", - " 'system:index': '20210621T185921_20210621T190713_T10UEA'}}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Getting a feel of the resulting data structure\n", - "s2_dataset.first().getInfo()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "kCGgago99wLM" - }, - "source": [ - "If we look at each of the 27 images pulled from the Earth Engine bucket, we'll find that the image quality on most of them isn't great as there are often clouds or smoke blocking our view of Lytton. Therefore, we've decided to manually select those with the best image quality, store the list in our `interesting_images` object, and display them to get a visual of the raw images we'll be working with." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 176 + "metadata": { + "id": "YJj05qlbrwuu" + } }, - "id": "y6RumP9WIzNd", - "outputId": "aae646f3-813f-4cfb-d3f1-b0ea9be30afb" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "!pip install earthengine-api==0.1.406\n", + "!pip install folium==0.14.0\n", + "!pip install geemap==0.32.1 #Backup version: 0.20.4\n", + "!pip install matplotlib==3.7.1\n", + "!pip install numpy==1.25.2\n", + "!pip install pandas<2.7.0" ], - "text/plain": [ - "" + "metadata": { + "id": "k_xsUtyuYs_7", + "collapsed": true, + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "4a972461-2b8a-4ae3-bdfb-0342b871fbc7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting earthengine-api==0.1.406\n", + " Downloading earthengine_api-0.1.406-py3-none-any.whl.metadata (1.9 kB)\n", + "Requirement already satisfied: google-cloud-storage in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.8.0)\n", + "Requirement already satisfied: google-api-python-client>=1.12.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.137.0)\n", + "Requirement already satisfied: google-auth>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.27.0)\n", + "Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (0.2.0)\n", + "Requirement already satisfied: httplib2<1dev,>=0.9.2 in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (0.22.0)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from earthengine-api==0.1.406) (2.32.3)\n", + "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api==0.1.406) (2.19.2)\n", + "Requirement already satisfied: uritemplate<5,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api==0.1.406) (4.1.1)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api==0.1.406) (5.5.0)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api==0.1.406) (0.4.1)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api==0.1.406) (4.9)\n", + "Requirement already satisfied: pyparsing!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4,>=2.4.2 in /usr/local/lib/python3.10/dist-packages (from httplib2<1dev,>=0.9.2->earthengine-api==0.1.406) (3.2.0)\n", + "Requirement already satisfied: google-cloud-core<3.0dev,>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api==0.1.406) (2.4.1)\n", + "Requirement already satisfied: google-resumable-media>=2.3.2 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api==0.1.406) (2.7.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api==0.1.406) (2024.8.30)\n", + "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api==0.1.406) (1.65.0)\n", + "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api==0.1.406) (3.20.3)\n", + "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api==0.1.406) (1.25.0)\n", + "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib/python3.10/dist-packages (from google-resumable-media>=2.3.2->google-cloud-storage->earthengine-api==0.1.406) (1.6.0)\n", + "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.4.1->earthengine-api==0.1.406) (0.6.1)\n", + "Downloading earthengine_api-0.1.406-py3-none-any.whl (368 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m368.1/368.1 kB\u001b[0m \u001b[31m4.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: earthengine-api\n", + " Attempting uninstall: earthengine-api\n", + " Found existing installation: earthengine-api 1.2.0\n", + " Uninstalling earthengine-api-1.2.0:\n", + " Successfully uninstalled earthengine-api-1.2.0\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "geemap 0.35.0 requires earthengine-api>=1.0.0, but you have earthengine-api 0.1.406 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed earthengine-api-0.1.406\n", + "Collecting folium==0.14.0\n", + " Downloading folium-0.14.0-py2.py3-none-any.whl.metadata (3.5 kB)\n", + "Requirement already satisfied: branca>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (0.8.0)\n", + "Requirement already satisfied: jinja2>=2.9 in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (3.1.4)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (1.26.4)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from folium==0.14.0) (2.32.3)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=2.9->folium==0.14.0) (3.0.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->folium==0.14.0) (2024.8.30)\n", + "Downloading folium-0.14.0-py2.py3-none-any.whl (102 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m102.3/102.3 kB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: folium\n", + " Attempting uninstall: folium\n", + " Found existing installation: folium 0.18.0\n", + " Uninstalling folium-0.18.0:\n", + " Successfully uninstalled folium-0.18.0\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "geemap 0.35.0 requires earthengine-api>=1.0.0, but you have earthengine-api 0.1.406 which is incompatible.\n", + "geemap 0.35.0 requires folium>=0.17.0, but you have folium 0.14.0 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed folium-0.14.0\n", + "Collecting geemap==0.32.1\n", + " Downloading geemap-0.32.1-py2.py3-none-any.whl.metadata (14 kB)\n", + "Requirement already satisfied: bqplot in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.12.43)\n", + "Requirement already satisfied: colour in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.1.5)\n", + "Requirement already satisfied: earthengine-api>=0.1.347 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.1.406)\n", + "Requirement already satisfied: eerepr>=0.0.4 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.0.4)\n", + "Requirement already satisfied: folium>=0.13.0 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.14.0)\n", + "Requirement already satisfied: geocoder in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (1.38.1)\n", + "Requirement already satisfied: ipyevents in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (2.0.2)\n", + "Requirement already satisfied: ipyfilechooser>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.6.0)\n", + "Collecting ipyleaflet==0.18.2 (from geemap==0.32.1)\n", + " Downloading ipyleaflet-0.18.2-py3-none-any.whl.metadata (1.0 kB)\n", + "Requirement already satisfied: ipytree in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.2.2)\n", + "Requirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (3.8.0)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (1.26.4)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (2.2.2)\n", + "Requirement already satisfied: plotly in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (5.24.1)\n", + "Requirement already satisfied: pyperclip in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (1.9.0)\n", + "Requirement already satisfied: pyshp>=2.1.3 in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (2.3.1)\n", + "Requirement already satisfied: python-box in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (7.2.0)\n", + "Requirement already satisfied: scooby in /usr/local/lib/python3.10/dist-packages (from geemap==0.32.1) (0.10.0)\n", + "Requirement already satisfied: ipywidgets<9,>=7.6.0 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (7.7.1)\n", + "Requirement already satisfied: traittypes<3,>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (0.2.1)\n", + "Requirement already satisfied: xyzservices>=2021.8.1 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (2024.9.0)\n", + "Requirement already satisfied: branca>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from ipyleaflet==0.18.2->geemap==0.32.1) (0.8.0)\n", + "Requirement already satisfied: google-cloud-storage in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.8.0)\n", + "Requirement already satisfied: google-api-python-client>=1.12.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.137.0)\n", + "Requirement already satisfied: google-auth>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.27.0)\n", + "Requirement already satisfied: google-auth-httplib2>=0.0.3 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (0.2.0)\n", + "Requirement already satisfied: httplib2<1dev,>=0.9.2 in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (0.22.0)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from earthengine-api>=0.1.347->geemap==0.32.1) (2.32.3)\n", + "Requirement already satisfied: jinja2>=2.9 in /usr/local/lib/python3.10/dist-packages (from folium>=0.13.0->geemap==0.32.1) (3.1.4)\n", + "Requirement already satisfied: traitlets>=4.3.0 in /usr/local/lib/python3.10/dist-packages (from bqplot->geemap==0.32.1) (5.7.1)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas->geemap==0.32.1) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->geemap==0.32.1) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.10/dist-packages (from pandas->geemap==0.32.1) (2024.2)\n", + "Requirement already satisfied: click in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (8.1.7)\n", + "Requirement already satisfied: future in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (1.0.0)\n", + "Requirement already satisfied: ratelim in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (0.1.6)\n", + "Requirement already satisfied: six in /usr/local/lib/python3.10/dist-packages (from geocoder->geemap==0.32.1) (1.16.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (1.3.0)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (4.54.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (1.4.7)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (24.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (10.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->geemap==0.32.1) (3.2.0)\n", + "Requirement already satisfied: tenacity>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from plotly->geemap==0.32.1) (9.0.0)\n", + "Requirement already satisfied: google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (2.19.2)\n", + "Requirement already satisfied: uritemplate<5,>=3.0.1 in /usr/local/lib/python3.10/dist-packages (from google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (4.1.1)\n", + "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (5.5.0)\n", + "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (0.4.1)\n", + "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (4.9)\n", + "Requirement already satisfied: ipykernel>=4.5.1 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (5.5.6)\n", + "Requirement already satisfied: ipython-genutils~=0.2.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.0)\n", + "Requirement already satisfied: widgetsnbextension~=3.6.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.6.10)\n", + "Requirement already satisfied: ipython>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (7.34.0)\n", + "Requirement already satisfied: jupyterlab-widgets>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.0.13)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=2.9->folium>=0.13.0->geemap==0.32.1) (3.0.2)\n", + "Requirement already satisfied: google-cloud-core<3.0dev,>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api>=0.1.347->geemap==0.32.1) (2.4.1)\n", + "Requirement already satisfied: google-resumable-media>=2.3.2 in /usr/local/lib/python3.10/dist-packages (from google-cloud-storage->earthengine-api>=0.1.347->geemap==0.32.1) (2.7.2)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->earthengine-api>=0.1.347->geemap==0.32.1) (2024.8.30)\n", + "Requirement already satisfied: decorator in /usr/local/lib/python3.10/dist-packages (from ratelim->geocoder->geemap==0.32.1) (4.4.2)\n", + "Requirement already satisfied: googleapis-common-protos<2.0.dev0,>=1.56.2 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (1.65.0)\n", + "Requirement already satisfied: protobuf!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0,>=3.19.5 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (3.20.3)\n", + "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in /usr/local/lib/python3.10/dist-packages (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0,>=1.31.5->google-api-python-client>=1.12.1->earthengine-api>=0.1.347->geemap==0.32.1) (1.25.0)\n", + "Requirement already satisfied: google-crc32c<2.0dev,>=1.0 in /usr/local/lib/python3.10/dist-packages (from google-resumable-media>=2.3.2->google-cloud-storage->earthengine-api>=0.1.347->geemap==0.32.1) (1.6.0)\n", + "Requirement already satisfied: jupyter-client in /usr/local/lib/python3.10/dist-packages (from ipykernel>=4.5.1->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.1.12)\n", + "Requirement already satisfied: tornado>=4.2 in /usr/local/lib/python3.10/dist-packages (from ipykernel>=4.5.1->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.3.3)\n", + "Requirement already satisfied: setuptools>=18.5 in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (75.1.0)\n", + "Collecting jedi>=0.16 (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1)\n", + " Downloading jedi-0.19.2-py2.py3-none-any.whl.metadata (22 kB)\n", + "Requirement already satisfied: pickleshare in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.7.5)\n", + "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.0.48)\n", + "Requirement already satisfied: pygments in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.18.0)\n", + "Requirement already satisfied: backcall in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.0)\n", + "Requirement already satisfied: matplotlib-inline in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.1.7)\n", + "Requirement already satisfied: pexpect>4.3 in /usr/local/lib/python3.10/dist-packages (from ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.9.0)\n", + "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.4.1->earthengine-api>=0.1.347->geemap==0.32.1) (0.6.1)\n", + "Requirement already satisfied: notebook>=4.4.1 in /usr/local/lib/python3.10/dist-packages (from widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.5.5)\n", + "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /usr/local/lib/python3.10/dist-packages (from jedi>=0.16->ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.8.4)\n", + "Requirement already satisfied: pyzmq<25,>=17 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (24.0.1)\n", + "Requirement already satisfied: argon2-cffi in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (23.1.0)\n", + "Requirement already satisfied: jupyter-core>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (5.7.2)\n", + "Requirement already satisfied: nbformat in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (5.10.4)\n", + "Requirement already satisfied: nbconvert>=5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (7.16.4)\n", + "Requirement already satisfied: nest-asyncio>=1.5 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.6.0)\n", + "Requirement already satisfied: Send2Trash>=1.8.0 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.8.3)\n", + "Requirement already satisfied: terminado>=0.8.3 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.18.1)\n", + "Requirement already satisfied: prometheus-client in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.21.0)\n", + "Requirement already satisfied: nbclassic>=0.4.7 in /usr/local/lib/python3.10/dist-packages (from notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.1.0)\n", + "Requirement already satisfied: ptyprocess>=0.5 in /usr/local/lib/python3.10/dist-packages (from pexpect>4.3->ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.7.0)\n", + "Requirement already satisfied: wcwidth in /usr/local/lib/python3.10/dist-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=4.0.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.13)\n", + "Requirement already satisfied: platformdirs>=2.5 in /usr/local/lib/python3.10/dist-packages (from jupyter-core>=4.6.1->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.3.6)\n", + "Requirement already satisfied: notebook-shim>=0.2.3 in /usr/local/lib/python3.10/dist-packages (from nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.2.4)\n", + "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.12.3)\n", + "Requirement already satisfied: bleach!=5.0.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (6.2.0)\n", + "Requirement already satisfied: defusedxml in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.7.1)\n", + "Requirement already satisfied: jupyterlab-pygments in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.3.0)\n", + "Requirement already satisfied: mistune<4,>=2.0.3 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.0.2)\n", + "Requirement already satisfied: nbclient>=0.5.0 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.10.0)\n", + "Requirement already satisfied: pandocfilters>=1.4.1 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.5.1)\n", + "Requirement already satisfied: tinycss2 in /usr/local/lib/python3.10/dist-packages (from nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.4.0)\n", + "Requirement already satisfied: fastjsonschema>=2.15 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.20.0)\n", + "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.10/dist-packages (from nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (4.23.0)\n", + "Requirement already satisfied: argon2-cffi-bindings in /usr/local/lib/python3.10/dist-packages (from argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (21.2.0)\n", + "Requirement already satisfied: webencodings in /usr/local/lib/python3.10/dist-packages (from bleach!=5.0.0->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.5.1)\n", + "Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (24.2.0)\n", + "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2024.10.1)\n", + "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.35.1)\n", + "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.10/dist-packages (from jsonschema>=2.6->nbformat->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (0.20.0)\n", + "Requirement already satisfied: jupyter-server<3,>=1.8 in /usr/local/lib/python3.10/dist-packages (from notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.24.0)\n", + "Requirement already satisfied: cffi>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.17.1)\n", + "Requirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->nbconvert>=5->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.6)\n", + "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.0.1->argon2-cffi-bindings->argon2-cffi->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (2.22)\n", + "Requirement already satisfied: anyio<4,>=3.1.0 in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (3.7.1)\n", + "Requirement already satisfied: websocket-client in /usr/local/lib/python3.10/dist-packages (from jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.8.0)\n", + "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.3.1)\n", + "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<4,>=3.1.0->jupyter-server<3,>=1.8->notebook-shim>=0.2.3->nbclassic>=0.4.7->notebook>=4.4.1->widgetsnbextension~=3.6.0->ipywidgets<9,>=7.6.0->ipyleaflet==0.18.2->geemap==0.32.1) (1.2.2)\n", + "Downloading geemap-0.32.1-py2.py3-none-any.whl (2.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m17.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading ipyleaflet-0.18.2-py3-none-any.whl (3.7 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.7/3.7 MB\u001b[0m \u001b[31m34.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hDownloading jedi-0.19.2-py2.py3-none-any.whl (1.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m36.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: jedi, ipyleaflet, geemap\n", + " Attempting uninstall: ipyleaflet\n", + " Found existing installation: ipyleaflet 0.19.2\n", + " Uninstalling ipyleaflet-0.19.2:\n", + " Successfully uninstalled ipyleaflet-0.19.2\n", + " Attempting uninstall: geemap\n", + " Found existing installation: geemap 0.35.0\n", + " Uninstalling geemap-0.35.0:\n", + " Successfully uninstalled geemap-0.35.0\n", + "Successfully installed geemap-0.32.1 ipyleaflet-0.18.2 jedi-0.19.2\n", + "Collecting matplotlib==3.7.1\n", + " Downloading matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (1.3.0)\n", + "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (4.54.1)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (1.4.7)\n", + "Requirement already satisfied: numpy>=1.20 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (1.26.4)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (24.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (10.4.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (3.2.0)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.10/dist-packages (from matplotlib==3.7.1) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.7->matplotlib==3.7.1) (1.16.0)\n", + "Downloading matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.6 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m11.6/11.6 MB\u001b[0m \u001b[31m66.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hInstalling collected packages: matplotlib\n", + " Attempting uninstall: matplotlib\n", + " Found existing installation: matplotlib 3.8.0\n", + " Uninstalling matplotlib-3.8.0:\n", + " Successfully uninstalled matplotlib-3.8.0\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "plotnine 0.14.0 requires matplotlib>=3.8.0, but you have matplotlib 3.7.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed matplotlib-3.7.1\n" + ] + }, + { + "output_type": "display_data", + "data": { + "application/vnd.colab-display-data+json": { + "pip_warning": { + "packages": [ + "matplotlib", + "mpl_toolkits" + ] + }, + "id": "c9c38a8387794feb9723f73317363f07" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting numpy==1.25.2\n", + " Downloading numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.6 kB)\n", + "Downloading numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.2 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.2/18.2 MB\u001b[0m \u001b[31m53.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h\u001b[31mERROR: Operation cancelled by user\u001b[0m\u001b[31m\n", + "\u001b[0m/bin/bash: line 1: 2.7.0: No such file or directory\n" + ] + } ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING:googleapiclient.http:Sleeping 1.31 seconds before retry 1 of 5 for request: POST https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/value:compute?prettyPrint=false&alt=json, after 503\n" - ] + "cell_type": "code", + "source": [ + "import ee\n", + "import folium\n", + "import geemap.core as geemap # import geemap\n", + "import numpy as np\n", + "import pandas as pd\n", + "import pprint\n", + "import matplotlib.pyplot as plt\n", + "from IPython.display import Image\n", + "from datetime import datetime\n", + "from zoneinfo import ZoneInfo" + ], + "metadata": { + "id": "rilgOE8QYs6j" + }, + "execution_count": null, + "outputs": [] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Image #5 / Date: 2021-06-26 11:59:19 PST/PDT\n", - "Image #9 / Date: 2021-06-29 12:09:19 PST/PDT\n", - "Image #11 / Date: 2021-07-01 11:59:21 PST/PDT\n", - "Image #12 / Date: 2021-07-01 11:59:21 PST/PDT\n", - "Image #15 / Date: 2021-07-06 11:59:19 PST/PDT\n", - "Image #18 / Date: 2021-07-09 12:09:19 PST/PDT\n", - "Image #26 / Date: 2021-07-14 12:09:21 PST/PDT\n" - ] - } - ], - "source": [ - "# EDIT: Parameters for visualizing NBR\n", - "s2_params = {\n", - " \"bands\": [\"NBR\"], # NBR band\n", - " \"min\": -1, # Min value for NBR\n", - " \"max\": 1, # Max value for NBR\n", - " \"palette\": [\"blue\", \"white\", \"green\"], # Color palette for NBR (blue = burned, green = vegetation)\n", - " \"dimensions\": 512,\n", - " \"region\": poi\n", - "}\n", - "\n", - "# Generating an image list for s2 data\n", - "s2_image_list = s2_dataset.toList(s2_dataset.size())\n", - "\n", - "# Selecting the images with decent quality\n", - "# To access all the scraped images, replace the following objects:\n", - "# interesting_images = range(s2_dataset.size().getInfo())\n", - "interesting_images = [5, 9, 11, 12, 15, 18, 26]\n", - "\n", - "for i in interesting_images:\n", - " try:\n", - "\n", - " # Extract the timestamp string\n", - " s2_property = s2_image_list.get(i).getInfo()\n", - " timestamp_str = s2_property[\"properties\"][\"system:index\"].split(\"_\")[0]\n", - "\n", - " # Convert to datetime object\n", - " datetime_obj = datetime.strptime(timestamp_str, \"%Y%m%dT%H%M%S\")\n", - "\n", - " # Make the datetime timezone-aware (UTC)\n", - " dt_utc = datetime_obj.replace(tzinfo=ZoneInfo(\"UTC\"))\n", - "\n", - " # Convert to Pacific Time\n", - " pacific_tz = ZoneInfo(\"America/Los_Angeles\")\n", - " dt_pacific = dt_utc.astimezone(pacific_tz).strftime(datetime_format)\n", - "\n", - " print(f\"Image #{i} / Date: {dt_pacific} PST/PDT\")\n", - "\n", - " s2_image = ee.Image(s2_image_list.get(i))\n", - " s2_url = s2_image.getThumbUrl(s2_params)\n", - " display(Image(url=s2_url))\n", - "\n", - " except:\n", - " pass" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "q-WxjFbC9-CR" - }, - "source": [ - "### Data Transformation: Applying Normalized Burn Ratio (NBR) layers from extracted images\n", - "\n", - "Now that we've extracted our raw images, we can see how difficult it is to spot activity from the naked eye. This is where the importance of spectral bands comes into play. Since Sentinel-2 is capable of gathering data from shortwave infrared (SWIR) and near-infrared (NIR) bands, we can use a combination of the two to transform our image data and give us a better understanding of the area that's been burnt (or burning).\n", - "\n", - "What we're describing here is a **normalized burn ratio (NBR)** which uses the following formula to identify the burned areas in a particular and visually quantify the severity of the burn:\n", - "\n", - "$$ NBR = (NIR - SWIR) / (NIR + SWIR) $$\n", - "\n", - "The NBR formula uses the difference between NIR and SWIR reflectance, normalized by their sum, to quantify burned areas based on the numerical values we observe from the NIR and SWIR bands (United Nations, n.d.). Without going too deep into the maths, let's briefly describe the purpose of each underlying band.\n", - "\n", - "**Near-infrared (NIR)** light is often reflected the more healthier or greener the vegetation is on a given land surface. In areas that have been burnt, we'll see less of this spectral wave reflected from the Earth's surface (United Nations, n.d.).\n", - "\n", - "On the other hand, **short-wave infrared (SWIR)** light is reflected based on the moisture content of the underlying surface. Areas with high moisture, and presumably healthier vegetation, tend to absorb this spectral wavelength which means less of it is reflected and picked up by our satellites (United Nations, n.d.). In contrast, drier areas will reflect higher levels of SWIR light since there is less capability to absorb it.\n", - "\n", - "The contrast between these two bands helps us easily distinguish between areas with healthy and burnt vegetation in addition to the severity of the burn (United Nations, n.d.). The resulting NBR values we can observe from this equation range from -1 to 1 where:\n", - "\n", - "- Negative values often indicate bare ground or recently burned areas\n", - "- Values close to zero indicate urban or water areas\n", - "- Positive values typically represent vegetated areas" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 + "cell_type": "markdown", + "source": [ + "Next, we'll need to authenticate our Google accounts so that we're able to access the images and computing power associated with this task. For our teaching purposes, we should be able to access the resources we need for free. For those who don't yet have a Google cloud project set up to access the Earth Engine API, here's a [quick guide](https://medium.com/p/fe5472ddbaeb#620c-fb99daf8c065) on how to get started. We'll need a project account name associated to the Earth Engine (`ee`) library to access the compute and data required for the rest of our code to run." + ], + "metadata": { + "id": "ivsdkiewzsIl" + } }, - "id": "NtWbuiUxwyAl", - "outputId": "8f0fd659-b457-43d5-a1c7-09b183b01447" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "Now, enter Google cloud project name credentials in the `project` argument to authenticate our Earth Engine account." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Function to calculate NBR\n", - "def calculate_nbr(image):\n", - " \"\"\"\n", - " Calculate the Normalized Burn Ratio (NBR) for a given satellite image using the Near-Infrared (NIR) and Short-Wave Infrared (SWIR) bands,\n", - " typically used for burn severity assessment in wildfire studies.\n", - "\n", - " NBR = (NIR - SWIR) / (NIR + SWIR)\n", - "\n", - " The resulting value typically range from -1 to 1, where:\n", - " * Negative values often indicate bare ground or recently burned areas\n", - " * Values close to zero indicate urban or water areas\n", - " * Positive values typically represent vegetated areas\n", - " \"\"\"\n", - " nbr = image.normalizedDifference([\"B8\", \"B12\"]).rename(\"NBR\")\n", - " return image.addBands(nbr)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "vcqL_tgBLAnz" - }, - "source": [ - "### Data Visualization\n", - "\n", - "Now that we have a better understanding of NBR, let's apply it to each of the \"interesting images\" we've extracted from Sentinel-2 and layer them over an open-source map." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 531 + "metadata": { + "id": "D0yx_D8DxvBN" + } }, - "id": "opi5waGAw2Nm", - "outputId": "597b41d3-ff5d-4280-887f-39361405709f" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "# Trigger the authentication flow.\n", + "ee.Authenticate()\n", + "\n", + "# Initialize the library.\n", + "ee.Initialize(project=\"{enter-project-name}\")" ], - "text/plain": [ - "" + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "id": "b_cXIM3vYs4N", + "outputId": "4558afcb-bb14-4a9e-88c4-347a4b8d940d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "text/html": [ - "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + "cell_type": "markdown", + "source": [ + "With our libraries and packages set up, let's now zoom in on a particular area of interest. One major fire we can study was the tragic [Lytton Creek wildfire](https://en.wikipedia.org/wiki/Lytton_wildfire) which began on June 30th, 2021 and ravaged for several weeks (Lindsay & Dickson, 2021). The outcome left about 2,000 residents without a home as the fire burned down the entire village and killed two people in the process (Lindsay & Dickson, 2021).\n", + "\n", + "The cause of the fire stemmed from a recipe of extreme climate events which severely elevated the risk of natural disasters in the area. For starters, just the day before the wildfire started, Lytton set an all-time record of having the highest temperature ever recorded in Canada with a high of 49.6$^{\\circ}$ that day. Under those extreme drought conditions with winds travelling up to 71 km an hour that day, the fire spread incredibly fast leaving residents and firefighters with little time to prepare for the fire.\n", + "\n", + "To get a first-hand glance at the severity of the Lytton Creek wildfire, let's start by pulling images from the Sentinel-2 satellite. For the rest of this analysis, we'll use the following latitude and longitude coordinates of the old Lytton library as the central point of our satellite data, specify a 40 km radius for GOES satellites, and a time range between `2024-06-15` and `2024-07-15` so that we have a view of Lytton before and after the fire. With our Sentinel-2 data, the 40km radius won't matter as much as when we explore the images from the GOES satellites because, as we'll see shortly, it takes large snapshots of the areas below which covers large sections of land." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Apply NBR calculation\n", - "s2_nbr = s2_dataset.map(calculate_nbr)\n", - "\n", - "# Get the first image and visualize\n", - "s2nbr_list = s2_nbr.toList(s2_nbr.size())\n", - "\n", - "# Parameters for visualizing NBR\n", - "nbr_vis_params = {\n", - " \"bands\": [\"NBR\"], # NBR band\n", - " \"min\": -1, # Min value for NBR\n", - " \"max\": 1, # Max value for NBR\n", - " \"palette\": [\"blue\", \"white\", \"green\"], # Color palette for NBR (blue = burned, green = vegetation)\n", - " \"dimensions\": 512,\n", - " \"region\": poi\n", - "}\n", - "\n", - "# Create a map\n", - "wildfire_map = folium.Map(location=[lat, lon], zoom_start=10)\n", - "\n", - "# Add a layer for each satellite image of interest (before, during and after)\n", - "for i in interesting_images:\n", - "\n", - " # Extract the timestamp string\n", - " s2nbr_list_property = s2nbr_list.get(i).getInfo()\n", - " timestamp_str = s2nbr_list_property[\"properties\"][\"system:index\"].split(\"_\")[0]\n", - "\n", - " # Convert to datetime object\n", - " s2_datetime = datetime.strptime(timestamp_str, \"%Y%m%dT%H%M%S\")\n", - "\n", - " # Make the datetime timezone-aware (UTC)\n", - " dt_utc = s2_datetime.replace(tzinfo=ZoneInfo(\"UTC\"))\n", - "\n", - " # Convert to Pacific Time\n", - " pacific_tz = ZoneInfo(\"America/Los_Angeles\")\n", - " s2_datetime_pst = dt_utc.astimezone(pacific_tz).strftime(datetime_format)\n", - "\n", - " # Image title\n", - " title = f\"Sentinel-2 SWIR Image #{i} / Date: {s2_datetime_pst} PST/PDT\"\n", - "\n", - " # Extract the image from the list\n", - " s2_nbr_image = ee.Image(s2nbr_list.get(i))\n", - "\n", - " # Add the image layerto the map\n", - " wildfire_map.add_ee_layer(s2_nbr_image, nbr_vis_params, name=title)\n", - " \n", - "# Add a layer control panel to the map\n", - "folium.LayerControl(collapsed=False).add_to(wildfire_map)\n", - "\n", - "# Display the map.\n", - "display(wildfire_map)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "XXkt20jFN9kV" - }, - "source": [ - "From the NBR-transformed, satellite imaging we collected of the area surrounding Lytton between June to July 15th, we can see distinct areas that were ravaged by the fires in 2021. Removing all the layers by de-selecting the images gives us a bearing on where the town of Lytton is in the satellite image.\n", - "\n", - "However, if we select image layers #9, 11, 12, and 26, we'll find another fire perimeter northeast of Lytton, one that looks slightly larger. Because the Sentinel-2 images cover such a large area and with some further research, we were surprisingly able to discover that the [Sparks Lake wildfire](https://www.eoas.ubc.ca/courses/atsc413/cases/sparks_lake_BC/index.html) was another natural disaster occurring the same time as our Lytton Creek wildfire on June 29th, 2021 (Watson & Lindsay, 2021). The Sparks Lake wildfire also turned out to be one of B.C.'s most devastating fires in history due to the heat dome the province experienced that year. The fire appeared to have been human-caused by a nearby marijuana growth operation which burned down about 960 km$^2$ for 69 days before firefighters eventually got control of it.\n", - "\n", - "\n", - "While the data from Sentinel-2 does a fine job in identifying and mapping out burnt areas of the region, it suffers some heavy drawbacks in its inability to provide real-time information to emergency responders and members of the public. Because Sentinel-2 needs time to orbit and image other areas of the globe, there is a 2-5 day lag between every snapshot at a particular point of interest (POI), depending on how close it is to the equator (European Space Agency, 2024). In situations where a natural disaster is unfolding rapidly and emergency responders need prompt access to information for rapid and high-stakes decisions, Sentinel-2 data will not be sufficient for this purpose so we must turn to other tools to fill the gap.\n", - "\n", - "Additional concerns with Sentinel-2 images are the presence of clouds or smoke over our POI which can massively reduce the image quality because they limit the amount of light the Earth can reflect to its sensors. Sentinel-2 is also limited to operating during the day due to its reliance on sunlight so any opportunity to gather data at night is out of the question." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "TVlUEmqih3yx" - }, - "source": [ - "## Data Extraction (Part 2)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ODbxX7hhcenC" - }, - "source": [ - "### Extracting GOES-16 & GOES-17 satellite data\n", - "\n", - "As we've explored the strengths of the Sentinel-2 data and highlighted its weaknesses, luckily, we have other systems to shore up these vulnerabilities such as the GOES-16 and GOES-17 satellites. The [**Geostationary Operational Environmental Satellites (GOES)**](https://www.goes-r.gov/downloads/resources/documents/Beginners_Guide_to_GOES-R_Series_Data.pdf) are a set of geostationary satellites which takes high temporal resolution images every 5-15 min, with each pixel having a resolution of about 0.5 to 2 km (NOAA & NASA, 2024). When we refer to a satellite as *geostationary*, it means that it orbits the Earth in the same direction about 35,000 km above the equator and at about the same speed so that from the perspective of a ground-bound observer, the satellite appears nearly stationary. Among the two satellites we mentioned earlier, GOES-16 does the majority of the image capture over the North and South American continent while GOES-17 functions as a ready spare when necessary (NOAA & NASA, 2024).\n", - "\n", - "On board each GOES satellite is the [Advanced Baseline Imager (ABI)](https://www.goes-r.gov/spacesegment/abi.html) instrument for imaging the Earth's weather, oceans, and environment through its 16 different spectral bands (NOAA & NASA, n.d.). While tracking the flow of wildfire is the use case we're most interested in, these satellites can also provide independent data sources for monitoring things like cloud formation, land surface temperature, ocean dynamics, volcanic ash plumes, vegetative health and more. Because our GOES satellites can take snapshots every 5-15 minutes, decision-makers can rely on the monitoring and fire perimeter we build from this data to inform their emergency response. In contrast to Sentinel-2, GOES satellites are also capable of gathering data 24/7 through their thermal infrared bands which do not rely on sunlight (NOAA & NASA, n.d.). Additionally, it is also capable of penetrating cloud cover by snapping images during windows where the cover is less dense (NOAA & NASA, n.d.).\n", - "\n", - "Now that we've gotten the brief overview of the GOES-16/17 satellites out of the way, let's start extracting data again from the [Earth Engine Data Catalog](https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_FDCF#bands) using the same parameters we used earlier to locate the Lytton Creek wildfire during the end of June 2021. As we can see, we extracted over 4,000 images from each satellite due to its ability to snap images in lightning-quick 5-15 minute intervals." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 52 + "metadata": { + "id": "oe73qYHtZS6N" + } }, - "id": "zNMqPDWsYski", - "outputId": "2becad65-229a-4532-e2b6-9dd9675b0171" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "# Getting coordinates of the point of interest\n", + "# which is the Lytton library as the poi for the Lytton Creek wildfire that started on 2021-06-30\n", + "lat = 50.23124506328952\n", + "lon = -121.58154057521354\n", + "\n", + "# start date of range to filter for\n", + "start_date = \"2021-06-15\"\n", + "\n", + "# end date\n", + "end_date = \"2021-07-15\" #\"2021-10-31\"\n", + "\n", + "# radius of interest in meters\n", + "radius_of_interest_meters = 40000\n", + "\n", + "# point of interest as an ee.Geometry\n", + "poi = ee.Geometry.Point([lon, lat]).buffer(radius_of_interest_meters)\n", + "\n", + "datetime_format = \"%Y-%m-%d %H:%M:%S\"" ], - "text/plain": [ - "" + "metadata": { + "id": "f5aWXtRJYs1q", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "aa4f2ba0-3916-4f76-a445-5c9381cd393a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of GOES-16 images: 4273\n", - "Number of GOES-17 images: 4245\n" - ] - } - ], - "source": [ - "# Gathering satellite data\n", - "goes_16 = ee.ImageCollection(\"NOAA/GOES/16/FDCF\").filterDate(start_date, end_date).filterBounds(poi)\n", - "\n", - "goes_17 = ee.ImageCollection(\"NOAA/GOES/17/FDCF\").filterDate(start_date, end_date).filterBounds(poi)\n", - "\n", - "# Example: print the number of images in the collections (optional)\n", - "print(f\"Number of GOES-16 images: {goes_16.size().getInfo()}\")\n", - "print(f\"Number of GOES-17 images: {goes_17.size().getInfo()}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 }, - "id": "PlFkrjw6pPhD", - "outputId": "a302684a-77b0-4205-c4fb-10f21d4c83c3" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "## Data Extraction (Part 1)" ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "id": "9oKsAcNW-wlh" + } }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'type': 'Image',\n", - " 'bands': [{'id': 'Area',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'int',\n", - " 'min': -32768,\n", - " 'max': 32767},\n", - " 'dimensions': [5424, 5424],\n", - " 'crs': 'PROJCS[\"unnamed\", \\n'\n", - " ' GEOGCS[\"unknown\", \\n'\n", - " ' DATUM[\"unknown\", \\n'\n", - " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", - " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", - " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", - " ' AXIS[\"Longitude\", EAST], \\n'\n", - " ' AXIS[\"Latitude\", NORTH]], \\n'\n", - " ' PROJECTION[\"GEOS\"], \\n'\n", - " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", - " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", - " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", - " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", - " ' PARAMETER[\"sweep\", 0.0], \\n'\n", - " ' PARAMETER[\"Option\", 0.0], \\n'\n", - " ' UNIT[\"m\", 1.0], \\n'\n", - " ' AXIS[\"x\", EAST], \\n'\n", - " ' AXIS[\"y\", NORTH]]',\n", - " 'crs_transform': [2004.017315487541,\n", - " 0,\n", - " -5434894.700982174,\n", - " 0,\n", - " 2004.017315487541,\n", - " -5434895.218222249]},\n", - " {'id': 'Temp',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'int',\n", - " 'min': -32768,\n", - " 'max': 32767},\n", - " 'dimensions': [5424, 5424],\n", - " 'crs': 'PROJCS[\"unnamed\", \\n'\n", - " ' GEOGCS[\"unknown\", \\n'\n", - " ' DATUM[\"unknown\", \\n'\n", - " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", - " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", - " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", - " ' AXIS[\"Longitude\", EAST], \\n'\n", - " ' AXIS[\"Latitude\", NORTH]], \\n'\n", - " ' PROJECTION[\"GEOS\"], \\n'\n", - " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", - " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", - " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", - " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", - " ' PARAMETER[\"sweep\", 0.0], \\n'\n", - " ' PARAMETER[\"Option\", 0.0], \\n'\n", - " ' UNIT[\"m\", 1.0], \\n'\n", - " ' AXIS[\"x\", EAST], \\n'\n", - " ' AXIS[\"y\", NORTH]]',\n", - " 'crs_transform': [2004.017315487541,\n", - " 0,\n", - " -5434894.700982174,\n", - " 0,\n", - " 2004.017315487541,\n", - " -5434895.218222249]},\n", - " {'id': 'Mask',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'int',\n", - " 'min': -32768,\n", - " 'max': 32767},\n", - " 'dimensions': [5424, 5424],\n", - " 'crs': 'PROJCS[\"unnamed\", \\n'\n", - " ' GEOGCS[\"unknown\", \\n'\n", - " ' DATUM[\"unknown\", \\n'\n", - " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", - " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", - " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", - " ' AXIS[\"Longitude\", EAST], \\n'\n", - " ' AXIS[\"Latitude\", NORTH]], \\n'\n", - " ' PROJECTION[\"GEOS\"], \\n'\n", - " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", - " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", - " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", - " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", - " ' PARAMETER[\"sweep\", 0.0], \\n'\n", - " ' PARAMETER[\"Option\", 0.0], \\n'\n", - " ' UNIT[\"m\", 1.0], \\n'\n", - " ' AXIS[\"x\", EAST], \\n'\n", - " ' AXIS[\"y\", NORTH]]',\n", - " 'crs_transform': [2004.017315487541,\n", - " 0,\n", - " -5434894.700982174,\n", - " 0,\n", - " 2004.017315487541,\n", - " -5434895.218222249]},\n", - " {'id': 'Power',\n", - " 'data_type': {'type': 'PixelType', 'precision': 'float'},\n", - " 'dimensions': [5424, 5424],\n", - " 'crs': 'PROJCS[\"unnamed\", \\n'\n", - " ' GEOGCS[\"unknown\", \\n'\n", - " ' DATUM[\"unknown\", \\n'\n", - " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", - " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", - " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", - " ' AXIS[\"Longitude\", EAST], \\n'\n", - " ' AXIS[\"Latitude\", NORTH]], \\n'\n", - " ' PROJECTION[\"GEOS\"], \\n'\n", - " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", - " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", - " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", - " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", - " ' PARAMETER[\"sweep\", 0.0], \\n'\n", - " ' PARAMETER[\"Option\", 0.0], \\n'\n", - " ' UNIT[\"m\", 1.0], \\n'\n", - " ' AXIS[\"x\", EAST], \\n'\n", - " ' AXIS[\"y\", NORTH]]',\n", - " 'crs_transform': [2004.017315487541,\n", - " 0,\n", - " -5434894.700982174,\n", - " 0,\n", - " 2004.017315487541,\n", - " -5434895.218222249]},\n", - " {'id': 'DQF',\n", - " 'data_type': {'type': 'PixelType',\n", - " 'precision': 'int',\n", - " 'min': -128,\n", - " 'max': 127},\n", - " 'dimensions': [5424, 5424],\n", - " 'crs': 'PROJCS[\"unnamed\", \\n'\n", - " ' GEOGCS[\"unknown\", \\n'\n", - " ' DATUM[\"unknown\", \\n'\n", - " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", - " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", - " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", - " ' AXIS[\"Longitude\", EAST], \\n'\n", - " ' AXIS[\"Latitude\", NORTH]], \\n'\n", - " ' PROJECTION[\"GEOS\"], \\n'\n", - " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", - " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", - " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", - " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", - " ' PARAMETER[\"sweep\", 0.0], \\n'\n", - " ' PARAMETER[\"Option\", 0.0], \\n'\n", - " ' UNIT[\"m\", 1.0], \\n'\n", - " ' AXIS[\"x\", EAST], \\n'\n", - " ' AXIS[\"y\", NORTH]]',\n", - " 'crs_transform': [2004.017315487541,\n", - " 0,\n", - " -5434894.700982174,\n", - " 0,\n", - " 2004.017315487541,\n", - " -5434895.218222249]}],\n", - " 'version': 1623715883975148,\n", - " 'id': 'NOAA/GOES/17/FDCF/2021166000031900000',\n", - " 'properties': {'system:time_start': 1623715231900,\n", - " 'system:footprint': {'type': 'LinearRing',\n", - " 'coordinates': [[-180, -90],\n", - " [180, -90],\n", - " [180, 90],\n", - " [-180, 90],\n", - " [-180, -90]]},\n", - " 'system:time_end': 1623715778600,\n", - " 'system:asset_size': 749867,\n", - " 'system:index': '2021166000031900000'}}\n" - ] - } - ], - "source": [ - "# Getting a feel for the data we've extracted from the Earth Engine dataset\n", - "pprint.pp(goes_17.first().getInfo())" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RR1ovhHLY_pL" - }, - "source": [ - "Let's also load the `map_from_map_codes_to_confidence_values()` and `apply_scale_factors()` functions the team at Google [provided us](https://medium.com/google-earth/how-to-generate-wildfire-boundary-maps-with-earth-engine-b38eadc97a38) to process our data." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 + "cell_type": "markdown", + "source": [ + "### Extracting Sentinel-2 satellite data\n", + "\n", + "Before we go further, let's do a brief overview of what Sentinel-2 is and how it differs from other satellites. **Sentinel-2** is a set of twin satellites deployed by the European Space Agency with the stated mission of gaining a \"new perspective of our land and vegetation\" through its 13 spectral bands (European Space Agency, 2024).\n", + "\n", + "For those new to satellite imaging or remote sensing, **spectral bands** refer to the wavelength of light that is either reflected or absorbed from the Earth's surface and can be detected through satellite sensors. Examples of bands we'll be using here include short-wave infrared (SWIR) bands, near-infrared (NIR) bands, and red, green, and blue bands. In the context of remote sensing, we can analyze the light from these bands to make inferences about the state of the Earth's surface. Not only can we use this information to determine the location of wildfires, but we can also use it to ascertain information about an area's water quality or quantify its amount of forest cover.\n", + "\n", + "The way that Sentinel-2 gathers data is by orbiting around the Earth and taking snapshots of the surface approximately every 5 days (European Space Agency, 2024). Each image covers about 290 km which is great because it allows us to monitor large swaths of land with just a single image, given that it's clear and largely free from clouds or smoke blocking the surface.\n", + "\n", + "In addition to the image data, we'll also make use of some functions written by Justin Braaten (2022) and his team at Google to aid us in our analysis. The first is the `mask_s2_cloud()` function which helps us reduce the noise from the cloud for clearer imaging (Braaten, 2022). The second is the `add_ee_layer()` which essentially allows us to overlay satellite images on top of a Google map-like interface from the `folium` package so that we're able to cross-reference our raw image data with all the symbols and markers we'd typically see on a map (Braaten, 2022)." + ], + "metadata": { + "id": "dKATh27eZ_Qx" + } }, - "id": "I45V4_jnYszD", - "outputId": "b4f43b40-73e1-4d47-da5e-efd5e859ee19" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "def mask_s2_clouds(image):\n", + " \"\"\"Masks clouds in a Sentinel-2 image using the QA band.\n", + "\n", + " Args:\n", + " image (ee.Image): A Sentinel-2 image.\n", + "\n", + " Returns:\n", + " ee.Image: A cloud-masked Sentinel-2 image.\n", + " \"\"\"\n", + " qa = image.select(\"QA60\")\n", + "\n", + " # Bits 10 and 11 are clouds and cirrus, respectively.\n", + " cloud_bit_mask = 1 << 10\n", + " cirrus_bit_mask = 1 << 11\n", + "\n", + " # Both flags should be set to zero, indicating clear conditions.\n", + " mask = (\n", + " qa.bitwiseAnd(cloud_bit_mask)\n", + " .eq(0)\n", + " .And(qa.bitwiseAnd(cirrus_bit_mask).eq(0))\n", + " )\n", + "\n", + " return image.updateMask(mask).divide(10000)" ], - "text/plain": [ - "" + "metadata": { + "id": "Agm19ss4Z-Cf", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "5fc19402-db07-4680-fa78-b6ed6f53c93f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def map_from_mask_codes_to_confidence_values(image):\n", - " return image.clip(poi).remap(fire_mask_codes, confidence_values, default_confidence_value)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 }, - "id": "fFCZ5ojkYsv7", - "outputId": "62619cd2-0540-4398-a5ae-4dafafdae5e6" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "# Google function that allows ee layers on folium\n", + "def add_ee_layer(self, ee_image_object, vis_params, name):\n", + " \"\"\"\n", + " Adds a method for displaying Earth Engine image tiles to folium map.\n", + " \"\"\"\n", + "\n", + " map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)\n", + " folium.raster_layers.TileLayer(\n", + " tiles=map_id_dict['tile_fetcher'].url_format,\n", + " attr='Map Data © Google Earth Engine',\n", + " name=name,\n", + " overlay=True,\n", + " control=True\n", + " ).add_to(self)\n", + "\n", + "# Add Earth Engine drawing method to folium\n", + "folium.Map.add_ee_layer = add_ee_layer" ], - "text/plain": [ - "" + "metadata": { + "id": "POj82YNEzyE_", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "5f2a17c3-927c-47a1-8384-5d5284020f62" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Applies scaling factors.\n", - "def apply_scale_factors(image):\n", - " optical_bands = image.select(\"SR_B.\").multiply(0.0000275).add(-0.2)\n", - " thermal_bands = image.select(\"ST_B.*\").multiply(0.00341802).add(149.0)\n", - " return image.addBands(optical_bands, None, True).addBands(\n", - " thermal_bands, None, True\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cspKemgsvxUQ" - }, - "source": [ - "#### Overview of the Fire Detection Characterization (FDC) Algorithm\n", - "\n", - "Now that we've talked a little bit about the satellites used to generate the data, let's discuss how we are to detect the presence of wildfires based on these images. Luckily for us, Google makes this easy by giving developers easy access to the [FDC Fire Detection algorithm](https://www.star.nesdis.noaa.gov/goesr/docs/ATBD/Fire.pdf) which was developed by a research team at the University of Wisconsin-Madison.\n", - "\n", - "The primary objective of the **FDC Fire Detection algorithm** is to return the likelihood of a fire based on the pixel data of an input image (Restif & Hoffman, 2020). For those interested, below is a brief overview of the steps that the FDC Fire detection algorithm takes to accomplish this objective:\n", - "\n", - "1) First, the algorithm takes the data from the **thermal infrared (TIR)** band of the satellite sensor (band 14), as well as the **shortwave infrared (SWIR)** band (7), and converts the brightness of each pixel to a temperature;\n", - "\n", - "2) Next, it flags certain TIR pixels based on whether they exceed a certain threshold. Examples of such thresholds include:\n", - "- *Absolute threshold* based on a set temperature;\n", - "- *Relative threshold* based on the delta between a pixel's temperature and its neighbour's exceeding a set amount.\n", - "\n", - "3) If a pixel is flagged, it checks for false positives by evaluating the temperature of its neighbouring pixels just like in the previous step. When checking the temperature of the pixel, we can choose to apply a different threshold from step 2 if we wish. And in the case of our code example below, we do just that by applying a relative threshold instead.\n", - "\n", - "4) If our neighbouring pixel also exceeds the threshold, it will then apply one last check for false positives by evaluating whether the *delta/difference* between the pixel temperature produced by the TIR (band 14) and the SWIR (band 7) band exceeds a relative threshold.\n", - "\n", - "5) And if the difference between the TIR and SWIR pixel temperatures exceeds our relative threshold, the algorithm will return a 1 or a `True` result, confirming that the pixel in question is indeed a fire pixel.\n", - "\n", - "Our code below is a simplified demonstration of Steps 1-5 of the FDC algorithm. However, our explanation only covers the presence of a fire based on the pixel's brightness so the final result of our simplified FDC algorithm is a binary `True`/`False` value." - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 }, - "id": "mgp4IJ_K9txq", - "outputId": "d2e9f4e0-c491-4a12-fded-4da87cd012cf" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "With our date and geocoordinate parameters, we should extract about 27 [Sentinel-2](https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_SR_HARMONIZED#description) satellite images from the Google Earth Engine data catalogue and store it in our `s2_dataset` object." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Fire Detection Characterization (FDC) Algorithm example implementation\n", - "\n", - "# Simulated satellite image data\n", - "def create_simulated_data(width=50, height=50):\n", - "\n", - " # Create background temperature (avg 290 Kelvin or 16.85 degrees Celsius)\n", - " background = np.random.normal(290, 2, (height, width))\n", - "\n", - " # Add some hotter spots (potential fires) with temperatures between 310 to 330 Kelvins (i.e. 36.85 to 56.85 degrees Celsius)\n", - " num_hotspots = 5\n", - " for _ in range(num_hotspots):\n", - " x, y = np.random.randint(0, width), np.random.randint(0, height)\n", - " hotspot_temp = np.random.uniform(310, 330)\n", - " background[y, x] = hotspot_temp\n", - "\n", - " return background\n", - "\n", - "# Simplified FDC algorithm - our absolute thereshold is 310K or 36.85 degrees\n", - "def simplified_fdc(image_4um, image_11um, absolute_threshold=310, relative_threshold=10):\n", - " height, width = image_4um.shape\n", - " fire_mask = np.zeros((height, width), dtype=bool)\n", - "\n", - " for i in range(1, height-1):\n", - " for j in range(1, width-1):\n", - " # Step 1: Check absolute threshold\n", - " if image_4um[i, j] > absolute_threshold:\n", - " # Step 2: Calculate background\n", - " background = np.mean(image_4um[i-1:i+2, j-1:j+2])\n", - "\n", - " # Step 3: Check relative threshold\n", - " if image_4um[i, j] - background > relative_threshold:\n", - " # Step 4: Multi-channel confirmation\n", - " if image_4um[i, j] - image_11um[i, j] > 10:\n", - " fire_mask[i, j] = True\n", - "\n", - " return fire_mask\n", - "\n", - "# Create simulated data\n", - "image_4um = create_simulated_data()\n", - "image_11um = image_4um - np.random.normal(10, 2, image_4um.shape) # 11um channel is typically cooler" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 414 + "metadata": { + "id": "tAOb4NZroFDG" + } }, - "id": "GftMLsQZxYl5", - "outputId": "3118fcb6-ece9-4b9d-9964-3530a52ec1fb" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "s2_dataset = ee.ImageCollection(\"COPERNICUS/S2_SR_HARMONIZED\").filterDate(start_date, end_date).filterBounds(poi).filter(ee.Filter.lt(\"CLOUDY_PIXEL_PERCENTAGE\", 20)).map(mask_s2_clouds)\n", + "\n", + "# how many images did we get?\n", + "print(\"Total number:\", s2_dataset.size().getInfo())" ], - "text/plain": [ - "" + "metadata": { + "id": "yx1OYij_Z95P", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 34 + }, + "outputId": "9a00179e-4306-44b2-a522-aa9580f368a5" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Total number: 27\n" + ] + } ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "data": { - "image/png": "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b9OmTZXlgKp1KrvdjhNPPDHhBxngwAC7qRhEtjZ1DVVdKxaLoaSkBA0aNFCu32Kx1HiA3kNncAL067KH69Bza/PmzTAMA23btq12eZ1ZfDZv3oxvv/1WLPP3338Ps9mcsh8gk51rANC+fXssW7Ys4TWn01mljDk5OQn12zvuuAP/+te/0K9fP5xwwgno3bs3rrzySvTt2zclZabaYSMKHRV2ux1nnHEGzjjjDPz+97/HjTfeiLlz52LMmDHK9yUbP6O6142DBjdN1op86IBN1fn+++9x4YUXon379pg8eTKaNWsGu92O999/H1OmTNHqXRCLxdCrVy/ce++91cZ///vfizkkJSUlePTRR3HHHXegtLQ03oBQXl4OwzCwdetWuFyuKoP4HspIMijs4e776rRv3x4AsGHDBlx66aXKZXXKULm+4uJidO/eHR6PB+PHj0fr1q3hdDrx5Zdf4r777qtyrKR8NVm2MveTTz6ZdIrDQxvHiIiIjiVff/01gN8aKA7+PK/soVlTmzdvxpo1awCg2i/Mr7/+urIR5UhJxWw0QGrqGjXJkQrVbfuRrsseem7FYjGYTCZ88MEH1W6/Tp0qFovh5JNPrjItd6VDG6fqis74gHl5eVi/fj0WLlyIDz74AB988AFmzZqFwYMH45VXXjkKpSQVNqLQUVf5i8jOnTuP2Doqf/0/dPT1Q391qM4777yDYDCIt99+O+EXguq6ESZrrGndujXKy8vFXwJatGiBTz/9FOXl5QkfDps2bRLLuX//fpSXl+OJJ56oMuo7cOBXhQEDBiQMolVdT5Da/pKg45xzzkFOTg7eeOMN/PWvf63R4LIqS5Yswd69ezF//nycd9558dd//PHHlORXad26NYADv8ql05SMREREqVBeXo4FCxagWbNm6NChAwCgf//+mDhxIl577bXDbkR5/fXXYbPZ8Oqrr1apDyxbtgzPPvssfvrppyq9NCq1aNGi2tnyDn2tRYsWAA7UqU488cT466FQCD/++ONhf3YfzuMexyLduuzhiEajmD17NlwuF84555z4+gzDQKtWrcQGGlX9+6uvvsKFF16oPE6tW7dGLBbDxo0bk/4QplrPoQ4+1yofHaq0adOmeLym7HY7+vfvj/79+yMWi+GOO+7A888/j4ceeqhKzys6ujgmCh0xixcvrrbF/P333weg/8jK4WjR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", - "text/plain": [ - "
" + "cell_type": "code", + "source": [ + "# Getting a feel of the resulting data structure\n", + "s2_dataset.first().getInfo()" + ], + "metadata": { + "collapsed": true, + "id": "2htR-4b92JLL", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "951aff19-9aaf-44d2-c3e2-f4aceeb4ad25" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'type': 'Image',\n", + " 'bands': [{'id': 'B1',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [1830, 1830],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [60, 0, 499980, 0, -60, 5600040]},\n", + " {'id': 'B2',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'B3',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'B4',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'B5',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'B6',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'B7',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'B8',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'B8A',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'B9',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [1830, 1830],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [60, 0, 499980, 0, -60, 5600040]},\n", + " {'id': 'B11',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'B12',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'AOT',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'WVP',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'SCL',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'TCI_R',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'TCI_G',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'TCI_B',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'MSK_CLDPRB',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'MSK_SNWPRB',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'QA10',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [10980, 10980],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [10, 0, 499980, 0, -10, 5600040]},\n", + " {'id': 'QA20',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 429496.75},\n", + " 'dimensions': [5490, 5490],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [20, 0, 499980, 0, -20, 5600040]},\n", + " {'id': 'QA60',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 6.553500175476074},\n", + " 'dimensions': [1830, 1830],\n", + " 'crs': 'EPSG:32610',\n", + " 'crs_transform': [60, 0, 499980, 0, -60, 5600040]},\n", + " {'id': 'MSK_CLASSI_OPAQUE',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'crs': 'EPSG:4326',\n", + " 'crs_transform': [1, 0, 0, 0, 1, 0]},\n", + " {'id': 'MSK_CLASSI_CIRRUS',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'crs': 'EPSG:4326',\n", + " 'crs_transform': [1, 0, 0, 0, 1, 0]},\n", + " {'id': 'MSK_CLASSI_SNOW_ICE',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'float',\n", + " 'min': 0,\n", + " 'max': 0.02550000138580799},\n", + " 'crs': 'EPSG:4326',\n", + " 'crs_transform': [1, 0, 0, 0, 1, 0]}],\n", + " 'properties': {'system:footprint': {'type': 'LinearRing',\n", + " 'coordinates': [[-122.14795105746178, 49.56171188412999],\n", + " [-122.14790729300596, 49.561707970022596],\n", + " [-121.48241050636712, 49.55489352105015],\n", + " [-121.48226960340271, 49.55496128313161],\n", + " [-121.46675880041288, 50.048507122600746],\n", + " [-121.4508124104042, 50.54198671004312],\n", + " [-121.4509189803275, 50.542078108087395],\n", + " [-121.75711809372756, 50.54574935708296],\n", + " [-121.75716507148948, 50.54572402339127],\n", + " [-121.75723134979857, 50.54571899943225],\n", + " [-121.75900275964747, 50.54355299175503],\n", + " [-121.76260511189456, 50.53548757569572],\n", + " [-121.76802146843227, 50.522593146684116],\n", + " [-122.085461682415, 49.72846537606213],\n", + " [-122.092463120295, 49.71017094157173],\n", + " [-122.1483051727211, 49.56271071386906],\n", + " [-122.14831939269564, 49.5618909054019],\n", + " [-122.14828018587892, 49.561861416962806],\n", + " [-122.14827217485382, 49.56181930543502],\n", + " [-122.14795105746178, 49.56171188412999]]},\n", + " 'system:index': '20210621T185921_20210621T190713_T10UEA'}}" + ] + }, + "metadata": {}, + "execution_count": 7 + } ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of fire pixels detected: 0\n" - ] - } - ], - "source": [ - "# Apply simplified FDC algorithm\n", - "fire_detections = simplified_fdc(image_4um, image_11um)\n", - "\n", - "# Visualize results\n", - "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))\n", - "\n", - "im1 = ax1.imshow(image_4um, cmap=\"hot\")\n", - "ax1.set_title(\"Simulated 4μm Channel\")\n", - "plt.colorbar(im1, ax=ax1, label=\"Temperature (K)\")\n", - "\n", - "ax2.imshow(image_4um, cmap=\"gray\")\n", - "ax2.imshow(fire_detections, cmap=\"Reds\", alpha=0.5)\n", - "ax2.set_title(\"FDC Algorithm Fire Detections\")\n", - "\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "print(f\"Number of fire pixels detected: {np.sum(fire_detections)}\")" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 414 }, - "id": "3ZQx_2SQdUx8", - "outputId": "e4457b95-2899-498a-c7fc-592348b3e6c7" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "If we look at each of the 27 images pulled from the Earth Engine bucket, we'll find that the image quality on most of them isn't great as there are often clouds or smoke blocking our view of Lytton. Therefore, we've decided to manually select those with the best image quality, store the list in our `interesting_images` object, and display them to get a visual of the raw images we'll be working with." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "id": "kCGgago99wLM" + } }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABFEAAAHqCAYAAADMLNG2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjgUlEQVR4nOzdeXhU5d3/8c/MJJPJPgmQRGRzoSBurWBt3EUUcd9qtbjWqrVAXWul1l1LbX1cK1CXYltFrBZqtSp1VxR5EJdHq6WiogiENfsyk2Tm9we/RALJ/b0hAxnl/bourkvnc+Z7zpxt7rlzn3MCyWQyKQAAAAAAADgFe3oBAAAAAAAAvg7oRAEAAAAAAPBAJwoAAAAAAIAHOlEAAAAAAAA80IkCAAAAAADggU4UAAAAAAAAD3SiAAAAAAAAeKATBQAAAAAAwAOdKAAAAAAAAB7oRMFWNWjQIJ199tk9Mu/rrrtOgUCgR+bdlcWLFysQCOjBBx/s6UVJe2effbby8vJ6ejFS5uyzz9agQYN6ejEAAEhrPdl2lKSDDz5YBx98sPe0u+2225ZdoG548MEHFQgEtHjx4p5elK+1l19+WYFAQC+//HJPLwp6CJ0oSIn3339fJ598sgYOHKhIJKLtt99ehx12mO6+++6eXrSUmDx5co93dNx888069thjVVpaqkAgoOuuu67T6RYuXKhLLrlE++67ryKRSNp/WTY1Nen222/XPvvso8LCQkUiEX3rW9/S+PHj9d///renFw8AgK+dth/Lnf278sor26cbNGhQ++vBYFDRaFS77767zj//fM2bN6/L+qn67n766acVCATUt29fJRKJbn3mrWXZsmW67rrr9O677/b0omzk7LPP7nK7P/vss1t1WQ4++OAO+1ZBQYGGDBmiM844Q88991y3ak+fPl133HFHahbUIR3a/0hPGT29APj6e+ONN3TIIYdowIABOu+881RWVqYlS5bozTff1J133qkJEya0T7tw4UIFg1+/vrvJkyerd+/ePfqXkF/96lcqKyvTd77zHc2ePbvL6ebOnau77rpLw4YN0y677JKWX/JtVq9erSOOOEILFizQ0UcfrR/+8IfKy8vTwoULNWPGDN17772Kx+M9vZgAAHwt3XDDDdphhx06vLbhSIlvf/vbuuyyyyRJtbW1+uijj/TYY4/pvvvu0yWXXKLbbrutw/Sp/O5++OGHNWjQIC1evFgvvviiRo0a1Y1Pu2X861//6vD/y5Yt0/XXX69Bgwbp29/+ds8slENWVpbuv//+jV7fc889ddhhh+nUU09VVlbWVlmWfv36adKkSZKk+vp6LVq0SDNnztRDDz2kU045RQ899JAyMzM3ue706dP1wQcf6OKLL07xEnfUVfv/wAMPVGNjo8Lh8BadP9IXnSjotptvvlmFhYWaP3++otFoh2zlypUd/n9rnbS/iT777DMNGjRIq1evVp8+fbqc7thjj1VVVZXy8/N16623pnUnytlnn6133nlHjz/+uE466aQO2Y033qirrrqqh5YMAICvvzFjxmjEiBHOabbffnudfvrpHV675ZZb9MMf/lC33367Bg8erAsvvLA9S9V3d319vZ544glNmjRJ06ZN08MPP5xWnSgNDQ3Kycn52v1QzsjI2Gh7ri8UCjnfn0wm1dTUpOzs7G4vS2Fh4UbL8pvf/EY/+9nPNHnyZA0aNEi33HJLt+eztQWDQUUikZ5eDPSgr9+QAKSdTz75RLvuuutGHSiSVFJS0uH/N7yutW246Zw5c/Szn/1Mffr0UTQa1QUXXKB4PK6qqiqdeeaZKioqUlFRka644golk8n293d1TaLvvUamTZumkSNHqqSkRFlZWRo2bJimTJmy0TL/+9//1iuvvNI+LHH9a2Orqqp08cUXq3///srKytLOO++sW265ZaNhqVVVVTr77LNVWFioaDSqs846S1VVVc7l23A5fBQXFys/P9+cblPWXdv9SL744gsdffTRysvL0/bbb6977rlH0rrLuUaOHKnc3FwNHDhQ06dPN+c/b948/fOf/9S55567USNMWtfhduutt270+tKlS3X88ccrLy9Pffr00eWXX67W1tYO09x6663ad9991atXL2VnZ2v48OF6/PHHN6oVCAQ0fvx4/f3vf9duu+2mrKws7brrrhsNeW27n86iRYt09tlnKxqNqrCwUOecc44aGho2qvvQQw9p+PDhys7OVnFxsU499VQtWbLEXCcAAKSD7Oxs/eUvf1FxcbFuvvnm9rbX5n53d2bWrFlqbGzU97//fZ166qmaOXOmmpqavN77f//3fzrooIOUnZ2tfv366aabbtK0adM6vYR58uTJ2nXXXZWVlaW+fftq3LhxG7W/2u5lsmDBAh144IHKycnRL3/5y/asrd338ssva++995YknXPOOe3twg3bmx9++KEOOeQQ5eTkaPvtt9dvf/vbDnlbG+yvf/2rrr/+em2//fbKz8/XySefrOrqasViMV188cUqKSlRXl6ezjnnHMViMa9149LZPVEGDRqko48+WrNnz9aIESOUnZ2tP/zhD5L827ibIhQKtY+Y/v3vf6/q6uoOudWGOvjgg/XPf/5Tn3/+efv6X7+NHIvFdO2112rnnXdWVlaW+vfvryuuuKLT9ffQQw/pu9/9rnJyclRUVKQDDzywfeSRq/3fVRv6sccea1/23r176/TTT9fSpUs7TNPWpvZpz86YMUPDhw9Xfn6+CgoKtPvuu+vOO+/c1FWOLYCRKOi2gQMHau7cufrggw82+2ZaEyZMUFlZma6//nq9+eabuvfeexWNRvXGG29owIAB+vWvf62nn35av/vd77TbbrvpzDPPTMmyT5kyRbvuuquOPfZYZWRk6Mknn9RPf/pTJRIJjRs3TpJ0xx13aMKECcrLy2v/60ppaamkdX+lOOigg7R06VJdcMEFGjBggN544w1NnDhRy5cvb79eM5lM6rjjjtOcOXP0k5/8RLvssotmzZqls846KyWfY2tobW3VmDFjdOCBB+q3v/2tHn74YY0fP165ubm66qqrNHbsWJ144omaOnWqzjzzTJWXl280hHh9//jHPyRJZ5xxxiYtw+jRo7XPPvvo1ltv1fPPP6//+Z//0U477dThr2R33nmnjj32WI0dO1bxeFwzZszQ97//fT311FM66qijOtScM2eOZs6cqZ/+9KfKz8/XXXfdpZNOOklffPGFevXq1WHaU045RTvssIMmTZqkt99+W/fff79KSko6/BXl5ptv1tVXX61TTjlFP/7xj7Vq1SrdfffdOvDAA/XOO+902tkIAMCWUF1drdWrV3d4rXfv3l7vzcvL0wknnKAHHnhAH374oXbdddfN+u7uysMPP6xDDjlEZWVlOvXUU3XllVfqySef1Pe//33n+5YuXapDDjlEgUBAEydOVG5uru6///5ORztfd911uv766zVq1ChdeOGFWrhwoaZMmaL58+fr9ddf73ApyZo1azRmzBideuqpOv3009vbeuvbZZdddMMNN+iaa67R+eefrwMOOECStO+++7ZPU1lZqSOOOEInnniiTjnlFD3++OP6xS9+od13311jxozpUG/SpEnKzs7WlVdeqUWLFunuu+9WZmamgsGgKisrdd111+nNN9/Ugw8+qB122EHXXHON17rdcJtnZmaqsLCwy+kXLlyo0047TRdccIHOO+88DRkyxLuNuzlCoZBOO+00XX311ZozZ05728ynDXXVVVepurpaX375pW6//XZJan/wQCKR0LHHHqs5c+bo/PPP1y677KL3339ft99+u/773//q73//e/syXH/99bruuuu077776oYbblA4HNa8efP04osv6vDDD3e2/zvz4IMP6pxzztHee++tSZMmacWKFbrzzjv1+uuvb9T+82nPPvfcczrttNN06KGHtrczP/roI73++uu66KKLNnvdI0WSQDf961//SoZCoWQoFEqWl5cnr7jiiuTs2bOT8Xh8o2kHDhyYPOuss9r/f9q0aUlJydGjRycTiUT76+Xl5clAIJD8yU9+0v5aS0tLsl+/fsmDDjqo/bWXXnopKSn50ksvdZjPZ599lpSUnDZtWvtr1157bXLDXb6hoWGjZRw9enRyxx137PDarrvu2mG+bW688cZkbm5u8r///W+H16+88spkKBRKfvHFF8lkMpn8+9//npSU/O1vf9vh8xxwwAEbLadl1apVSUnJa6+91pz2d7/7XVJS8rPPPtso25R1d9ZZZyUlJX/961+3v1ZZWZnMzs5OBgKB5IwZM9pf/89//uO1fCeccEJSUrKystL8HOsvww033NDh9e985zvJ4cOHd3htw+0aj8eTu+22W3LkyJEdXpeUDIfDyUWLFrW/9t577yUlJe++++7219r2nR/96EcbfYZevXq1///ixYuToVAoefPNN3eY7v33309mZGR0eP2ss85KDhw40OOTAwCwadraV539W9/AgQOTRx11VJd1br/99qSk5BNPPJFMJjf9u7srK1asSGZkZCTvu+++9tf23Xff5HHHHbfRtBu2HSdMmJAMBALJd955p/21NWvWJIuLizu0eVauXJkMh8PJww8/PNna2to+7e9///ukpOQf//jH9tcOOuigpKTk1KlTN5r/QQcd1KENOH/+/C7bbm11/vznP7e/FovFkmVlZcmTTjqp/bW2Nthuu+3Wob182mmnJQOBQHLMmDEd6paXl3u1GdraShv+a1v+tv1i/XbhwIEDk5KSzz77bIdavm3crhx00EHJXXfdtct81qxZSUnJO++8M5lMblob6qijjup0ffzlL39JBoPB5Guvvdbh9alTpyYlJV9//fVkMplMfvzxx8lgMJg84YQTOuwbyWSyw++Rrtr/G7ah4/F4sqSkJLnbbrslGxsb26d76qmnkpKS11xzTftrvu3Ziy66KFlQUJBsaWnZaP7oeVzOg2477LDDNHfuXB177LF677339Nvf/lajR4/W9ttv3/4XC8u5557b4fHD++yzj5LJpM4999z210KhkEaMGKFPP/00Zcu+/vWebX+tOeigg/Tpp59uNLywM4899pgOOOAAFRUVafXq1e3/Ro0apdbWVr366quS1t19PiMjo8NoiVAo1OGmu18HP/7xj9v/OxqNasiQIcrNzdUpp5zS/vqQIUMUjUbN7VRTUyNJXpcere8nP/lJh/8/4IADNprX+tu1srJS1dXVOuCAA/T2229vVG/UqFHaaaed2v9/jz32UEFBQafL39m816xZ0/5ZZs6cqUQioVNOOaXD/lBWVqbBgwfrpZde2qTPCgBAd9xzzz167rnnOvzbFG1/4a+trZW0+d/dG5oxY4aCwWCHS4JOO+00PfPMM6qsrHS+99lnn1V5eXmHm7oWFxdr7NixHaZ7/vnnFY/HdfHFF3d4qMF5552ngoIC/fOf/+wwfVZWls4555xufKp18vLyOtwHJBwO67vf/W6n7Yozzzyzw2iYtvbvj370ow7T7bPPPlqyZIlaWlrM+UcikY22+f/8z/8437PDDjto9OjRHV7zbeNurg33rVS0oR577DHtsssuGjp0aIcaI0eOlKT2Gn//+9+VSCR0zTXXbPTAi/V/j/h66623tHLlSv30pz/tcK+Uo446SkOHDt1oX5Ps9mw0GlV9fX23n2SELYPLeZASe++9t2bOnKl4PK733ntPs2bN0u23366TTz5Z7777roYNG+Z8/4ABAzr8f9uQw/79+2/0uvXluilef/11XXvttZo7d+5G97aorq52Dn2UpI8//lj/93//1+WNXtturPv5559ru+22a//CaDNkyJBuLP3WFYlENvqchYWF6tev30ZfOD7bqaCgQNK6L0/fS1w6W4aioqKN5vXUU0/ppptu0rvvvtvhGtjOvhg33Pe6qtnZtEVFRZLWddQUFBTo448/VjKZ1ODBgztd/s25Az0AAJvru9/9rnljWZe6ujpJX3WabM53d2fa7kWxZs0arVmzRpL0ne98R/F4XI899pjOP//8Lt/7+eefq7y8fKPXd955542mkzZua4XDYe24447teZvtt98+JTeR7axdVFRUpP/7v//baNpNaf8mEglVV1dvdKnxhkKh0CbfoLezy69927iba8N9KxVtqI8//lgfffSRucyffPKJgsGg+fvEV1f7miQNHTpUc+bM6fCaT3v2pz/9qf76179qzJgx2n777XX44YfrlFNO0RFHHJGSZUb30ImClAqHw9p77721995761vf+pbOOeccPfbYY7r22mud7+vqTuGdvZ5c78ayXfUWb3hjps588sknOvTQQzV06FDddttt6t+/v8LhsJ5++mndfvvtXjfNSiQSOuyww3TFFVd0mn/rW98ya6Sb9dfv+jZlG7nqtBk6dKikdTelbbum2GLdUV6SXnvtNR177LE68MADNXnyZG233XbKzMzUtGnTOr3h7aYsvzVtIpFQIBDQM8880+m0G3aiAQCQzj744ANJX3VQbM5394Y+/vhjzZ8/X5I6/cH88MMPOztRtpRUPI1GSk27YnPbVpurs8++pdu4G+5bqWhDJRIJ7b777hs9lrvNhp1TPcWnPVtSUqJ3331Xs2fP1jPPPKNnnnlG06ZN05lnnqk//elPW2Ep4UInCraYtr98LF++fIvNo20kwIZ3Wd/wrwudefLJJxWLxfSPf/yjw18COhsu2FVnzU477aS6ujqzx3/gwIF64YUXVFdX1+FLYOHCheZybmltwyjbrFixYqvM95hjjtGkSZP00EMPbXZDrDN/+9vfFIlENHv27A43mZs2bVrK5tGVnXbaSclkUjvssMPXsgMNAIA2dXV1mjVrlvr3769ddtlFUmq+ux9++GFlZmbqL3/5y0Y/JufMmaO77rpLX3zxRacjRaV1bapFixZt9PqGrw0cOFDSurbWjjvu2P56PB7XZ599ttmPU96cyz2+jnzbuJujtbVV06dPV05Ojvbff//2+fm2oVzt8vfee0+HHnqoczvttNNOSiQS+vDDDztcFuY7nw2tv6+1XTrUZuHChe35pgqHwzrmmGN0zDHHKJFI6Kc//an+8Ic/6Oqrr95o5BW2Lu6Jgm576aWXOu0Zf/rppyVt2UtWBg4cqFAotNF1mZMnTzbf2/bFvf6yV1dXd/pjOzc3t9PHEZ9yyimaO3euZs+evVFWVVXVfu3qkUceqZaWlg6PT25tbdXdd99tLueWtmGn0axZsyRtub92tCkvL9cRRxyh+++/v8Pd0tvE43Fdfvnlm1w3FAopEAh0GI20ePHiTueRaieeeKJCoZCuv/76jdZfMplsH7IMAEA6a2xs1BlnnKG1a9fqqquuav8xmYrv7ocfflgHHHCAfvCDH+jkk0/u8O/nP/+5JOmRRx7p8v2jR4/W3Llz9e6777a/tnbtWj388MMdphs1apTC4bDuuuuuDt/JDzzwgKqrqzd6Wp+v3NxcSRv/Ae+bxreNu6laW1v1s5/9TB999JF+9rOftV8itiltqNzc3E7vXXjKKado6dKluu+++zbKGhsbVV9fL0k6/vjjFQwGdcMNN2w08nz9eXfV/t/QiBEjVFJSoqlTp3a4jPyZZ57RRx99tFn72oZtxmAwqD322EOSUvK4a3QPI1HQbRMmTFBDQ4NOOOEEDR06VPF4XG+88YYeffRRDRo0KCU36epKYWGhvv/97+vuu+9WIBDQTjvtpKeeesrrOs3DDz+8vYf3ggsuUF1dne677z6VlJRsNHpm+PDhmjJlim666SbtvPPOKikp0ciRI/Xzn/9c//jHP3T00Ufr7LPP1vDhw1VfX6/3339fjz/+uBYvXqzevXvrmGOO0X777acrr7xSixcv1rBhwzRz5kyvm9e2+ctf/qLPP/+8/d4tr776qm666SZJ6x412NbLXV1d3d458/rrr0uSfv/73ysajSoajWr8+PEd6t53331qamrSt7/9bb311lt67LHHFAgENHPmTO2www46+OCDvZdxU/35z3/W4YcfrhNPPFHHHHOMDj30UOXm5urjjz/WjBkztHz5ct16662bVPOoo47SbbfdpiOOOEI//OEPtXLlSt1zzz3aeeedO70eOZV22mkn3XTTTZo4caIWL16s448/Xvn5+frss880a9YsnX/++ZvVMQQAwJaydOlSPfTQQ5LWjT758MMP9dhjj6miokKXXXaZLrjggg7Td+e7e968eVq0aNFGbZE222+/vfbaay89/PDD+sUvftHpNFdccYUeeughHXbYYZowYUL7I44HDBigtWvXtnf49OnTRxMnTtT111+vI444Qscee6wWLlyoyZMna++99+5w89dNsdNOOykajWrq1KnKz89Xbm6u9tlnn07vK/J15tvGdamurm7ftxoaGrRo0SLNnDlTn3zyiU499VTdeOON7dNuShtq+PDhevTRR3XppZdq7733Vl5eno455hidccYZ+utf/6qf/OQneumll7TffvuptbVV//nPf/TXv/5Vs2fP1ogRI7Tzzjvrqquu0o033qgDDjhAJ554orKysjR//nz17dtXkyZNap9PZ+3/DWVmZuqWW27ROeeco4MOOkinnXZa+yOOBw0apEsuuWST1/+Pf/xjrV27ViNHjlS/fv30+eef6+6779a3v/3t9pFh6EFb81FA+GZ65plnkj/60Y+SQ4cOTebl5SXD4XBy5513Tk6YMCG5YsWKDtN29Yjj+fPnd5iu7ZGyq1at6vD6WWedlczNze3w2qpVq5InnXRSMicnJ1lUVJS84IILkh988IHXI47/8Y9/JPfYY49kJBJJDho0KHnLLbck//jHP270+LeKiorkUUcdlczPz+/wqLhkMpmsra1NTpw4Mbnzzjsnw+Fwsnfv3sl99903eeutt3Z4bN2aNWuSZ5xxRrKgoCBZWFiYPOOMM5LvvPOO9yOO2x6b19m/9R9T3PaI4s7+rf84uLbHs02ePDn53e9+NxkOh5PDhg1LvvLKK8nTTz89mZeX1/74v87We9sydfb4OuuRietraGhI3nrrrcm99967ff8ZPHhwcsKECR0ePdzVMnS2XR944IHk4MGDk1lZWcmhQ4cmp02b1ul0kpLjxo3rdPnX30+72h87e1RgMplM/u1vf0vuv//+ydzc3GRubm5y6NChyXHjxiUXLlzY4fPwiGMAwJbQVftqQ22Pt5WUDAQCyYKCguSuu+6aPO+885Lz5s3r8n2+390bmjBhQlJS8pNPPulymuuuuy4pKfnee++1L+P638nJZDL5zjvvJA844IBkVlZWsl+/fslJkyYl77rrrqSkZEVFRYdpf//73yeHDh2azMzMTJaWliYvvPDCjR7R7Hoc74aPOE4mk8knnngiOWzYsGRGRkaHdlxXdTb8zm9rgz322GMdptvUdnFn8+msrbRh/Q0fcdxVm823jduZDduteXl5ycGDBydPP/305L/+9a8u3+fThqqrq0v+8Ic/TEaj0Y3at/F4PHnLLbckd91112RWVlayqKgoOXz48OT111+frK6u7jCvP/7xj8nvfOc77dMddNBByeeee64976r9v+Ejjts8+uij7fWKi4uTY8eOTX755ZcdpvFtzz7+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rVy50pn7dLRHIp0fz21aWuzt1tjo3sdyc+0WQWNjgzP3ORaqqqqdeUtLjTOXpETC+rVgP23O2rY+T6zr06fEmVvHm2Sfg5qaYmaNoqKibs1Dss+ntbX2dmlo6Hr/aGqy14W0ifdE6devn37zm99owYIFeuuttzRy5Egdd9xx+ve//y1JuuSSS/Tkk0/qscce0yuvvKJly5bpxBNP3JRZAACA9W2BG8suWbJE1dXV7f8mTpxoLsa4ceP0wQcfaMaMGe2v9enTR4899piefPJJ5eXlqbCwUFVVVdprr728GkO+/vKXv2i//fZT37599fnnn0uS7rjjDj3xxBMpmwfWoa0HAIDbJo1EOeaYYzr8/80336wpU6bozTffVL9+/fTAAw9o+vTpGjly3d8Dp02bpl122UVvvvmmvve976VuqQEAwGYrKCjw+kt/m/Hjx7ffELZfv34dssMPP1yffPKJVq9erYyMDEWjUZWVlWnHHXeUJJWVlW30F86WlhatXbtWZWVl5rynTJmia665RhdffLFuvvnm9nugRKNR3XHHHTruuOO8PwdstPUAAHDb7D8Ttba2asaMGaqvr1d5ebkWLFig5uZmjRo1qn2aoUOHasCAAZo7d25KFhYAgG1OQusu6UnFv028sWwymdT48eM1a9Ysvfjii9phhx26nLZ3796KRqN68cUXtXLlSh177LGSpPLyclVVVWnBggXt07744otKJBLaZx/7Iry7775b9913n6666qoOQ9JHjBih999/f9M+EDYJbT0AADa2yTeWff/991VeXq6mpibl5eVp1qxZGjZsmN59912Fw2FFo9EO05eWljqveY7FYorFvrqGasOb3QEAgJ4xbtw4TZ8+XU888YTy8/Pbv88LCwvb72XRNhKhT58+mjt3ri666CJdcsklGjJk3d2SdtllFx1xxBE677zzNHXqVDU3N2v8+PE69dRTzSfzSOtuLPud73xno9ezsrLM+0hg89DWAwCga5s8EmXIkCF69913NW/ePF144YU666yz9OGHH272AkyaNEmFhYXt/za82R0AANu0LXBPFF9TpkxRdXW1Dj74YG233Xbt/x599NH2aRYuXKjjjz9eu+yyi2644QZdddVVuvXWWzvUefjhhzV06FAdeuihOvLII7X//vvr3nvv9VqGHXbYQe++++5Grz/77LPaZZddNu0DwQttPQAAurbJI1HC4bB23nlnSdLw4cM1f/583XnnnfrBD36geDyuqqqqDn+hWLFihfOa54kTJ+rSSy9t//+amhq+XAEAaNMqnxv4+9nEp/wkk/YbfvOb3+g3v/mNc5ri4mJNnz59k+Z9ww036PLLL9ell16qcePGqampSclkUv/7v/+rRx55RJMmTdL999+/STXhh7YeAABd2+ROlA0lEgnFYjENHz5cmZmZeuGFF3TSSSdJWvfXqS+++ELl5eVdvj8rK8vrkVkAAGDbcf311+snP/mJfvzjHys7O1u/+tWv1NDQoB/+8Ifq27ev7rzzTp166qk9vZjbBNp6AAB8ZZM6USZOnKgxY8ZowIABqq2t1fTp0/Xyyy9r9uzZKiws1LnnnqtLL71UxcXFKigo0IQJE1ReXs7d2gEA2Fw9OBKlJ60/Cmbs2LEaO3asGhoaVFdXp5KSkh5csm822noAALhtUifKypUrdeaZZ2r58uUqLCzUHnvsodmzZ+uwww6TJN1+++0KBoM66aSTFIvFNHr0aE2ePHmzFuxjSZEusuZm+/2vGPleHssQN/LFHjWiRu4zENlaVp/b6o3wmMbSx8hf86ixt5E3eNQ4x8hnetR4wMiv8Kjxksc0FuuWiqd71HjEyK31Vesxj4eM/EWPGj8w8kyPGk8b+Y4eNU428sc9ahxm5IUeNax9faBHDesOBe941PjcyH3OL7sbeatHDev8cb1HDeu877OPVTsyj68epFgg0LH3KCcnRzk5OT20NNuGrdnWa4rFNtrGbSorK83319XVOfO2mx+7uXsW43GrNSgFgyFnvmbNGrNGdrZ7v04k7BsapeLYyMhw/zSornadJf2Ww+ez9OrVy5lXVVWZNaz17tMZW1vr3sd8ZGa6v32KiorNGmvXuo+H4mJ3jdZWe51bx1xdnd1ijEaLnHlXx/v6rBtPZ2WFzRqFhVFn7rP/5OXlO/OMDPdxL9n7ejhsj9Bramp05g0N7lyyz2M+x2R2dle/zNfxuPrXvBn8dtt1fVloG+u87/NXp9bWrlumrmx9m9SJ8sAD7p+ekUhE99xzj+65555NKQsAALqS0DY5EkWSvvWtb5mN7rVr126lpdk20NYDAMCt2/dEAQAAW9A2ejmPtO6+KIWFPmO7AAAAtg46UQAAQFo69dRTuf8JAABIK3SiAACQzrbRkSg+184DAABsbcGeXgAAAIANJX3uUgcAALCVMRIFAIB0ltTXagRJqvg8LQAAAGBroxMFAIA01iq/x0T71gIAAMDmS9tOlNWSunpydl+P95ca+SqPGmcaeZNHjeeNfJRHjYVGPsKjxiIjt5ZTknY08sM8aiw28tM9arxo5O6nmK9ztJFnetQYaOQ++8dsI4961LA+r/XwT5+Hg1rbdrpHjWFG/ppHjdFGPs+jxgdGfopHjQ+N/JbkIWaNOwMvOfNPPZajysit5ZSkk43cZ7vkGPnnHjWOM/KHPGr0N/LFHjXGObJ6SU941ADgp6WlRS0tLZ1m4bD9TZyZ6W7GdlV7fb169XLmPiOiamtrnXleXr5ZIxaLOfOcHOtMKzU1uWvU1taZNcLhsDPPz7c/Szwed+bFxcVmDWud+twzqaCgwJkHg3YNa30kkz77R42xHCGzRjDovgNDa6u7i7ylxe5Ct7ZtZWWlWSMScbdK6+vtfbCgwL0c9fUNZo2mpkZnHo0WedRwt+RPPtlqQUn/+Ie71RCLuY8Vyd621nJKUjQadeY+28XaB63jXpL5tL21a+19zPpu8FmOPn16d5k1Nrr3nTZp24kCAAAYiQIAAJBOuLEsAAAAAACAB0aiAACQxhL//1+qagEAAGDz0YkCAEAa43IeAACA9MHlPAAAAAAAAB4YiQIAQBrjch4AAID0wUgUAAAAAAAAD4xEAQAgjXFPFAAAgPSRtp0oJ0vK6yJ71OP9k4wxNhM9xjTPMvIKj+VYZuSjU1Aj4lGjv5Ef7VHjlymocbqRv+dRw1ofPj8SBhr57z1q/NjIyzxqPG3ke3nU+I+RP2XkEz3mMT8FNfoa+U4eNZ5MwXL81sg/96hxiJH/MPCSWeNMI1/ksRzWvm6tc0nazchzPGqk4hyVaeTNHjXqPaaxvOXImlJQf3MklLrODy7nQTopKipSTnZ2p1llZaX5/u23d5/lli61zk5SVVWVM29uts8+LS3uafLzC8wa1nwCgYBZIxwOO/PCwkKzxrJl7nVWWGh/luLiYmfe0NBg1rDWRzKZNGtY62PVqtVmjV69ejnzzEz7p1R1dY0zz8mxv2mbmtzfQNY8SstKzXk01Lu3S2mpXSMz7P42DzdnmTVqaqqN5bBb2CtWrHDm8XjcrJGf39Uv0XUeeeQRs0ZxcZEzj8Xs5bD29cxMqwUlZWe7W2LBoH1xin2OsmtY5zGf4zqR6H5Lpt6xrzcax1obLucBAAAAAADwkLYjUQAAADeWBQAASCeMRAEAAAAAAPDASBQAANIYN5YFAABIH3SiAACQxuhEAQAASB9czgMAAAAAAOCBkSgAAKQxbiwLAACQPtK2E+Xn6nrhrvd4/++NluIDHjWuMvL+HjU+NnL7CeP2crznUeNtIy/2qLGXkfsME3/ayHM9arifdC6961HD+ixXeNQIGbn91HYp38if9KhxkJH3MvI3POaxxMh99sFBRj7To4a1Tp9KQY3BHjWsz3u0R42XjHwfjxpVRv4fjxrWtn3Ro4Z1PIU9asSN/HSPGtY5aJ5HDdd5vcHj/VsCl/Pgm2rZ0i8ViXT+rV5Wtp35/pUrVznzNWvWmDXKykqdeWZmjlkjHo8588rKym4vR0NDo1mjsdF9lsrIsFouUnZ2tjNPJs0SqqmpdubBoD0QPhAIOPNYrMmskZPj3nalpSVmDcm9HNZySlIo5F7v1vqSpLy8PGeekeH+SVdfV2/Oo7nZ/U3c2Gjvg+Es9zd+dXWVWcNap9XV9vqyamRlZZk1rGOusLDArFFbW+fMc3PtXz6tre5vbp9jIR5vduZ1dbVmjexs9/HkcywkjRNIcXGRRw133tBg7+vhcNf7qbW+23A5DwAAAAAAgIe0HYkCAAC4nAcAACCdMBIFAAAAAADAAyNRAABIYwml7l4mjEQBAADoHjpRAABIY9xYFgAAIH1wOQ8AAAAAAIAHRqIAAJDGuLEsAABA+mAkCgAAAAAAgIe0HYnyK0m5XWRXerz/FCMf5lFjvpF/26NGXyMf41FjlpHv41HDmk9tCmo0eNRYY+Q3e9QYaeR7e9R4wsijHjXyjbzZo8aORr7Ko4blUSM/waNGppHv61HjTiMf7FHjfSPv6pyxPuvYf9ejhrXtczxqWN72mMY6bn32H+u4vcCjxkNG7nOO+sTIj/Oo8byRj/Ko4XMu3Nq4Jwq+qcrKypSdnd1ptmzZMvP90WiRM49EImaNhgb3WTAS6Xz51peR4f6WLCgoMGtUVVU785wc+5slP989n0TCHotWWNj9Gi0t7jPNihUVZo28PPc3rc/6qK52r9NQKGTWCAatvzcnzRpZWWFn3tLSYtawVFVVOvPCwqhHlYAzzc21W1mrVrpbHllZWWaNxsYmZ25vE/vYb2xsNGuEQu75+CyHpbHR/vXU2uo+5nz2H+u47dWrt1mjsnKtM8/JsfePpib3ei+MFpo1amvcLbX8fKuV7l6nvts1bTtRAAAAnSgAAADphMt5AAAAAAAAPDASBQCANMaNZQEAANIHI1EAAAAAAAA8MBIFAIA0xj1RAAAA0gedKAAApLGkUncZjv0cCQAAALhwOQ8AAAAAAICHtB2JslpSV0/OPtbj/e4nw0v1HjWGGvkpHjX+YeRDPGrsbeQ3eNToY+Tup7qv09/I3/aocaSRn+ZRw3qiurWcklRs5CGPGrOM3FrnkjTGyD/3qNFs5Hcb+WKPebifyC5VedQYaeRlHjV2NHKfdW7tP9Z2laTzjdxnu1nrtK9HjVFGbu3nkjTYyOd71DjZyH3OLwVGfrtHjRON/C2PGjmOrNHj/VsCl/Pgm6q5uUUZGS2dZoWFheb7W1vde3QiYY/hysqKOPOioiKzRnW1u9UZiWSZNXJyXGcfqaKiwqyRkeFu1re0dL6u1xcOZzrzhgb7TFhQ4D6jR6P2OrW2XWZm2KwRCrnXRyBgllBVlXvbWutckgoKsp15PB43ayQS7nGE/fq5W7/xeMycR2ure51bx5sk5efnOfOMDPf+JUnhsPt48Vnn1v5TXV1l1ujVq7cz99tu7uUIhez1EY3mGzXsXy1ZWe512tBgtY6laDTqzH3OL8Gge1lXrljZ7eWor7c/SzDY9TiSeNz6ZfX/a3hNBQAAAAAAsI1L25EoAACAkSgAAADphE4UAADSWEKpu7FsquoAAABsq7icBwAAAAAAwAMjUQAASGNczgMAAJA+GIkCAAAAAADggZEoAACkMUaiAAAApA86UQAASGPcWBYAACB9pG0nyhOSMrvIIh7vzzfyazxqVBn5Qx41Fhl5sUeNT438Yo8ac4x8T48aUSPfy6NGTQpqWH9JvcGjxq+N3FrnklRq5GUeNUIpqDHIyF8x8q6Os01ZDp/1tcbIaz1qPG/k/TxqWJ/lHI8aS4x8oUeN94z8FI8as4zc53rNxUY+z6PGCiPv41Ejx8j7etR428iHeNSocmRp+4UJfE3V1FQrHo91mgUC9hksGHRPU1Zmf4u2trpbFZWVa80aTU2df4Y2GRlWq1SKxeLOvKTEPpPW1dU78+zsbLNGKORumeTk2DUSCfc6zcmxzviSlHSmFRUVZoXtttvOmVvrXJIyMtxn/sxMn1aUNQ+7RlZW2JnX1VmtqIA5D+uzxGLu/VySWlvd82lttbvya2vdnyUctteXtU6Li3uZNZqb3fuHddxLUmNjozMvKoqaNaqqqp15wN60isfdn6WhwX3ukKTm5mZnbh0rkn3O9jlHNTQ0OPNIxO4pcJ33QyG/u53QJgQAII0llLrLcBiJAgAA0D3cWBYAAAAAAMADI1EAAEhj3BMFAAAgfdCJAgBAGuPpPAAAAOmDy3kAAAAAAAA8MBIFAIA0xkgUAACA9MFIFAAAAAAAAA9pOxJlJ0lZXWTzPd6fb+SrPGrMM/IxHjXcT9S2c0n6h5H39ahhLet7HjU+NfIXPWr0N/IRHjWsZf2eRw1Lrsc0Bxj5Yo8azxj5Go8aJxu5dbzUeswj5DGNZY6Rn+VRY8du5pKUaeQ+x4J1/rD2c0na18irPGoM62Yu2ecPn+PaOr/4HE+TjHwvjxpNKViOzx1Zo8f7twRuLItvqnBWlrKyOm/tNTQ02O8Pd9VSXKelpcWs0dBQ78wLCgrMGolEslu5JFVXVzvzzEzr28te1sZG+ywWi8WdeV2d3WrIzAw785ycHLOGtaw5OT5ndLdg0P5bcl5enjOPx93rS5Jqamqcuc9+Gi2KOvP6evfxkkjYZ/9AIGBOY6mrcx9PxcXFZo1w2L3/dHXOWJ/1WXyOBWu7+ByTvXv3duatrfb40Egk0q1ckjLD7mX1Oa4LC93nl2DQ/rWwYkWFM8/Ots8NyaR7X/Y5rl3HbWurX0spbTtRAAAAl/MAAACkEy7nAQAAAAAA8MBIFAAA0hgjUQAAANIHI1EAAAAAAAA8MBIFAIA0llTqbghr394SAAAALnSiAACQxricBwAAIH1wOQ8AAAAAAIAHRqIAAJDGEkrd5TypqgMAALCtSttOlOWSwl1ke3m8f5mRN3jUqDfyXI8aZUZe61FjTyPv61Gjq3XZpo9HDWsY+GCPGqVGPjcFNfb3qPFAN+chSVVG/j2PGh8auc+2fc7IDzLyKo957GTk0z1qVBj5Ph413jDy9zxq5Bj5Ko8a1nZ52qPGjz2msVj7z1MeNQqN/ACPGtb54388aqTiPGed961zujVNk8f7AfhrjjcrFAx1mmVnW2drqbm52ZknEna3oTVNMGgP2s7MzOz2cmRnZ3drHpIUCASceUaGT7PffeekcDjLrGAta329fTa2ljUvz26Fr1mztlvzkKREwt36zcmxl6Opyf3t4bNta2vcvxjy8/OceWurfTFnOMu9bSvXVpo1Wlrcx2Rurr2+rP2jsbHRrGEdty0tLWYNa7vU1taYNcLhXuY0Fmv/qampNmuEQp2fZ9vk5rr3H0nKyHCvjxUrVpg1IpHun+e29Hk/kfT7c1PadqIAAADuiQIAAJBO6EQBACCN0YkCAACQPrixLAAAAAAAgAdGogAAkMa4sSwAAED6YCQKAAAAAACAB0aiAACQxrgnCgAAQPqgEwUAgDSWUOo6P7icBwAAoHu61Ynym9/8RhMnTtRFF12kO+64Q9K6Z1lfdtllmjFjhmKxmEaPHq3JkyertLR0k2rfJCm/i+xRj/dvb+T7eNRwP5VbmuNRY5iRv+lRY38jf8ajxvtGXuZRY08jr/Co0d/IrXUuSaON/HaPGkcb+YceNT438hyPGvsa+RKPGm8ZufvJ8NI8j3m8Z+TLPGpcYuSfetSwjtuBHjXmGvkgjxrWsbDWo0ZtN3PJXh8neNSw9nWf/djaP3yOJ+vccL9HjYlGbh2zknvbxTzeD3yTbMl2niT17dtXOTnZnWZr11aa78/MzHTmubm5Zo1Ewt21WFdXb9aIRCLOvKHBrmEta01NjVmjqanRmWdkuNeXJGVnd7492gQCLWYNa7skk3Z3bn5+gTNftWqlWaOgwF2jqcludTY3x515MGjfGcHattY8JKmhocGZBwLub+v6evf7JSnU4N5/mpubzRp9+pQ481jM/ibNzXV/lnA4y6xRV1dn1AibNaxjoaXFPhZaW937emur/ScSa31Eo4VmjcZG977usx83Nrr3oVjMPp6s9b5mzRqzhvVdE4/bx5Nr2/lsV6kb90SZP3++/vCHP2iPPfbo8Poll1yiJ598Uo899pheeeUVLVu2TCeeeOLmzgYAgG1aIsX/NsWkSZO09957Kz8/XyUlJTr++OO1cOHCDtNUVFTojDPOUFlZmXJzc7XXXnvpb3/7W4dp1q5dq7Fjx6qgoEDRaFTnnnuu2chFz6KdBwBA5zarE6Wurk5jx47Vfffdp6KiovbXq6ur9cADD+i2227TyJEjNXz4cE2bNk1vvPGG3nzTZ8wFAABYX2uK/22KV155RePGjdObb76p5557Ts3NzTr88MNVX//VX9bPPPNMLVy4UP/4xz/0/vvv68QTT9Qpp5yid955p32asWPH6t///reee+45PfXUU3r11Vd1/vnnb87qwFZAOw8AgK5tVifKuHHjdNRRR2nUqFEdXl+wYIGam5s7vD506FANGDBAc+dag+gBAEA6efbZZ3X22Wdr11131Z577qkHH3xQX3zxhRYsWNA+zRtvvKEJEybou9/9rnbccUf96le/UjQabZ/mo48+0rPPPqv7779f++yzj/bff3/dfffdmjFjhpYt87kYEFsb7TwAALq2yfdEmTFjht5++23Nnz9/o6yiokLhcFjRaLTD66Wlpaqo6PyOGbFYrMP1cT7XfAIAsK3YnMtwXLWkjb9rs7KylJVlX2deXV0tSSouLm5/bd9999Wjjz6qo446StFoVH/961/V1NSkgw8+WJI0d+5cRaNRjRgxov09o0aNUjAY1Lx583TCCT5378HWkup2nkRbDwDwzbJJI1GWLFmiiy66SA8//LB5Ey1fkyZNUmFhYfu//v2t2wsCAIDu6N+/f4fv3kmTJpnvSSQSuvjii7Xffvtpt912a3/9r3/9q5qbm9WrVy9lZWXpggsu0KxZs7TzzjtLWvfDu6Sk480GMzIyVFxc7Pzhja1vS7TzJNp6AIBvlk3qRFmwYIFWrlypvfbaSxkZGcrIyNArr7yiu+66SxkZGSotLVU8HldVVVWH961YsUJlZZ0//2XixImqrq5u/7dkic/zSAAA2DZsiXuiLFmypMN378SJ1rON1l3i8cEHH2jGjBkdXr/66qtVVVWl559/Xm+99ZYuvfRSnXLKKXr/feu5cEg3W6KdJ9HWAwB8s2zS5TyHHnroRo2ic845R0OHDtUvfvEL9e/fX5mZmXrhhRd00kknSZIWLlyoL774QuXl5Z3W9B1CDADAtmhzbgjrqiWte/Sn9fjP9Y0fP779hrD9+vVrf/2TTz7R73//e33wwQfaddddJUl77rmnXnvtNd1zzz2aOnWqysrKtHJlx8eRtrS0aO3atc4f3tj6tkQ7T6KtBwD4ZtmkTpT8/PwOQ3ildc8+79WrV/vr5557ri699FIVFxeroKBAEyZMUHl5ub73ve+lbqkBAMAWl0wmNWHCBM2aNUsvv/yydthhhw55Q0ODJCkY7DiwNRQKKZFYdweW8vJyVVVVacGCBRo+fLgk6cUXX1QikdA+++yzFT4FfNHOAwDAtsk3lrXcfvvtCgaDOumkkxSLxTR69GhNnjx5k+v8XVJ2F9mHHu/P7GYuSdbVwBd61LjUyD/2qBE18hFGLklTjPw4jxo7djOXpGeM3Gfw9+5Gvq9HDWsgca1HDeuK7r09alj7ss+A5yFGXmzkPj9hFhp5yKOGtU59Ho7Zy8gf8ahhHfvf9qjxQyMfmYLl8LljgLVdrFyS6o38c48aA438Ro8a1r5+gEeNx43c55hc48jiHu/fErbEjWV9jRs3TtOnT9cTTzyh/Pz89nuYFBYWKjs7W0OHDtXOO++sCy64QLfeeqt69eqlv//97+2PMpakXXbZRUcccYTOO+88TZ06Vc3NzRo/frxOPfVU9e3bN0WfDFtLqtp5klRVVdXhhrPra2pqMt8fDAaceSDgztfVcF/Z3qdPH7PG0qVfOvOuPmPH5XB/k+bk5Jg11qxZ7cxLSwvNGtaIIZ8RRTU11c68sdHetpFIV78C1snJyTVrNDc3O/O2jl6XzMywezly7e3SZHxeYzEl2es9FHLvP7k+y9lk76eW1lb3uMnmZvubNBRy/zxdu3atWcM6N1j7lyR9/vliZ56Xl2/WsM5B4bB7/5Ls7eKz3ax9PR63t4u1rNttt51ZIx537+y5ufZxveHlpBvyOVe69tOEsQ+36XYnyssvv9zh/yORiO655x7dc8893S0NAAB60JQp67rg256002batGk6++yzlZmZqaefflpXXnmljjnmGNXV1WnnnXfWn/70Jx155JHt0z/88MMaP368Dj300PYf4HfdddfW/CjYTLTzAADoKOUjUQAAQOoklLp7omzqSJRkMmlOM3jwYP3tb39zTlNcXKzp06dv4twBAADSD50oAACksS1xY1kAAABsnk16xDEAAAAAAMC2ipEoAACksZ68sSwAAAA6YiQKAAAAAACAB0aiAACQxrgnCgAAQPpI206UBnU97Hiwx/ujRv6hR40RRn6/Rw3rCeIHedTINPKGFCyHxyPqtaOR/8SjxulGvrtHDesJ4m971NjLyO0njEtDjfwmjxrW5y32qGFtlyVGXuAxj/8YubUuJHsf7O9RwzrmLvGoMcvI13jUmGjkCz1q9DVyn3X6qJH38ahRY+R7etSwprGON8k+Jw/xqGHtQz4dCNs7spjH+7cELufBN1UikVQi0fleGYlkme8PBkPOvKmpyayRk+P+xl+zZnW3lyM3N8+jRsCZd7WeNmU5JPtpW1lZ7vW+ZMkXZo2iInfrJRLJNmsEg+7B8o2NjWaN7Gz3fKx5SPZ+uKKiwqOGezlCIfvnWFZW2Jk3N7tb8va+IcVi7uMlKyti1giF3PMJh92fQ5LWrHG3xEpK7NZNVVW1M29ttVsEJSWlzjwWs1sFmZnuX3GRiL1OKysrnXlGhr3/JBLuz2sdKz7TWOdSSWpqWuvMfdaHfS60z3Ou7dLisW9IXM4DAAAAAADgJW1HogAAAC7nAQAASCeMRAEAAAAAAPDASBQAANIYI1EAAADSB50oAACksaRSd0NY+3ZrAAAAcOFyHgAAAAAAAA+MRAEAII1xOQ8AAED6YCQKAAAAAACAh7QdiVIrqbmLbJDH+2838jM9auxu5J961FjVzXlI0nwjb/CoMczIMz1qPG7kJ3vU+NDI13rUqDDyIR41lhm5tb4kKcfIyzxqWJ+lj0cNa51Zy+Gzzo808tc8amQZuXWsSFKTkT/lUeMNIx/oUeMhIz/ao8YHRr63Rw1rmhc9aowwcuuYlezj6SaPGiON/G2PGiEjt45ZSTrckdVLusWjRqoxEgXfVK2JVrW2dr5XhsNh8/2rVrm/OYqLi80a2TnZzry6Km7WaGlpceZ5eXlmjYYGd2sukbDvjBSJRIwpAmaNqqpKZ15YGDVrNDW5v62t9eUzTSRitSqklpaufkm01bDWlxQMuv/enJFht6Cbm93LkZFh/xzr6jjxXQ6fdZ6fX+DM6+vrzRrBoHsfa2mx/36fTLr39erqGrOGtaw+55fKSutYcK8vSWpsbHTmObl2yyQnxz1NXV1tt2tYx6xk78cVFdavGikvL9+ZW+dBSQoE3PuYdcxKUkFB19suM9PnV3Ead6IAAIB1N5VN1Y1lU1UHAABgW8XlPAAAAAAAAB4YiQIAQBrjch4AAID0wUgUAAAAAAAAD4xEAQAgjXFPFAAAgPRBJwoAAGmMy3kAAADSB5fzAAAAAAAAeEjbkSirJHX1BO85Hu/v081csnuYXvGocbmR3+pRY7yR9/Wo8YiRP+RR42gjf8ujRqmRV3nU2NPI+3vUsJ6GvsyjxmIjH+xRY6mRn+hRY7aR7+xRw7LEyN1PfV9nqJFHPGqUGfldHjXON/JFHjX2MfJVHjWsz/u2Rw1rVIHPPhg18uM8aqw18pkeNXY38v/xqHGFkfusj+cdmXXe2FISSt0IEi7nQTppbWlRS0tLp1l9fb35/owMdzPWyiUpoIAzr6urM2uUlJQ485UrV5o1+vTp7cwzM7tqFX9l7Vr32biystKsUVhY4MwbGhrMGpmZmc48kbDPaNnZ2d2ahyQlk0lnHo83mzXi8bgzz8rKMms0N7vnEy2KmjVqqmuceSTS/b+LW8sZCtnzyMpyt26CQffxJkmZmcXOfNUqu5XVu3cvZ97UFDNr5ObmOPOuzl3rCwTc66zR43gydmOFw/Y+GAyGnHlhYaFZo6XFfdxWV9utpEjEfVyvWmWfK0tK3L8mfY7Jmpquj6fGJr/WHiNRAAAAAAAAPKTtSBQAAMCNZQEAANIJnSgAAKSxVqVu2Cg3lgUAAOgeLucBAAAAAADwwEgUAADSGCNRAAAA0gcjUQAAAAAAADwwEgUAgDTGjWUBAADSB50oAACkMS7nAQAASB9fy06UQzymCRv5Io8azxv5KI8a9UZ+pEeNVUb+tkeNIR7TWPoY+c0eNa438tM9ajxl5LUeNXoZ+aceNax1+rFHDWvb+eynJxj5l0ae6TGPwUae71HjUSOPeNSw9kFrXUjSv4z82BQsx0KPGiEj9zmeyo38OI8a1vnlLY8aOxr57GTSrPGjQMCZW59Vso/9QR417nVkzR7vB5Aa+fl5HlO5zxuxWMysUFvrPnPk59vfcImEe4xXQUGBWaO5ucWZNzQ0mjUiEZ9vUreMDPdPg6qqFWaNsrIyZ15UVGzWqK6uduatrXaXsPVZ4vG4WSMSyXLmPvtYY2NDt2tEo4XOPB53f0MFjO9YScrKcn/Wlha7O7+qqtJYDruGtd0KC6NmjZoa93FdWOhen+uWw91S89lu1jmqosI+nnJzc525z2dpaXGfX6qra8wa1v7x85//3Kxx++13OHPrs0r2sR/OsnoBpDVrVneZNTU1me+XvqadKAAAbCu4nAcAACB9cGNZAAAAAAAAD4xEAQAgjSWUunuZMBIFAACge+hEAQAgjbXKuqp602oBAABg83E5DwAAAAAAgAdGogAAkMa4sSwAAED6YCQKAAAAAACAh7QdidJbUldPo+7v8f5FRt7Xo4b1FPt8jxrW064/9qjxlJGf7FHjPSN3P019nX8Z+V88arifYi8t9qiRaeS7e9R4w8gv9qhhPQ29j0eNy4zcWl+SNM/Iy4z8XY95bG/k9R41Rhr5hx41qozcOmYl6UqPaSz/MPIqjxpWD/ZYjxrWcbs2BTX29KhRZeSjA/YdPaJGPsxjOSJG/olHDdf5tFHSbI8aqcY9UfBNFcrIUEZG503RzMyw+f5YLObMMzOtFoOUkRFy5sGgO183jfuMbi2nJNXUVDvzwsKoWaOlpcWZt7baZ4CaGve3wsCBA80ayWTSmcfjcbNGMOg+62VnZ5s16uvdrZOSkhKzxtKlS515V/vvpswnkXCvL0lqaGjo1nL47IPW8ZJI2GMZ8/Lcv46amprMGtZ+ah2zklRaWmpOY6mudh+TPseT1fwpLi4ya7S2ute7ddxLUiLhXtacHPt4amlx1/jd735n1giF3NsuErFacvb5Nu6xr7vOp+Fwo/l+KY07UQAAAJ0oAAAA6YTLeQAAAAAAADwwEgUAgDTGjWUBAADSB50oAACkMS7nAQAASB9czgMAAAAAAOCBkSgAAKSxpFJ3GY79DAgAAAC4MBIFAAAAAADAAyNRAABIY6m8jwn3RAEAAOietO1E+UxSZhfZjh7vf9zIL/Oo8Z6R7+NR4yYjv9yjRtTIX/GocbeRP+lR4y0jX+NRY5yRX+FRY08jL/WocZCRr/WocaSRF3vUWGbkvTxqfG7kHxu59Tmkro/FNtbnkKRhRv6pR42okX/pUcPatn09apQb+TMeNRYZ+WCPGmVG7nNMfmDkOR41mj2msVjH9TyPGpcYecSjxipHFvd4/5ZAJwq+qZrjMYWCnd82ORwOm++vqqpy5iUlJWaNxsaYM8/Jsc+CK1ZUdHs5QqGQM6+rqzNr9Ovfz5nXVFebNRoaGpx5a2uLWWPJEve3cWmpvT4ikWxnnplptUykvLw8Z97SYn+WgoICZ25tN0mKx93fkhkZ9s+xeNz9DRSLufdj63NIUiDgvoV5c7P9bR+JuL9preWU7G1rrU/J3k8zM+3zS26u+9ivqak1a1ifNxzOMmtkZLjXR2vr/2vvfkPjqvc8jn+STmcmTTNpU22muWlsLhaluA1ramrwgWCCxSti1Yc+COp95FQa80yWWnYRUhQuWinqRZCFvbVSIYqCaKg1ItvWmm6gig0Kudd42yS37bb500wymTn7INthszbn+zNzkjlT3y8oNPOdfud3vnPOmW9+PWd+9if79PS0b7y83OXmlMJvCK6o8D+up6b8zz+StHHjrb7xsjJ7W/yPfbft5HYeAAAAAAAAB6G9EgUAAMx/qWxQSxwH9QW1AAAAv1VciQIAAAAAAOCAK1EAAAgxvhMFAAAgPJhEAQAgxJhEAQAACA9u5wEAAAAAAHDAlSgAAIQYXywLAAAQHiU5ieJy+czrRvzvDjmsy55dcmw14ucccgRxuVCvEf+DQ45/MuJphxwvGvG/OuQYCWAcZ4x40iHHP4z4Nocco0Z8g0MOaz+0joWrDq/hv0K99J8OOax9vcMhx5+N+IMOOXqMeJNDjt8bcf8V7Of90YgPOOSw9p9ZhxyXjLjLtljH9b855NhixP/LIcd/GPFCJxBc6gkgGGVl9tRhfX29bzyTyTi8kucbnZuzc8RiMd94Oj3jMI7CTYxP+MYTiWozRzxe4RvP5ewzaTLp30XNztpn00xmzjfuef7vmyRNT1/zjUciVncjzc35jyMejxecIxKxfx2z9mXrWMhm7Zs5rWNuamrKzHHp0kXfeE1NjZnj4kX/ziSRqDJzXLni391WVPjv55IUi0V94y7v24Zb/Dv56WvTZg77PGYfC9b777ItmzZt8o1fuHDBzBGN+tf0mkM9Ll/+b9+4y7nBTzrt8ptkiU6iAADwWxHk1SNciQIAAFAYJlEAAAgxJlEAAADCgy+WBQAAAAAAcMCVKAAAhFhWLnc8u+FKFAAAgMJwJQoAAAAAAIADrkQBACDEuBIFAAAgPJhEAQAgxPhiWQAAgPDgdh4AAAAAAAAHob0SpVFSbJHYcYd/v9qIr3PIsdOIf+WQ4w4jvsUhx4gR/2eHHBkj/qlDjn8UGJekCSPe5JDDUunwnG1G3GVbaox4lUMOaxbzc4ccdxtxqx6fOLzGJSP+e4ccfzPiLzvk+JMRP+eQ4zYjbm2rZB8v/+KQo8+Ipx1yWHW3zj+SNGrErf1ckt4x4ta5VJL+3YgPOuT4VyPucp57zCd2TdJfHHIEjdt5cLNaHY0pGr1xtzcxYXUMUnl5mRFfZeZYs8b/U3JyctLMEY/HfePRaNTMkcn4d2pr1lSYOTzP/0wxPj5u5pibmysoLkm5XNY3Ho/b22IpL7f/H9h6X1y2JRLx34dcxmGZnLT39YoK/5qVr/Ifh8t7n8361yMWs/fj2dlZ3/jo6JiZ43f1v/ONp6ftDsk65qxtlaSLF/1rVlubNHNMTvifP3I5+1M5FlvsN+J51n4uSZmM//ZGIvaUwKVL/h1yZaX9G9jly5d94zMz9nubTG7yjbvs6+vWrVs0Nj09bf57iStRAAAAAAAAnIT2ShQAADB/9UhQV6IElQcAAOC3ikkUAABCLCfJ/6YFd0yiAAAAFIbbeQAAAAAAABxwJQoAACGWFVeiAAAAhAVXogAAAAAAADgI3ZUo15dnm/F5jv/iWf+bx4j75b/OWuDIZRzWQk3XAhiHy7a4LJdqsV7HpR7WUstBjDOImq7UOKzXCWJftxZndNlW6713yWFti73YnL0tQdTcf2HGedZ+bC+IGcxxbW2vyziCeG+t2XiX98Wqqcv7Yr2Oy/Hkl+N6zFpGNGhciYKbzfVjKJ1e/AyTMZZKlewljssclji2jme/MeZzGHGXZUytJUhnM/anQiTicqb0Zy37mw1giWMvsDOaP2sZ27ls4fXKZu33Nj3j/95l56xPQMn6FLhmLMs67bAfW/VyWQbXOm5nZuzj2tqWGYcljmeNJcNdPg2tY99lKdxpY6w5z95/rPNHzqEnsbbF5VgoL/Pv9lyWDLfGMTNrn+esurucs/1yXD9WrM+GMm+lu0HDzz//rM2bNxd7GAAA3NDw8LDq6+uX/XXS6bQaGxs1MjISaN5kMqmhoSHF4/FA8wKu6PUAAGFm9Xqhm0TJ5XI6f/68qqqqVFY2P+s6Pj6uzZs3a3h4WIlEosgjLH3UM3jUNHjUNHjUtDCe52liYkJ1dXUqL1+Zu2HT6bRmHf5H/teIRqNMoKCo/n+vx7kpeNQ0eNQ0eNQ0WNSzcK69Xuhu5ykvL1901ieRSLBDBIh6Bo+aBo+aBo+aLl11dfWKvl48HmfCAzedxXo9zk3Bo6bBo6bBo6bBop6Fcen1+GJZAAAAAAAAB0yiAAAAAAAAOCiJSZRYLKb9+/crFosVeyg3BeoZPGoaPGoaPGoKIIw4NwWPmgaPmgaPmgaLeq6c0H2xLAAAAAAAQBiVxJUoAAAAAAAAxcYkCgAAAAAAgAMmUQAAAAAAABwwiQIAAAAAAOAg9JMohw4d0pYtWxSPx7Vz5059/fXXxR5Syfjyyy/1yCOPqK6uTmVlZfrggw8WxD3P04svvqhNmzapoqJC7e3t+uGHH4oz2BLQ3d2te+65R1VVVdq4caN2796twcHBBc9Jp9NKpVLasGGD1q5dqyeeeEKjo6NFGnH4vfHGG9q+fbsSiYQSiYRaW1v1ySef5OPUs3AHDhxQWVmZOjs7849RVwBhQq+3dPR6waLXCx693vKizyuOUE+ivPfee+rq6tL+/ft15swZNTU1adeuXRobGyv20ErC1NSUmpqadOjQoRvGX375ZR08eFBvvvmmTp06pcrKSu3atUvpdHqFR1oa+vr6lEqldPLkSfX29iqTyejBBx/U1NRU/jnPP/+8PvroIx09elR9fX06f/68Hn/88SKOOtzq6+t14MAB9ff365tvvtEDDzygRx99VN99950k6lmo06dP66233tL27dsXPE5dAYQFvV5h6PWCRa8XPHq95UOfV0ReiLW0tHipVCr/czab9erq6rzu7u4ijqo0SfJ6enryP+dyOS+ZTHqvvPJK/rErV654sVjMe/fdd4swwtIzNjbmSfL6+vo8z5uv3+rVq72jR4/mn/P99997krwTJ04Ua5glZ/369d7bb79NPQs0MTHhbd261evt7fXuv/9+b+/evZ7nsZ8CCBd6veDQ6wWPXm950OsVjj6vuEJ7Jcrs7Kz6+/vV3t6ef6y8vFzt7e06ceJEEUd2cxgaGtLIyMiC+lZXV2vnzp3U19HVq1clSTU1NZKk/v5+ZTKZBTW988471dDQQE0dZLNZHTlyRFNTU2ptbaWeBUqlUnr44YcX1E9iPwUQHvR6y4ter3D0esGi1wsOfV5xRYo9gMVcvHhR2WxWtbW1Cx6vra3VuXPnijSqm8fIyIgk3bC+12NYXC6XU2dnp+677z7dddddkuZrGo1GtW7dugXPpab+zp49q9bWVqXTaa1du1Y9PT3atm2bBgYGqOcSHTlyRGfOnNHp06d/EWM/BRAW9HrLi16vMPR6waHXCxZ9XvGFdhIFCLNUKqVvv/1WX331VbGHUvLuuOMODQwM6OrVq3r//ffV0dGhvr6+Yg+rZA0PD2vv3r3q7e1VPB4v9nAAAChJ9HrBodcLDn1eOIT2dp5bbrlFq1at+sU3CY+OjiqZTBZpVDeP6zWkvr/enj179PHHH+v48eOqr6/PP55MJjU7O6srV64seD419ReNRnX77berublZ3d3dampq0muvvUY9l6i/v19jY2O6++67FYlEFIlE1NfXp4MHDyoSiai2tpa6AggFer3lRa+3dPR6waLXCw59XjiEdhIlGo2qublZx44dyz+Wy+V07Ngxtba2FnFkN4fGxkYlk8kF9R0fH9epU6eo7yI8z9OePXvU09Ojzz//XI2NjQvizc3NWr169YKaDg4O6qeffqKmv0Iul9PMzAz1XKK2tjadPXtWAwMD+T87duzQk08+mf87dQUQBvR6y4te79ej11sZ9HpLR58XDqG+naerq0sdHR3asWOHWlpa9Oqrr2pqakpPPfVUsYdWEiYnJ/Xjjz/mfx4aGtLAwIBqamrU0NCgzs5OvfTSS9q6dasaGxu1b98+1dXVaffu3cUbdIilUikdPnxYH374oaqqqvL3FVZXV6uiokLV1dV65pln1NXVpZqaGiUSCT333HNqbW3VvffeW+TRh9MLL7yghx56SA0NDZqYmNDhw4f1xRdf6NNPP6WeS1RVVZW/d/u6yspKbdiwIf84dQUQFvR6haHXCxa9XvDo9YJFnxcSxV4eyPL66697DQ0NXjQa9VpaWryTJ08We0gl4/jx456kX/zp6OjwPG9+6bt9+/Z5tbW1XiwW89ra2rzBwcHiDjrEblRLSd4777yTf8709LT37LPPeuvXr/fWrFnjPfbYY96FCxeKN+iQe/rpp73bbrvNi0aj3q233uq1tbV5n332WT5OPYPxf5e+8zzqCiBc6PWWjl4vWPR6waPXW370eSuvzPM8byUnbQAAAAAAAEpRaL8TBQAAAAAAIEyYRAEAAAAAAHDAJAoAAAAAAIADJlEAAAAAAAAcMIkCAAAAAADggEkUAAAAAAAAB0yiAAAAAAAAOGASBQAAAAAAwAGTKAAAAAAAAA6YRAEAAAAAAHDAJAoAAAAAAIADJlEAAAAAAAAc/A8hTWoVqomLagAAAABJRU5ErkJggg==", - "text/plain": [ - "
" + "cell_type": "code", + "source": [ + "# EDIT: Parameters for visualizing NBR\n", + "s2_params = {\n", + " \"bands\": [\"NBR\"], # NBR band\n", + " \"min\": -1, # Min value for NBR\n", + " \"max\": 1, # Max value for NBR\n", + " \"palette\": [\"blue\", \"white\", \"green\"], # Color palette for NBR (blue = burned, green = vegetation)\n", + " \"dimensions\": 512,\n", + " \"region\": poi\n", + "}\n", + "\n", + "# Generating an image list for s2 data\n", + "s2_image_list = s2_dataset.toList(s2_dataset.size())\n", + "\n", + "# Selecting the images with decent quality\n", + "# To access all the scraped images, replace the following objects:\n", + "# interesting_images = range(s2_dataset.size().getInfo())\n", + "interesting_images = [5, 9, 11, 12, 15, 18, 26]\n", + "\n", + "for i in interesting_images:\n", + " try:\n", + "\n", + " # Extract the timestamp string\n", + " s2_property = s2_image_list.get(i).getInfo()\n", + " timestamp_str = s2_property[\"properties\"][\"system:index\"].split(\"_\")[0]\n", + "\n", + " # Convert to datetime object\n", + " datetime_obj = datetime.strptime(timestamp_str, \"%Y%m%dT%H%M%S\")\n", + "\n", + " # Make the datetime timezone-aware (UTC)\n", + " dt_utc = datetime_obj.replace(tzinfo=ZoneInfo(\"UTC\"))\n", + "\n", + " # Convert to Pacific Time\n", + " pacific_tz = ZoneInfo(\"America/Los_Angeles\")\n", + " dt_pacific = dt_utc.astimezone(pacific_tz).strftime(datetime_format)\n", + "\n", + " print(f\"Image #{i} / Date: {dt_pacific} PST/PDT\")\n", + "\n", + " s2_image = ee.Image(s2_image_list.get(i))\n", + " s2_url = s2_image.getThumbUrl(s2_params)\n", + " display(Image(url=s2_url))\n", + "\n", + " except:\n", + " pass" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 176 + }, + "id": "y6RumP9WIzNd", + "outputId": "aae646f3-813f-4cfb-d3f1-b0ea9be30afb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "WARNING:googleapiclient.http:Sleeping 1.31 seconds before retry 1 of 5 for request: POST https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/value:compute?prettyPrint=false&alt=json, after 503\n" + ] + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Image #5 / Date: 2021-06-26 11:59:19 PST/PDT\n", + "Image #9 / Date: 2021-06-29 12:09:19 PST/PDT\n", + "Image #11 / Date: 2021-07-01 11:59:21 PST/PDT\n", + "Image #12 / Date: 2021-07-01 11:59:21 PST/PDT\n", + "Image #15 / Date: 2021-07-06 11:59:19 PST/PDT\n", + "Image #18 / Date: 2021-07-09 12:09:19 PST/PDT\n", + "Image #26 / Date: 2021-07-14 12:09:21 PST/PDT\n" + ] + } ] - }, - "metadata": {}, - "output_type": "display_data" }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of fire pixels detected: 0\n" - ] - } - ], - "source": [ - "# Visualize results\n", - "fig1, (ax3, ax4) = plt.subplots(1, 2, figsize=(12, 5))\n", - "\n", - "im2 = ax3.imshow(image_11um, cmap=\"hot\")\n", - "ax3.set_title(\"Simulated 11μm Channel\")\n", - "plt.colorbar(im2, ax=ax3, label=\"Temperature (K)\")\n", - "\n", - "ax4.imshow(image_11um, cmap=\"gray\")\n", - "ax4.imshow(fire_detections, cmap=\"Reds\", alpha=0.5)\n", - "ax4.set_title(\"FDC Algorithm Fire Detections\")\n", - "\n", - "plt.tight_layout()\n", - "plt.show()\n", - "\n", - "print(f\"Number of fire pixels detected: {np.sum(fire_detections)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "pFhtnzFIjgJD" - }, - "source": [ - "### Data Transformation: Applying the Fire Detection Algorithm (FDC)\n", - "\n", - "There are additional steps associated with the algorithm such as estimating its **fire radiative power (FRP)** which represents the brightness or intensity of a fire in the confirmed pixel. From there, the algorithm then assigns a confidence value towards the probability of an actual fire being reflected from the pixel and plots it on a map to build a fire perimeter.\n", - "\n", - "For the sake of brevity, we can cover the complexities behind these confidence values in a future article so for now, take these explanations at face value. At this point in the code, we are now assigning `confidence_values` between 50-100% to the outputs produced by the algorithm. With a single output, if the algorithm returns a value of `15`, it's classifying it as a low probability fire pixel at 50% and in contrast, if it returns a value of `10`, there's a near 100% probability that it is a processed fire pixel (Restif & Hoffman, 2020). The resulting values from this process are captured in the `goes_16_confidence` and `goes_17_confidence` objects in the following code." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 17 + "cell_type": "markdown", + "source": [ + "### Data Transformation: Applying Normalized Burn Ratio (NBR) layers from extracted images\n", + "\n", + "Now that we've extracted our raw images, we can see how difficult it is to spot activity from the naked eye. This is where the importance of spectral bands comes into play. Since Sentinel-2 is capable of gathering data from shortwave infrared (SWIR) and near-infrared (NIR) bands, we can use a combination of the two to transform our image data and give us a better understanding of the area that's been burnt (or burning).\n", + "\n", + "What we're describing here is a **normalized burn ratio (NBR)** which uses the following formula to identify the burned areas in a particular and visually quantify the severity of the burn:\n", + "\n", + "$$ NBR = (NIR - SWIR) / (NIR + SWIR) $$\n", + "\n", + "The NBR formula uses the difference between NIR and SWIR reflectance, normalized by their sum, to quantify burned areas based on the numerical values we observe from the NIR and SWIR bands (United Nations, n.d.). Without going too deep into the maths, let's briefly describe the purpose of each underlying band.\n", + "\n", + "**Near-infrared (NIR)** light is often reflected the more healthier or greener the vegetation is on a given land surface. In areas that have been burnt, we'll see less of this spectral wave reflected from the Earth's surface (United Nations, n.d.).\n", + "\n", + "On the other hand, **short-wave infrared (SWIR)** light is reflected based on the moisture content of the underlying surface. Areas with high moisture, and presumably healthier vegetation, tend to absorb this spectral wavelength which means less of it is reflected and picked up by our satellites (United Nations, n.d.). In contrast, drier areas will reflect higher levels of SWIR light since there is less capability to absorb it.\n", + "\n", + "The contrast between these two bands helps us easily distinguish between areas with healthy and burnt vegetation in addition to the severity of the burn (United Nations, n.d.). The resulting NBR values we can observe from this equation range from -1 to 1 where:\n", + "\n", + "- Negative values often indicate bare ground or recently burned areas\n", + "- Values close to zero indicate urban or water areas\n", + "- Positive values typically represent vegetated areas" + ], + "metadata": { + "id": "q-WxjFbC9-CR" + } }, - "id": "Hin2lrkHYshb", - "outputId": "d642a02e-c333-4236-8512-2b461d473106" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "code", + "source": [ + "# Function to calculate NBR\n", + "def calculate_nbr(image):\n", + " \"\"\"\n", + " Calculate the Normalized Burn Ratio (NBR) for a given satellite image using the Near-Infrared (NIR) and Short-Wave Infrared (SWIR) bands,\n", + " typically used for burn severity assessment in wildfire studies.\n", + "\n", + " NBR = (NIR - SWIR) / (NIR + SWIR)\n", + "\n", + " The resulting value typically range from -1 to 1, where:\n", + " * Negative values often indicate bare ground or recently burned areas\n", + " * Values close to zero indicate urban or water areas\n", + " * Positive values typically represent vegetated areas\n", + " \"\"\"\n", + " nbr = image.normalizedDifference([\"B8\", \"B12\"]).rename(\"NBR\")\n", + " return image.addBands(nbr)" ], - "text/plain": [ - "" + "metadata": { + "id": "NtWbuiUxwyAl", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "8f0fd659-b457-43d5-a1c7-09b183b01447" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Conversion from mask codes to confidence values.\n", - "fire_mask_codes = [10, 30, 11, 31, 12, 32, 13, 33, 14, 34, 15, 35]\n", - "confidence_values = [1.0, 1.0, 0.9, 0.9, 0.8, 0.8, 0.5, 0.5, 0.3, 0.3, 0.1, 0.1]\n", - "default_confidence_value = 0\n", - "\n", - "# Processing the GOES-16 satellite images\n", - "goes_16_confidence = goes_16.select([\"Mask\"]).map(map_from_mask_codes_to_confidence_values)\n", - "goes_16_max_confidence = goes_16_confidence.reduce(ee.Reducer.max())\n", - "\n", - "# Processing the GOES-17 satellite images\n", - "goes_17_confidence = goes_17.select([\"Mask\"]).map(map_from_mask_codes_to_confidence_values)\n", - "goes_17_max_confidence = goes_17_confidence.reduce(ee.Reducer.max())" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "iiq-Rd_SmZEQ" - }, - "source": [ - "### Data Visualization\n", - "\n", - "Now, one last thing. Since the satellites collect data over a specific time range, the probability of a fire in a given pixel may vary greatly due to the evolving nature of the on-ground event. Although the temporal aspect of the data itself contains plenty of valuable information, in this instance, we're more concerned with generating a broad outline of the fire boundary. To do so, we can use the `ee.Reducer.max()` function to return the highest confidence value of each pixel within the specified time range (Restif & Hoffman, 2020). We'll apply this to both the `goes_16_confidence` and the `goes_17_confidence` objects before overlaying the specific pixel plots on our map below." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 621, - "referenced_widgets": [ - "9470415a9dc44809940f3c967e24de34", - "385ae06f43094e4e97e9dce81756621c", - "04ac8eb0c97a48adaa2589588bd6a481", - "e464f2d84e484efaa405e812e423e541", - "f7d1501fcbb24550b305c1e857824d96", - "ab51866f1a11495eb0e2ec95039082dc", - "b2856e01a3854c30a01268d6d847a4da", - "02d2ce2c1d094866b5d3370f6e917f53", - "83a930218ccf459da373a6162244ff3e", - "8e5b9cb56d904a299c1146c05f720cde", - "02f4a049e36e4963bc8446e3fc80a4a2", - "8380126b3a7b4110a82fdec0a7f0833b", - "93a7ffc87ec546ccb7f5ea8dffb53b23", - "a208756ef0614a63a2f2bc7e060b22de", - "93849482fcc94f20b3e1abc8b73c6915", - "5ab5ad8185c249229caaf19d8808d04e", - "7f3796cf17e044679c73ce6513c249c3", - "9156829da21a4f7797d7fad70631365f", - "3c16f5b1ab8f4af98c27a2b618303549", - "2f084073179c49efba19584acd27a353", - "c26e8c080d464664b7024abd238b6718", - "c11fcb2bc7e14aee9b2f3a99c89c172e", - "cfef96a5039c4dbea3c7b0d605089bbd", - "009300d787f040b187f0f9be8b3b5c92", - "ad00c5871f02441898e0eb15355f707a", - "d5a226f7fbbe4cc0877735da3c656f68", - "cdee68c696484bea812a894f65a3f12c", - "ef8fc14efe174e0e9fa8cd8adc5410ee", - "dca45c47f02548e995f2dbad100daad1", - "2aedf7599327489699d5ed8540457f98", - "ad333e3f1fe3421684815c2566328924", - "d485ac9f212943af9ab0eae60e589588", - "a367aaf12c2945579728b3487aa97de6", - "fcd71ba8dfbb4ae3ad80cda3efc5460e", - "00c34898babb44598172f5edb305928e", - "b56764dc4edf4a6b852eeb94813465cf" - ] }, - "id": "lh4HOGb7dU-b", - "outputId": "34be02cd-1b53-4cca-ce8d-e9d42893037f" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "### Data Visualization\n", + "\n", + "Now that we have a better understanding of NBR, let's apply it to each of the \"interesting images\" we've extracted from Sentinel-2 and layer them over an open-source map." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "id": "vcqL_tgBLAnz" + } }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9470415a9dc44809940f3c967e24de34", - "version_major": 2, - "version_minor": 0 + "cell_type": "code", + "source": [ + "# Apply NBR calculation\n", + "s2_nbr = s2_dataset.map(calculate_nbr)\n", + "\n", + "# Get the first image and visualize\n", + "s2nbr_list = s2_nbr.toList(s2_nbr.size())\n", + "\n", + "# EDIT: Parameters for visualizing NBR\n", + "nbr_vis_params = {\n", + " \"bands\": [\"NBR\"], # NBR band\n", + " \"min\": -1, # Min value for NBR\n", + " \"max\": 1, # Max value for NBR\n", + " \"palette\": [\"blue\", \"white\", \"green\"], # Color palette for NBR (blue = burned, green = vegetation)\n", + " \"dimensions\": 512,\n", + " \"region\": poi\n", + "}\n", + "\n", + "# Create a map\n", + "wildfire_map = folium.Map(location=[lat, lon], zoom_start=10)\n", + "\n", + "# Add a layer for each satellite image of interest (before, during and after)\n", + "for i in interesting_images:\n", + "\n", + " # Extract the timestamp string\n", + " s2nbr_list_property = s2nbr_list.get(i).getInfo()\n", + " timestamp_str = s2nbr_list_property[\"properties\"][\"system:index\"].split(\"_\")[0]\n", + "\n", + " # Convert to datetime object\n", + " s2_datetime = datetime.strptime(timestamp_str, \"%Y%m%dT%H%M%S\")\n", + "\n", + " # Make the datetime timezone-aware (UTC)\n", + " dt_utc = s2_datetime.replace(tzinfo=ZoneInfo(\"UTC\"))\n", + "\n", + " # Convert to Pacific Time\n", + " pacific_tz = ZoneInfo(\"America/Los_Angeles\")\n", + " s2_datetime_pst = dt_utc.astimezone(pacific_tz).strftime(datetime_format)\n", + "\n", + " # Image title\n", + " title = f\"Sentinel-2 SWIR Image #{i} / Date: {s2_datetime_pst} PST/PDT\"\n", + "\n", + " # Extract the image from the list\n", + " s2_nbr_image = ee.Image(s2nbr_list.get(i))\n", + "\n", + " # EDIT: Add the image layerto the map (EDIT)\n", + " wildfire_map.add_ee_layer(s2_nbr_image, nbr_vis_params, name=title)\n", + "\n", + "# Add a layer control panel to the map\n", + "folium.LayerControl(collapsed=False).add_to(wildfire_map)\n", + "\n", + "# Display the map.\n", + "display(wildfire_map)" + ], + "metadata": { + "id": "opi5waGAw2Nm", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 531 + }, + "outputId": "597b41d3-ff5d-4280-887f-39361405709f" }, - "text/plain": [ - "Map(center=[50.23128609777502, -121.58153879631847], controls=(ZoomControl(options=['position', 'zoom_in_text'…" - ] - }, - "metadata": { - "application/vnd.jupyter.widget-view+json": { - "colab": { - "custom_widget_manager": { - "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js" + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "
Make this Notebook Trusted to load map: File -> Trust Notebook
" + ] + }, + "metadata": {} } - } - } - }, - "output_type": "display_data" - } - ], - "source": [ - "# We can visualize that initial data processing step from each satellite, using:\n", - "affected_area_palette = [\"white\", \"yellow\", \"orange\", \"red\", \"purple\"]\n", - "\n", - "earth_engine_viz = {\n", - " \"opacity\": 0.3,\n", - " \"min\": 0,\n", - " \"max\": 1,\n", - " \"palette\": affected_area_palette\n", - " }\n", - "\n", - "# Create a map.\n", - "Map = geemap.Map()\n", - "Map.centerObject(poi, 9)\n", - "Map.addLayer(poi, {\"color\": \"green\"}, \"Area of interest\", True, 0.2)\n", - "Map.addLayer(goes_16_max_confidence, earth_engine_viz, \"GOES-16 maximum confidence\")\n", - "Map.addLayer(goes_17_max_confidence, earth_engine_viz, \"GOES-17 maximum confidence\")\n", - "Map" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "IkWC8o-feLwz" - }, - "source": [ - "From our initial results, we can see two iterations of the FDC Algorithm layered over top of each other on the map. We can combine the results of our two satellite images to increase the spatial resolution of our wildfire perimeter using the `ee.Reducer.min()` function which returns the lesser of the two confidence values where the two layers intersect (Restif & Hoffman, 2020)." - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 621, - "referenced_widgets": [ - "491583fa5edf4d398f9a5e5ca71d54aa", - "f64b26b56ac84e389d657dbe460c67fc", - "28cdeb24a4bc48e7b6b179e9ab47d80d", - "75a80c80751a418ebf8c6f0563182140", - "9844fe02dbb747b6bb427572cc9db899", - "d63f91597a284fc0870c59077f043695", - "8f21bd7200f447c1aac3f659765ad118", - "c4c81b26a1284ba0b795c12b86d78d53", - "fec77abaf75c4932adffead454232a80", - "de4eddaa83244e3498bbd8d996b6cf30", - "fbadb1c98fdd45d994d546a95eac0ec6", - "060ec89c7e43471ca7da47ad99803113", - "0b106a2e37a94d44a48890258b6532f6", - "fcebfde4194d42198a3b84d5ff1e44b5", - "e5569bde1b8c40fab5cf4911bd4aeeec", - "bed712ce36ce4bff9719f1e09c9e37b0", - "78c4e94b6d794cd6a0ce7d86257adb01", - "6476a8ee57c249b9843df37d61640421", - "5cf55f8758334ac29f935ceae044e2d4" - ] + ] }, - "id": "rVEaK3EgdU7T", - "outputId": "4bc0ddfe-dab5-44ec-f086-ace639a5bee3" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "From the NBR-transformed, satellite imaging we collected of the area surrounding Lytton between June to July 15th, we can see distinct areas that were ravaged by the fires in 2021. Removing all the layers by de-selecting the images gives us a bearing on where the town of Lytton is in the satellite image.\n", + "\n", + "However, if we select image layers #9, 11, 12, and 26, we'll find another fire perimeter northeast of Lytton, one that looks slightly larger. Because the Sentinel-2 images cover such a large area and with some further research, we were surprisingly able to discover that the [Sparks Lake wildfire](https://www.eoas.ubc.ca/courses/atsc413/cases/sparks_lake_BC/index.html) was another natural disaster occurring the same time as our Lytton Creek wildfire on June 29th, 2021 (Watson & Lindsay, 2021). The Sparks Lake wildfire also turned out to be one of B.C.'s most devastating fires in history due to the heat dome the province experienced that year. The fire appeared to have been human-caused by a nearby marijuana growth operation which burned down about 960 km$^2$ for 69 days before firefighters eventually got control of it.\n", + "\n", + "\n", + "While the data from Sentinel-2 does a fine job in identifying and mapping out burnt areas of the region, it suffers some heavy drawbacks in its inability to provide real-time information to emergency responders and members of the public. Because Sentinel-2 needs time to orbit and image other areas of the globe, there is a 2-5 day lag between every snapshot at a particular point of interest (POI), depending on how close it is to the equator (European Space Agency, 2024). In situations where a natural disaster is unfolding rapidly and emergency responders need prompt access to information for rapid and high-stakes decisions, Sentinel-2 data will not be sufficient for this purpose so we must turn to other tools to fill the gap.\n", + "\n", + "Additional concerns with Sentinel-2 images are the presence of clouds or smoke over our POI which can massively reduce the image quality because they limit the amount of light the Earth can reflect to its sensors. Sentinel-2 is also limited to operating during the day due to its reliance on sunlight so any opportunity to gather data at night is out of the question." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "id": "XXkt20jFN9kV" + } }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "491583fa5edf4d398f9a5e5ca71d54aa", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Map(center=[50.23128609777502, -121.58153879631847], controls=(ZoomControl(options=['position', 'zoom_in_text'…" - ] - }, - "metadata": { - "application/vnd.jupyter.widget-view+json": { - "colab": { - "custom_widget_manager": { - "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js" - } - } + "cell_type": "markdown", + "source": [ + "## Data Extraction (Part 2)" + ], + "metadata": { + "id": "TVlUEmqih3yx" } - }, - "output_type": "display_data" - } - ], - "source": [ - "# Combine the confidence values from both GOES-16 and GOES-17 using the minimum reducer\n", - "combined_confidence = ee.ImageCollection([goes_16_max_confidence, goes_17_max_confidence]).reduce(ee.Reducer.min())\n", - "\n", - "# Create a map\n", - "Map = geemap.Map()\n", - "Map.centerObject(poi, 9)\n", - "Map.addLayer(poi, {\"color\": \"green\"}, \"Area of interest\", True, 0.2)\n", - "Map.addLayer(combined_confidence, earth_engine_viz, \"Combined confidence\")\n", - "\n", - "# Display the map\n", - "Map" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ZLtAfskkgXF_" - }, - "source": [ - "With the results of our two satellites combined, notice how the generated boundary is highly pixelated due to the image quality of the satellites. One last thing we can do to our wildfire boundary is to smooth the boundaries between the combined fire masks using the `ee.Image.reduceNeighborhood()` function." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 621, - "referenced_widgets": [ - "d7e2e560a45149f0b0c4438e2ebf61eb", - "2d4a017cbf4f4a5c8b122bda2b82b0f3", - "71c314d945d34598bc7de1aad53f42bd", - "ca2b34d262fb4496b132243083638856", - "0df9d456f17c4f8db7c7a50045cc482f", - "21560dbaff1b4ecaae9a91b1a7f48e4f", - "105e20950122479695f20fba4b9ae7ca", - "4f986b444bd9413fb5fbaee7480b4d17", - "fe3dd408629d42cbb59eec5fb32c0356", - "3fc7cb02d14746b28d9747e11e88c04d", - "20e6f269bc7f4def88a5c59d7443d40c", - "9d8272167ce64ea5a5bc262061ff965f", - "da40b07b4db04ec8a27323a78cbe0564", - "588d2c29aa5b43e58b0e6b4223951e72", - "4ec94c173362464d94362df255516a9c", - "b7450505c65648f39dff1fc0140322f0", - "f74f5b1f50424e18bc1062d4b7984706", - "7203de29c95e43408e7593e2175f8630", - "3b0d7e2b818545d0bf00e75db591bf17" - ] }, - "id": "invP31ehdU2T", - "outputId": "2849d881-1ef6-4730-d2f5-699f11ffc721" - }, - "outputs": [ { - "data": { - "text/html": [ - "\n", - " \n", - " " + "cell_type": "markdown", + "source": [ + "### Extracting GOES-16 & GOES-17 satellite data\n", + "\n", + "As we've explored the strengths of the Sentinel-2 data and highlighted its weaknesses, luckily, we have other systems to shore up these vulnerabilities such as the GOES-16 and GOES-17 satellites. The [**Geostationary Operational Environmental Satellites (GOES)**](https://www.goes-r.gov/downloads/resources/documents/Beginners_Guide_to_GOES-R_Series_Data.pdf) are a set of geostationary satellites which takes high temporal resolution images every 5-15 min, with each pixel having a resolution of about 0.5 to 2 km (NOAA & NASA, 2024). When we refer to a satellite as *geostationary*, it means that it orbits the Earth in the same direction about 35,000 km above the equator and at about the same speed so that from the perspective of a ground-bound observer, the satellite appears nearly stationary. Among the two satellites we mentioned earlier, GOES-16 does the majority of the image capture over the North and South American continent while GOES-17 functions as a ready spare when necessary (NOAA & NASA, 2024).\n", + "\n", + "On board each GOES satellite is the [Advanced Baseline Imager (ABI)](https://www.goes-r.gov/spacesegment/abi.html) instrument for imaging the Earth's weather, oceans, and environment through its 16 different spectral bands (NOAA & NASA, n.d.). While tracking the flow of wildfire is the use case we're most interested in, these satellites can also provide independent data sources for monitoring things like cloud formation, land surface temperature, ocean dynamics, volcanic ash plumes, vegetative health and more. Because our GOES satellites can take snapshots every 5-15 minutes, decision-makers can rely on the monitoring and fire perimeter we build from this data to inform their emergency response. In contrast to Sentinel-2, GOES satellites are also capable of gathering data 24/7 through their thermal infrared bands which do not rely on sunlight (NOAA & NASA, n.d.). Additionally, it is also capable of penetrating cloud cover by snapping images during windows where the cover is less dense (NOAA & NASA, n.d.).\n", + "\n", + "Now that we've gotten the brief overview of the GOES-16/17 satellites out of the way, let's start extracting data again from the [Earth Engine Data Catalog](https://developers.google.com/earth-engine/datasets/catalog/NOAA_GOES_16_FDCF#bands) using the same parameters we used earlier to locate the Lytton Creek wildfire during the end of June 2021. As we can see, we extracted over 4,000 images from each satellite due to its ability to snap images in lightning-quick 5-15 minute intervals." ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "id": "ODbxX7hhcenC" + } }, { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "d7e2e560a45149f0b0c4438e2ebf61eb", - "version_major": 2, - "version_minor": 0 + "cell_type": "code", + "source": [ + "# Gathering satellite data\n", + "goes_16 = ee.ImageCollection(\"NOAA/GOES/16/FDCF\").filterDate(start_date, end_date).filterBounds(poi)\n", + "\n", + "goes_17 = ee.ImageCollection(\"NOAA/GOES/17/FDCF\").filterDate(start_date, end_date).filterBounds(poi)\n", + "\n", + "# Example: print the number of images in the collections (optional)\n", + "print(f\"Number of GOES-16 images: {goes_16.size().getInfo()}\")\n", + "print(f\"Number of GOES-17 images: {goes_17.size().getInfo()}\")" + ], + "metadata": { + "id": "zNMqPDWsYski", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 52 + }, + "outputId": "2becad65-229a-4532-e2b6-9dd9675b0171" }, - "text/plain": [ - "Map(center=[50.23128609777502, -121.58153879631847], controls=(ZoomControl(options=['position', 'zoom_in_text'…" - ] - }, - "metadata": { - "application/vnd.jupyter.widget-view+json": { - "colab": { - "custom_widget_manager": { - "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js" + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of GOES-16 images: 4273\n", + "Number of GOES-17 images: 4245\n" + ] } - } - } - }, - "output_type": "display_data" - } - ], - "source": [ - "# Define the kernel for smoothing\n", - "kernel = ee.Kernel.square(2000, \"meters\", True)\n", - "\n", - "# Apply the smoothing using reduceNeighborhood with the mean reducer\n", - "smoothed_confidence = combined_confidence.reduceNeighborhood(\n", - " reducer=ee.Reducer.mean(),\n", - " kernel=kernel,\n", - " optimization=\"boxcar\"\n", - ")\n", - "\n", - "# Create a map\n", - "Map = geemap.Map()\n", - "Map.centerObject(poi, 9)\n", - "Map.addLayer(poi, {\"color\": \"green\"}, \"Area of interest\", True, 0.2)\n", - "Map.addLayer(smoothed_confidence, earth_engine_viz, \"Smoothed confidence\")\n", - "\n", - "# Display the map\n", - "Map" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "AgELtmT6i-re" - }, - "source": [ - "There you have it! A near real-time wildfire boundary using Python to deploy the FDC Algorithm on GOES-16 and 17 satellite images from Google's Data Catalog platform. However, as with most technologies, the use of the FDC on GOES-16/17 images doesn't come without its weaknesses which we'll discuss to have a better understanding of the situations where other technologies would be more appropriate.\n", - "\n", - "One risk with using the FDC algorithm on GOES-16/17 images is its tendency to detect false positives with an image. For example, reflective surfaces from buildings in urban areas or lakes and dry vegetation in a forest may be misconstrued as a fire.\n", - "\n", - "Additionally, the image resolution from GOES-16/17 satellites is poorer compared to other data collection techniques. We saw this first-hand from the pixelated fire perimeter we produced in our initial effort applying the FDC algorithm. The reason why the wildfire perimeter was so pixelated is because each pixel captures anywhere between 4-36 $km^2$ depending on how far the area is from the centre of the image. Due to the spherical shape of the Earth and the satellite's position, the farther an area is from the centre of an image, the lower its image quality. For wildfire detection, what this means is that activities smaller than the pixel size may either be mischaracterized or missed completely.\n", - "\n", - "Another aspect to consider is the terrain of the area of interest. This risk is mostly attributed to mountainous terrain where the lee ward side of a mountain may obfuscate a satellite's view in that area.\n", - "\n", - "To mitigate these risks, we must use other imaging techniques and technologies alongside GOES-16/17 data to gain a clearer understanding of the ground situation. As we've previously discussed, high-resolution data from Sentinel-2 and Landsat satellites can be highly complementary when they're available as it allows us to cross-validate our resulting wildfire boundaries. On top of that, ground observations and aerial drone surveys add another layer of validation to a highly dynamic event.\n", - "\n", - "By executing the FDC algorithm on GOES-16/17 data, there's little doubt that this approach can be a powerful asset in helping us build wildfire perimeters in real time as part of a broader mitigation strategy with other sensory techniques." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "CyITs90YzY-I" - }, - "source": [ - "If you've made it this far, thank you as always for taking the time to read through this tutorial! We hope that we played a role in reducing the barrier to entry in remote sensing and have empowered you with the tools to get started. As our summers get warmer and the proliferation of climate emergencies increases, the work of data science professionals will only become more essential in helping emergency teams save lives, protect property, and reduce suffering." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "VbdqtRlgp29J" - }, - "source": [ - "## Resources\n", - "\n", - "- Braaten, J. (2022, January, 7). Sentinel-2 Cloud Masking with s2cloudless. *Google Earth Engine.* https://developers.google.com/earth-engine/tutorials/community/sentinel-2-s2cloudless\n", - "\n", - "- BC Public Service. (2023, December 7). *Wildfire Season Summary*. https://www2.gov.bc.ca/gov/content/safety/wildfire-status/about-bcws/wildfire-history/wildfire-season-summary\n", - "\n", - "- European Space Agency. (2024). S2 mission. https://sentiwiki.copernicus.eu/web/s2-mission\n", - "\n", - "- Kulkarni, A. (2023, July 3). *What happens after the Donnie Creek wildfire, now larger than P.E.I., stops burning? CBC.* https://www.cbc.ca/news/canada/british-columbia/donnie-creek-wildfire-aftermath-1.6892294\n", - "\n", - "- Lindsay, B. & Dickson, C. (2021, July 1). *Village of Lytton, B.C., evacuated as mayor says 'the whole town is on fire.' CBC.* https://www.cbc.ca/news/canada/british-columbia/bc-wildfires-june-30-2021-1.6085919\n", - "\n", - "- National Oceananic and Atmospheric Association (NOAA) & National Aeronautics and Space Administration (NASA). (2024). Beginner's guide to GOES-R series data: How to acquire, analyze, and visualize GOES-R Series data. https://www.goes-r.gov/downloads/resources/documents/Beginners_Guide_to_GOES-R_Series_Data.pdf\n", - "\n", - "- National Oceananic and Atmospheric Association (NOAA) & National Aeronautics and Space Administration (NASA). (n.d.). Instruments: Advanced baseline imager (ABI). https://www.goes-r.gov/spacesegment/abi.html\n", - "\n", - "- Restif, C. & Hoffman, A. (2020, November 20). How to generate wildfire boundary maps with Earth Engine. *Medium*. https://medium.com/google-earth/how-to-generate-wildfire-boundary-maps-with-earth-engine-b38eadc97a38\n", - "\n", - "- Schmidt, C., Hoffman, J., Prins, E., & Lindstrom, S. (2012, July 30). GOES-R Advanced Baseline Imager (ABI) algorithm theoretical basis document for\n", - "fire / hot spot characterization. NOAA NESDIS Center for Satellite Applications and Research. https://www.star.nesdis.noaa.gov/goesr/docs/ATBD/Fire.pdf\n", - "\n", - "- Stull, R. & Rodell, C. (2023, November 18). Case: Sparks Lake, BC. *UBC Earth, Ocean, and Atomspheric Sciences.* https://www.eoas.ubc.ca/courses/atsc413/cases/sparks_lake_BC/index.html\n", - "\n", - "- Watson, B. & Lindsay, B. (2021, June 29). *Homes evacuated as out-of-control wildfires grow in B.C.'s Interior CBC.* https://www.cbc.ca/news/canada/british-columbia/wildfires-interior-bc-1.6084445\n", - "\n", - "- United Nations: Office for Outer Space Affairs. (n.d.). Normalized Burn Ratio (NBR). https://un-spider.org/advisory-support/recommended-practices/recommended-practice-burn-severity/in-detail/normalized-burn-ratio" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "id": "Nnlar9EvgCfk" - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "colab": { - "include_colab_link": true, - "provenance": [], - "toc_visible": true - }, - "kernelspec": { - "display_name": "Python 3", - "name": "python3" - }, - "language_info": { - "name": "python" - }, - "widgets": { - "application/vnd.jupyter.widget-state+json": { - "009300d787f040b187f0f9be8b3b5c92": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "00c34898babb44598172f5edb305928e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "server", - "layout": "IPY_MODEL_ad333e3f1fe3421684815c2566328924", - "style": "IPY_MODEL_d485ac9f212943af9ab0eae60e589588", - "tooltip": "Layers", - "value": false - } - }, - "02d2ce2c1d094866b5d3370f6e917f53": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "grab" - } - }, - "02f4a049e36e4963bc8446e3fc80a4a2": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "Area of interest", - "no_wrap": false, - "opacity": 0.2, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" - ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/949cdc3eaef037d03d1f783d22744dda-6af4447de6f99ac42f7acd0273bef53c/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } - }, - "04ac8eb0c97a48adaa2589588bd6a481": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletFullScreenControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletFullScreenControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletFullScreenControlView", - "options": [ - "position" - ], - "position": "topleft" - } - }, - "060ec89c7e43471ca7da47ad99803113": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "Combined confidence", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" - ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/5eeecdb49afc16377a5519a2657f3672-f30447c8258f81593e3c2efed9ece580/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } - }, - "0b106a2e37a94d44a48890258b6532f6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "600px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "0df9d456f17c4f8db7c7a50045cc482f": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletScaleControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletScaleControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletScaleControlView", - "imperial": true, - "max_width": 100, - "metric": true, - "options": [ - "imperial", - "max_width", - "metric", - "position", - "update_when_idle" - ], - "position": "bottomleft", - "update_when_idle": false - } - }, - "105e20950122479695f20fba4b9ae7ca": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletAttributionControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletAttributionControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletAttributionControlView", - "options": [ - "position", - "prefix" - ], - "position": "bottomright", - "prefix": "ipyleaflet" - } - }, - "20e6f269bc7f4def88a5c59d7443d40c": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "Area of interest", - "no_wrap": false, - "opacity": 0.2, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" - ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/949cdc3eaef037d03d1f783d22744dda-37f474f3dd676b52404875a8105db69f/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } - }, - "21560dbaff1b4ecaae9a91b1a7f48e4f": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletWidgetControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletWidgetControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletWidgetControlView", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "options": [ - "position", - "transparent_bg" - ], - "position": "topright", - "transparent_bg": false, - "widget": "IPY_MODEL_4ec94c173362464d94362df255516a9c" - } - }, - "28cdeb24a4bc48e7b6b179e9ab47d80d": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletFullScreenControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletFullScreenControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletFullScreenControlView", - "options": [ - "position" - ], - "position": "topleft" - } - }, - "2aedf7599327489699d5ed8540457f98": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": "1px 1px", - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": "32px 32px 32px ", - "grid_template_rows": "32px ", - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "5px", - "right": null, - "top": null, - "visibility": null, - "width": "109px" - } - }, - "2d4a017cbf4f4a5c8b122bda2b82b0f3": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletZoomControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletZoomControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletZoomControlView", - "options": [ - "position", - "zoom_in_text", - "zoom_in_title", - "zoom_out_text", - "zoom_out_title" - ], - "position": "topleft", - "zoom_in_text": "+", - "zoom_in_title": "Zoom in", - "zoom_out_text": "-", - "zoom_out_title": "Zoom out" - } - }, - "2f084073179c49efba19584acd27a353": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "385ae06f43094e4e97e9dce81756621c": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletZoomControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletZoomControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletZoomControlView", - "options": [ - "position", - "zoom_in_text", - "zoom_in_title", - "zoom_out_text", - "zoom_out_title" - ], - "position": "topleft", - "zoom_in_text": "+", - "zoom_in_title": "Zoom in", - "zoom_out_text": "-", - "zoom_out_title": "Zoom out" - } - }, - "3b0d7e2b818545d0bf00e75db591bf17": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "3c16f5b1ab8f4af98c27a2b618303549": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "28px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 4px", - "right": null, - "top": null, - "visibility": null, - "width": "28px" - } - }, - "3fc7cb02d14746b28d9747e11e88c04d": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "© OpenStreetMap contributors", - "base": true, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 19, - "min_native_zoom": null, - "min_zoom": 1, - "name": "OpenStreetMap.Mapnik", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" - ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", - "visible": true, - "zoom_offset": 0 - } + ] }, - "491583fa5edf4d398f9a5e5ca71d54aa": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapModel", - "state": { - "_dom_classes": [], - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletMapView", - "bottom": 44621, - "bounce_at_zoom_limits": true, - "box_zoom": true, - "center": [ - 50.23128609777502, - -121.58153879631847 - ], - "close_popup_on_click": true, - "controls": [ - "IPY_MODEL_f64b26b56ac84e389d657dbe460c67fc", - "IPY_MODEL_28cdeb24a4bc48e7b6b179e9ab47d80d", - "IPY_MODEL_75a80c80751a418ebf8c6f0563182140", - "IPY_MODEL_9844fe02dbb747b6bb427572cc9db899", - "IPY_MODEL_d63f91597a284fc0870c59077f043695", - "IPY_MODEL_8f21bd7200f447c1aac3f659765ad118" + { + "cell_type": "code", + "source": [ + "# Getting a feel for the data we've extracted from the Earth Engine dataset\n", + "pprint.pp(goes_17.first().getInfo())" ], - "crs": { - "custom": false, - "name": "EPSG3857" + "metadata": { + "id": "PlFkrjw6pPhD", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "a302684a-77b0-4205-c4fb-10f21d4c83c3" }, - "default_style": "IPY_MODEL_c4c81b26a1284ba0b795c12b86d78d53", - "double_click_zoom": true, - "dragging": true, - "dragging_style": "IPY_MODEL_fec77abaf75c4932adffead454232a80", - "east": -120.41015625000001, - "fullscreen": false, - "inertia": true, - "inertia_deceleration": 3000, - "inertia_max_speed": 1500, - "interpolation": "bilinear", - "keyboard": true, - "keyboard_pan_offset": 80, - "keyboard_zoom_offset": 1, - "layers": [ - "IPY_MODEL_de4eddaa83244e3498bbd8d996b6cf30", - "IPY_MODEL_fbadb1c98fdd45d994d546a95eac0ec6", - "IPY_MODEL_060ec89c7e43471ca7da47ad99803113" - ], - "layout": "IPY_MODEL_0b106a2e37a94d44a48890258b6532f6", - "left": 20844, - "max_zoom": null, - "min_zoom": null, - "modisdate": "2024-11-10", - "north": 50.75557231232454, - "options": [ - "bounce_at_zoom_limits", - "box_zoom", - "center", - "close_popup_on_click", - "double_click_zoom", - "dragging", - "fullscreen", - "inertia", - "inertia_deceleration", - "inertia_max_speed", - "interpolation", - "keyboard", - "keyboard_pan_offset", - "keyboard_zoom_offset", - "max_zoom", - "min_zoom", - "prefer_canvas", - "scroll_wheel_zoom", - "tap", - "tap_tolerance", - "touch_zoom", - "world_copy_jump", - "zoom", - "zoom_animation_threshold", - "zoom_delta", - "zoom_snap" - ], - "panes": {}, - "prefer_canvas": false, - "right": 21696, - "scroll_wheel_zoom": true, - "south": 49.70139134233472, - "style": "IPY_MODEL_fcebfde4194d42198a3b84d5ff1e44b5", - "tap": true, - "tap_tolerance": 15, - "top": 44021, - "touch_zoom": true, - "west": -122.75024414062501, - "window_url": "https://h8bukvs53mh-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab_20241107-060106_RC01_694212549", - "world_copy_jump": false, - "zoom": 9, - "zoom_animation_threshold": 4, - "zoom_delta": 1, - "zoom_snap": 1 - } - }, - "4ec94c173362464d94362df255516a9c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "VBoxModel", - "state": { - "_dom_classes": [ - "geemap-colab" - ], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "VBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "VBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_b7450505c65648f39dff1fc0140322f0" - ], - "layout": "IPY_MODEL_f74f5b1f50424e18bc1062d4b7984706" - } - }, - "4f986b444bd9413fb5fbaee7480b4d17": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "grab" - } - }, - "588d2c29aa5b43e58b0e6b4223951e72": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "grab" - } - }, - "5ab5ad8185c249229caaf19d8808d04e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "VBoxModel", - "state": { - "_dom_classes": [ - "geemap-colab" - ], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "VBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "VBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_7f3796cf17e044679c73ce6513c249c3" - ], - "layout": "IPY_MODEL_9156829da21a4f7797d7fad70631365f" - } - }, - "5cf55f8758334ac29f935ceae044e2d4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "6476a8ee57c249b9843df37d61640421": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "28px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 4px", - "right": null, - "top": null, - "visibility": null, - "width": "28px" - } + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'type': 'Image',\n", + " 'bands': [{'id': 'Area',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'int',\n", + " 'min': -32768,\n", + " 'max': 32767},\n", + " 'dimensions': [5424, 5424],\n", + " 'crs': 'PROJCS[\"unnamed\", \\n'\n", + " ' GEOGCS[\"unknown\", \\n'\n", + " ' DATUM[\"unknown\", \\n'\n", + " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", + " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", + " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", + " ' AXIS[\"Longitude\", EAST], \\n'\n", + " ' AXIS[\"Latitude\", NORTH]], \\n'\n", + " ' PROJECTION[\"GEOS\"], \\n'\n", + " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", + " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", + " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", + " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", + " ' PARAMETER[\"sweep\", 0.0], \\n'\n", + " ' PARAMETER[\"Option\", 0.0], \\n'\n", + " ' UNIT[\"m\", 1.0], \\n'\n", + " ' AXIS[\"x\", EAST], \\n'\n", + " ' AXIS[\"y\", NORTH]]',\n", + " 'crs_transform': [2004.017315487541,\n", + " 0,\n", + " -5434894.700982174,\n", + " 0,\n", + " 2004.017315487541,\n", + " -5434895.218222249]},\n", + " {'id': 'Temp',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'int',\n", + " 'min': -32768,\n", + " 'max': 32767},\n", + " 'dimensions': [5424, 5424],\n", + " 'crs': 'PROJCS[\"unnamed\", \\n'\n", + " ' GEOGCS[\"unknown\", \\n'\n", + " ' DATUM[\"unknown\", \\n'\n", + " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", + " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", + " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", + " ' AXIS[\"Longitude\", EAST], \\n'\n", + " ' AXIS[\"Latitude\", NORTH]], \\n'\n", + " ' PROJECTION[\"GEOS\"], \\n'\n", + " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", + " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", + " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", + " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", + " ' PARAMETER[\"sweep\", 0.0], \\n'\n", + " ' PARAMETER[\"Option\", 0.0], \\n'\n", + " ' UNIT[\"m\", 1.0], \\n'\n", + " ' AXIS[\"x\", EAST], \\n'\n", + " ' AXIS[\"y\", NORTH]]',\n", + " 'crs_transform': [2004.017315487541,\n", + " 0,\n", + " -5434894.700982174,\n", + " 0,\n", + " 2004.017315487541,\n", + " -5434895.218222249]},\n", + " {'id': 'Mask',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'int',\n", + " 'min': -32768,\n", + " 'max': 32767},\n", + " 'dimensions': [5424, 5424],\n", + " 'crs': 'PROJCS[\"unnamed\", \\n'\n", + " ' GEOGCS[\"unknown\", \\n'\n", + " ' DATUM[\"unknown\", \\n'\n", + " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", + " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", + " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", + " ' AXIS[\"Longitude\", EAST], \\n'\n", + " ' AXIS[\"Latitude\", NORTH]], \\n'\n", + " ' PROJECTION[\"GEOS\"], \\n'\n", + " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", + " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", + " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", + " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", + " ' PARAMETER[\"sweep\", 0.0], \\n'\n", + " ' PARAMETER[\"Option\", 0.0], \\n'\n", + " ' UNIT[\"m\", 1.0], \\n'\n", + " ' AXIS[\"x\", EAST], \\n'\n", + " ' AXIS[\"y\", NORTH]]',\n", + " 'crs_transform': [2004.017315487541,\n", + " 0,\n", + " -5434894.700982174,\n", + " 0,\n", + " 2004.017315487541,\n", + " -5434895.218222249]},\n", + " {'id': 'Power',\n", + " 'data_type': {'type': 'PixelType', 'precision': 'float'},\n", + " 'dimensions': [5424, 5424],\n", + " 'crs': 'PROJCS[\"unnamed\", \\n'\n", + " ' GEOGCS[\"unknown\", \\n'\n", + " ' DATUM[\"unknown\", \\n'\n", + " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", + " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", + " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", + " ' AXIS[\"Longitude\", EAST], \\n'\n", + " ' AXIS[\"Latitude\", NORTH]], \\n'\n", + " ' PROJECTION[\"GEOS\"], \\n'\n", + " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", + " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", + " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", + " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", + " ' PARAMETER[\"sweep\", 0.0], \\n'\n", + " ' PARAMETER[\"Option\", 0.0], \\n'\n", + " ' UNIT[\"m\", 1.0], \\n'\n", + " ' AXIS[\"x\", EAST], \\n'\n", + " ' AXIS[\"y\", NORTH]]',\n", + " 'crs_transform': [2004.017315487541,\n", + " 0,\n", + " -5434894.700982174,\n", + " 0,\n", + " 2004.017315487541,\n", + " -5434895.218222249]},\n", + " {'id': 'DQF',\n", + " 'data_type': {'type': 'PixelType',\n", + " 'precision': 'int',\n", + " 'min': -128,\n", + " 'max': 127},\n", + " 'dimensions': [5424, 5424],\n", + " 'crs': 'PROJCS[\"unnamed\", \\n'\n", + " ' GEOGCS[\"unknown\", \\n'\n", + " ' DATUM[\"unknown\", \\n'\n", + " ' SPHEROID[\"Spheroid\", 6378137.0, 298.2572221]], \\n'\n", + " ' PRIMEM[\"Greenwich\", 0.0], \\n'\n", + " ' UNIT[\"degree\", 0.017453292519943295], \\n'\n", + " ' AXIS[\"Longitude\", EAST], \\n'\n", + " ' AXIS[\"Latitude\", NORTH]], \\n'\n", + " ' PROJECTION[\"GEOS\"], \\n'\n", + " ' PARAMETER[\"central_meridian\", -137.0], \\n'\n", + " ' PARAMETER[\"satellite_height\", 35786023.0], \\n'\n", + " ' PARAMETER[\"false_easting\", 0.0], \\n'\n", + " ' PARAMETER[\"false_northing\", 0.0], \\n'\n", + " ' PARAMETER[\"sweep\", 0.0], \\n'\n", + " ' PARAMETER[\"Option\", 0.0], \\n'\n", + " ' UNIT[\"m\", 1.0], \\n'\n", + " ' AXIS[\"x\", EAST], \\n'\n", + " ' AXIS[\"y\", NORTH]]',\n", + " 'crs_transform': [2004.017315487541,\n", + " 0,\n", + " -5434894.700982174,\n", + " 0,\n", + " 2004.017315487541,\n", + " -5434895.218222249]}],\n", + " 'version': 1623715883975148,\n", + " 'id': 'NOAA/GOES/17/FDCF/2021166000031900000',\n", + " 'properties': {'system:time_start': 1623715231900,\n", + " 'system:footprint': {'type': 'LinearRing',\n", + " 'coordinates': [[-180, -90],\n", + " [180, -90],\n", + " [180, 90],\n", + " [-180, 90],\n", + " [-180, -90]]},\n", + " 'system:time_end': 1623715778600,\n", + " 'system:asset_size': 749867,\n", + " 'system:index': '2021166000031900000'}}\n" + ] + } + ] }, - "71c314d945d34598bc7de1aad53f42bd": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletFullScreenControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletFullScreenControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletFullScreenControlView", - "options": [ - "position" + { + "cell_type": "markdown", + "source": [ + "Let's also load the `map_from_map_codes_to_confidence_values()` and `apply_scale_factors()` functions the team at Google [provided us](https://medium.com/google-earth/how-to-generate-wildfire-boundary-maps-with-earth-engine-b38eadc97a38) to process our data." ], - "position": "topleft" - } - }, - "7203de29c95e43408e7593e2175f8630": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "28px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 4px", - "right": null, - "top": null, - "visibility": null, - "width": "28px" - } + "metadata": { + "id": "RR1ovhHLY_pL" + } }, - "75a80c80751a418ebf8c6f0563182140": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletDrawControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletDrawControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletDrawControlView", - "circle": {}, - "circlemarker": {}, - "data": [], - "edit": true, - "marker": { - "shapeOptions": { - "color": "#3388ff" - } - }, - "options": [ - "position" + { + "cell_type": "code", + "source": [ + "def map_from_mask_codes_to_confidence_values(image):\n", + " return image.clip(poi).remap(fire_mask_codes, confidence_values, default_confidence_value)" ], - "polygon": { - "shapeOptions": {} + "metadata": { + "id": "I45V4_jnYszD", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "b4f43b40-73e1-4d47-da5e-efd5e859ee19" }, - "polyline": { - "shapeOptions": {} - }, - "position": "topleft", - "rectangle": { - "shapeOptions": { - "color": "#3388ff" - } - }, - "remove": true - } - }, - "78c4e94b6d794cd6a0ce7d86257adb01": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "7f3796cf17e044679c73ce6513c249c3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "wrench", - "layout": "IPY_MODEL_3c16f5b1ab8f4af98c27a2b618303549", - "style": "IPY_MODEL_2f084073179c49efba19584acd27a353", - "tooltip": "Toolbar", - "value": false - } - }, - "8380126b3a7b4110a82fdec0a7f0833b": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "GOES-16 maximum confidence", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" - ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/21edfd179b88dc67ea84526f06db61c6-699092feb3bdba1e51cdc59a399519d4/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } - }, - "83a930218ccf459da373a6162244ff3e": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "move" - } - }, - "8e5b9cb56d904a299c1146c05f720cde": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "© OpenStreetMap contributors", - "base": true, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 19, - "min_native_zoom": null, - "min_zoom": 1, - "name": "OpenStreetMap.Mapnik", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" - ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", - "visible": true, - "zoom_offset": 0 - } + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } + ] }, - "8f21bd7200f447c1aac3f659765ad118": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletAttributionControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletAttributionControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletAttributionControlView", - "options": [ - "position", - "prefix" + { + "cell_type": "code", + "source": [ + "# Applies scaling factors.\n", + "def apply_scale_factors(image):\n", + " optical_bands = image.select(\"SR_B.\").multiply(0.0000275).add(-0.2)\n", + " thermal_bands = image.select(\"ST_B.*\").multiply(0.00341802).add(149.0)\n", + " return image.addBands(optical_bands, None, True).addBands(\n", + " thermal_bands, None, True\n", + " )" ], - "position": "bottomright", - "prefix": "ipyleaflet" - } - }, - "9156829da21a4f7797d7fad70631365f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "93849482fcc94f20b3e1abc8b73c6915": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "grab" - } + "metadata": { + "id": "fFCZ5ojkYsv7", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "62619cd2-0540-4398-a5ae-4dafafdae5e6" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } + ] }, - "93a7ffc87ec546ccb7f5ea8dffb53b23": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "GOES-17 maximum confidence", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" + { + "cell_type": "markdown", + "source": [ + "#### Overview of the Fire Detection Characterization (FDC) Algorithm\n", + "\n", + "Now that we've talked a little bit about the satellites used to generate the data, let's discuss how we are to detect the presence of wildfires based on these images. Luckily for us, Google makes this easy by giving developers easy access to the [FDC Fire Detection algorithm](https://www.star.nesdis.noaa.gov/goesr/docs/ATBD/Fire.pdf) which was developed by a research team at the University of Wisconsin-Madison.\n", + "\n", + "The primary objective of the **FDC Fire Detection algorithm** is to return the likelihood of a fire based on the pixel data of an input image (Restif & Hoffman, 2020). For those interested, below is a brief overview of the steps that the FDC Fire detection algorithm takes to accomplish this objective:\n", + "\n", + "1) First, the algorithm takes the data from the **thermal infrared (TIR)** band of the satellite sensor (band 14), as well as the **shortwave infrared (SWIR)** band (7), and converts the brightness of each pixel to a temperature;\n", + "\n", + "2) Next, it flags certain TIR pixels based on whether they exceed a certain threshold. Examples of such thresholds include:\n", + "- *Absolute threshold* based on a set temperature;\n", + "- *Relative threshold* based on the delta between a pixel's temperature and its neighbour's exceeding a set amount.\n", + "\n", + "3) If a pixel is flagged, it checks for false positives by evaluating the temperature of its neighbouring pixels just like in the previous step. When checking the temperature of the pixel, we can choose to apply a different threshold from step 2 if we wish. And in the case of our code example below, we do just that by applying a relative threshold instead.\n", + "\n", + "4) If our neighbouring pixel also exceeds the threshold, it will then apply one last check for false positives by evaluating whether the *delta/difference* between the pixel temperature produced by the TIR (band 14) and the SWIR (band 7) band exceeds a relative threshold.\n", + "\n", + "5) And if the difference between the TIR and SWIR pixel temperatures exceeds our relative threshold, the algorithm will return a 1 or a `True` result, confirming that the pixel in question is indeed a fire pixel.\n", + "\n", + "Our code below is a simplified demonstration of Steps 1-5 of the FDC algorithm. However, our explanation only covers the presence of a fire based on the pixel's brightness so the final result of our simplified FDC algorithm is a binary `True`/`False` value." ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/b456f335114c35c4960fa991a4ddb7a7-5d4d8dae72b4a78c0d4d1dd15121d890/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } + "metadata": { + "id": "cspKemgsvxUQ" + } }, - "9470415a9dc44809940f3c967e24de34": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapModel", - "state": { - "_dom_classes": [], - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletMapView", - "bottom": 44621, - "bounce_at_zoom_limits": true, - "box_zoom": true, - "center": [ - 50.23128609777502, - -121.58153879631847 - ], - "close_popup_on_click": true, - "controls": [ - "IPY_MODEL_385ae06f43094e4e97e9dce81756621c", - "IPY_MODEL_04ac8eb0c97a48adaa2589588bd6a481", - "IPY_MODEL_e464f2d84e484efaa405e812e423e541", - "IPY_MODEL_f7d1501fcbb24550b305c1e857824d96", - "IPY_MODEL_ab51866f1a11495eb0e2ec95039082dc", - "IPY_MODEL_b2856e01a3854c30a01268d6d847a4da" + { + "cell_type": "code", + "source": [ + "# Fire Detection Characterization (FDC) Algorithm example implementation\n", + "\n", + "# Simulated satellite image data\n", + "def create_simulated_data(width=50, height=50):\n", + "\n", + " # Create background temperature (avg 290 Kelvin or 16.85 degrees Celsius)\n", + " background = np.random.normal(290, 2, (height, width))\n", + "\n", + " # Add some hotter spots (potential fires) with temperatures between 310 to 330 Kelvins (i.e. 36.85 to 56.85 degrees Celsius)\n", + " num_hotspots = 5\n", + " for _ in range(num_hotspots):\n", + " x, y = np.random.randint(0, width), np.random.randint(0, height)\n", + " hotspot_temp = np.random.uniform(310, 330)\n", + " background[y, x] = hotspot_temp\n", + "\n", + " return background\n", + "\n", + "# Simplified FDC algorithm - our absolute thereshold is 310K or 36.85 degrees\n", + "def simplified_fdc(image_4um, image_11um, absolute_threshold=310, relative_threshold=10):\n", + " height, width = image_4um.shape\n", + " fire_mask = np.zeros((height, width), dtype=bool)\n", + "\n", + " for i in range(1, height-1):\n", + " for j in range(1, width-1):\n", + " # Step 1: Check absolute threshold\n", + " if image_4um[i, j] > absolute_threshold:\n", + " # Step 2: Calculate background\n", + " background = np.mean(image_4um[i-1:i+2, j-1:j+2])\n", + "\n", + " # Step 3: Check relative threshold\n", + " if image_4um[i, j] - background > relative_threshold:\n", + " # Step 4: Multi-channel confirmation\n", + " if image_4um[i, j] - image_11um[i, j] > 10:\n", + " fire_mask[i, j] = True\n", + "\n", + " return fire_mask\n", + "\n", + "# Create simulated data\n", + "image_4um = create_simulated_data()\n", + "image_11um = image_4um - np.random.normal(10, 2, image_4um.shape) # 11um channel is typically cooler" ], - "crs": { - "custom": false, - "name": "EPSG3857" + "metadata": { + "id": "mgp4IJ_K9txq", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "d2e9f4e0-c491-4a12-fded-4da87cd012cf" }, - "default_style": "IPY_MODEL_02d2ce2c1d094866b5d3370f6e917f53", - "double_click_zoom": true, - "dragging": true, - "dragging_style": "IPY_MODEL_83a930218ccf459da373a6162244ff3e", - "east": -120.41015625000001, - "fullscreen": false, - "inertia": true, - "inertia_deceleration": 3000, - "inertia_max_speed": 1500, - "interpolation": "bilinear", - "keyboard": true, - "keyboard_pan_offset": 80, - "keyboard_zoom_offset": 1, - "layers": [ - "IPY_MODEL_8e5b9cb56d904a299c1146c05f720cde", - "IPY_MODEL_02f4a049e36e4963bc8446e3fc80a4a2", - "IPY_MODEL_8380126b3a7b4110a82fdec0a7f0833b", - "IPY_MODEL_93a7ffc87ec546ccb7f5ea8dffb53b23" - ], - "layout": "IPY_MODEL_a208756ef0614a63a2f2bc7e060b22de", - "left": 20844, - "max_zoom": null, - "min_zoom": null, - "modisdate": "2024-11-10", - "north": 50.75557231232454, - "options": [ - "bounce_at_zoom_limits", - "box_zoom", - "center", - "close_popup_on_click", - "double_click_zoom", - "dragging", - "fullscreen", - "inertia", - "inertia_deceleration", - "inertia_max_speed", - "interpolation", - "keyboard", - "keyboard_pan_offset", - "keyboard_zoom_offset", - "max_zoom", - "min_zoom", - "prefer_canvas", - "scroll_wheel_zoom", - "tap", - "tap_tolerance", - "touch_zoom", - "world_copy_jump", - "zoom", - "zoom_animation_threshold", - "zoom_delta", - "zoom_snap" - ], - "panes": {}, - "prefer_canvas": false, - "right": 21696, - "scroll_wheel_zoom": true, - "south": 49.70139134233472, - "style": "IPY_MODEL_93849482fcc94f20b3e1abc8b73c6915", - "tap": true, - "tap_tolerance": 15, - "top": 44021, - "touch_zoom": true, - "west": -122.75024414062501, - "window_url": "https://h8bukvs53mh-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab_20241107-060106_RC01_694212549", - "world_copy_jump": false, - "zoom": 9, - "zoom_animation_threshold": 4, - "zoom_delta": 1, - "zoom_snap": 1 - } + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } + ] }, - "9844fe02dbb747b6bb427572cc9db899": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletScaleControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletScaleControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletScaleControlView", - "imperial": true, - "max_width": 100, - "metric": true, - "options": [ - "imperial", - "max_width", - "metric", - "position", - "update_when_idle" + { + "cell_type": "code", + "source": [ + "# Apply simplified FDC algorithm\n", + "fire_detections = simplified_fdc(image_4um, image_11um)\n", + "\n", + "# Visualize results\n", + "fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))\n", + "\n", + "im1 = ax1.imshow(image_4um, cmap=\"hot\")\n", + "ax1.set_title(\"Simulated 4μm Channel\")\n", + "plt.colorbar(im1, ax=ax1, label=\"Temperature (K)\")\n", + "\n", + "ax2.imshow(image_4um, cmap=\"gray\")\n", + "ax2.imshow(fire_detections, cmap=\"Reds\", alpha=0.5)\n", + "ax2.set_title(\"FDC Algorithm Fire Detections\")\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(f\"Number of fire pixels detected: {np.sum(fire_detections)}\")" ], - "position": "bottomleft", - "update_when_idle": false - } + "metadata": { + "id": "GftMLsQZxYl5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 414 + }, + "outputId": "3118fcb6-ece9-4b9d-9964-3530a52ec1fb" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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b9OmTZXlgKp1KrvdjhNPPDHhBxngwAC7qRhEtjZ1DVVdKxaLoaSkBA0aNFCu32Kx1HiA3kNncAL067KH69Bza/PmzTAMA23btq12eZ1ZfDZv3oxvv/1WLPP3338Ps9mcsh8gk51rANC+fXssW7Ys4TWn01mljDk5OQn12zvuuAP/+te/0K9fP5xwwgno3bs3rrzySvTt2zclZabaYSMKHRV2ux1nnHEGzjjjDPz+97/HjTfeiLlz52LMmDHK9yUbP6O6142DBjdN1op86IBN1fn+++9x4YUXon379pg8eTKaNWsGu92O999/H1OmTNHqXRCLxdCrVy/ce++91cZ///vfizkkJSUlePTRR3HHHXegtLQ03oBQXl4OwzCwdetWuFyuKoP4HspIMijs4e776rRv3x4AsGHDBlx66aXKZXXKULm+4uJidO/eHR6PB+PHj0fr1q3hdDrx5Zdf4r777qtyrKR8NVm2MveTTz6ZdIrDQxvHiIiIjiVff/01gN8aKA7+PK/soVlTmzdvxpo1awCg2i/Mr7/+urIR5UhJxWw0QGrqGjXJkQrVbfuRrsseem7FYjGYTCZ88MEH1W6/Tp0qFovh5JNPrjItd6VDG6fqis74gHl5eVi/fj0WLlyIDz74AB988AFmzZqFwYMH45VXXjkKpSQVNqLQUVf5i8jOnTuP2Doqf/0/dPT1Q391qM4777yDYDCIt99+O+EXguq6ESZrrGndujXKy8vFXwJatGiBTz/9FOXl5QkfDps2bRLLuX//fpSXl+OJJ56oMuo7cOBXhQEDBiQMolVdT5Da/pKg45xzzkFOTg7eeOMN/PWvf63R4LIqS5Yswd69ezF//nycd9558dd//PHHlORXad26NYADv8ql05SMREREqVBeXo4FCxagWbNm6NChAwCgf//+mDhxIl577bXDbkR5/fXXYbPZ8Oqrr1apDyxbtgzPPvssfvrppyq9NCq1aNGi2tnyDn2tRYsWAA7UqU488cT466FQCD/++ONhf3YfzuMexyLduuzhiEajmD17NlwuF84555z4+gzDQKtWrcQGGlX9+6uvvsKFF16oPE6tW7dGLBbDxo0bk/4QplrPoQ4+1yofHaq0adOmeLym7HY7+vfvj/79+yMWi+GOO+7A888/j4ceeqhKzys6ujgmCh0xixcvrrbF/P333weg/8jK4WjR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\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of fire pixels detected: 0\n" + ] + } + ] }, - "9d8272167ce64ea5a5bc262061ff965f": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "Smoothed confidence", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" + { + "cell_type": "code", + "source": [ + "# Visualize results\n", + "fig1, (ax3, ax4) = plt.subplots(1, 2, figsize=(12, 5))\n", + "\n", + "im2 = ax3.imshow(image_11um, cmap=\"hot\")\n", + "ax3.set_title(\"Simulated 11μm Channel\")\n", + "plt.colorbar(im2, ax=ax3, label=\"Temperature (K)\")\n", + "\n", + "ax4.imshow(image_11um, cmap=\"gray\")\n", + "ax4.imshow(fire_detections, cmap=\"Reds\", alpha=0.5)\n", + "ax4.set_title(\"FDC Algorithm Fire Detections\")\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "print(f\"Number of fire pixels detected: {np.sum(fire_detections)}\")" ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/1584de2feef0864beda78b4ecdee09d1-4ed27e3582b6a49de98e065107e9ac32/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } - }, - "a208756ef0614a63a2f2bc7e060b22de": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "600px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "a367aaf12c2945579728b3487aa97de6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "metadata": { + "id": "3ZQx_2SQdUx8", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 414 + }, + "outputId": "e4457b95-2899-498a-c7fc-592348b3e6c7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAABFEAAAHqCAYAAADMLNG2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACjgUlEQVR4nOzdeXhU5d3/8c/MJJPJPgmQRGRzoSBurWBt3EUUcd9qtbjWqrVAXWul1l1LbX1cK1CXYltFrBZqtSp1VxR5EJdHq6WiogiENfsyk2Tm9we/RALJ/b0hAxnl/bourkvnc+Z7zpxt7rlzn3MCyWQyKQAAAAAAADgFe3oBAAAAAAAAvg7oRAEAAAAAAPBAJwoAAAAAAIAHOlEAAAAAAAA80IkCAAAAAADggU4UAAAAAAAAD3SiAAAAAAAAeKATBQAAAAAAwAOdKAAAAAAAAB7oRMFWNWjQIJ199tk9Mu/rrrtOgUCgR+bdlcWLFysQCOjBBx/s6UVJe2effbby8vJ6ejFS5uyzz9agQYN6ejEAAEhrPdl2lKSDDz5YBx98sPe0u+2225ZdoG548MEHFQgEtHjx4p5elK+1l19+WYFAQC+//HJPLwp6CJ0oSIn3339fJ598sgYOHKhIJKLtt99ehx12mO6+++6eXrSUmDx5co93dNx888069thjVVpaqkAgoOuuu67T6RYuXKhLLrlE++67ryKRSNp/WTY1Nen222/XPvvso8LCQkUiEX3rW9/S+PHj9d///renFw8AgK+dth/Lnf278sor26cbNGhQ++vBYFDRaFS77767zj//fM2bN6/L+qn67n766acVCATUt29fJRKJbn3mrWXZsmW67rrr9O677/b0omzk7LPP7nK7P/vss1t1WQ4++OAO+1ZBQYGGDBmiM844Q88991y3ak+fPl133HFHahbUIR3a/0hPGT29APj6e+ONN3TIIYdowIABOu+881RWVqYlS5bozTff1J133qkJEya0T7tw4UIFg1+/vrvJkyerd+/ePfqXkF/96lcqKyvTd77zHc2ePbvL6ebOnau77rpLw4YN0y677JKWX/JtVq9erSOOOEILFizQ0UcfrR/+8IfKy8vTwoULNWPGDN17772Kx+M9vZgAAHwt3XDDDdphhx06vLbhSIlvf/vbuuyyyyRJtbW1+uijj/TYY4/pvvvu0yWXXKLbbrutw/Sp/O5++OGHNWjQIC1evFgvvviiRo0a1Y1Pu2X861//6vD/y5Yt0/XXX69Bgwbp29/+ds8slENWVpbuv//+jV7fc889ddhhh+nUU09VVlbWVlmWfv36adKkSZKk+vp6LVq0SDNnztRDDz2kU045RQ899JAyMzM3ue706dP1wQcf6OKLL07xEnfUVfv/wAMPVGNjo8Lh8BadP9IXnSjotptvvlmFhYWaP3++otFoh2zlypUd/n9rnbS/iT777DMNGjRIq1evVp8+fbqc7thjj1VVVZXy8/N16623pnUnytlnn6133nlHjz/+uE466aQO2Y033qirrrqqh5YMAICvvzFjxmjEiBHOabbffnudfvrpHV675ZZb9MMf/lC33367Bg8erAsvvLA9S9V3d319vZ544glNmjRJ06ZN08MPP5xWnSgNDQ3Kycn52v1QzsjI2Gh7ri8UCjnfn0wm1dTUpOzs7G4vS2Fh4UbL8pvf/EY/+9nPNHnyZA0aNEi33HJLt+eztQWDQUUikZ5eDPSgr9+QAKSdTz75RLvuuutGHSiSVFJS0uH/N7yutW246Zw5c/Szn/1Mffr0UTQa1QUXXKB4PK6qqiqdeeaZKioqUlFRka644golk8n293d1TaLvvUamTZumkSNHqqSkRFlZWRo2bJimTJmy0TL/+9//1iuvvNI+LHH9a2Orqqp08cUXq3///srKytLOO++sW265ZaNhqVVVVTr77LNVWFioaDSqs846S1VVVc7l23A5fBQXFys/P9+cblPWXdv9SL744gsdffTRysvL0/bbb6977rlH0rrLuUaOHKnc3FwNHDhQ06dPN+c/b948/fOf/9S55567USNMWtfhduutt270+tKlS3X88ccrLy9Pffr00eWXX67W1tYO09x6663ad9991atXL2VnZ2v48OF6/PHHN6oVCAQ0fvx4/f3vf9duu+2mrKws7brrrhsNeW27n86iRYt09tlnKxqNqrCwUOecc44aGho2qvvQQw9p+PDhys7OVnFxsU499VQtWbLEXCcAAKSD7Oxs/eUvf1FxcbFuvvnm9rbX5n53d2bWrFlqbGzU97//fZ166qmaOXOmmpqavN77f//3fzrooIOUnZ2tfv366aabbtK0adM6vYR58uTJ2nXXXZWVlaW+fftq3LhxG7W/2u5lsmDBAh144IHKycnRL3/5y/asrd338ssva++995YknXPOOe3twg3bmx9++KEOOeQQ5eTkaPvtt9dvf/vbDnlbG+yvf/2rrr/+em2//fbKz8/XySefrOrqasViMV188cUqKSlRXl6ezjnnHMViMa9149LZPVEGDRqko48+WrNnz9aIESOUnZ2tP/zhD5L827ibIhQKtY+Y/v3vf6/q6uoOudWGOvjgg/XPf/5Tn3/+efv6X7+NHIvFdO2112rnnXdWVlaW+vfvryuuuKLT9ffQQw/pu9/9rnJyclRUVKQDDzywfeSRq/3fVRv6sccea1/23r176/TTT9fSpUs7TNPWpvZpz86YMUPDhw9Xfn6+CgoKtPvuu+vOO+/c1FWOLYCRKOi2gQMHau7cufrggw82+2ZaEyZMUFlZma6//nq9+eabuvfeexWNRvXGG29owIAB+vWvf62nn35av/vd77TbbrvpzDPPTMmyT5kyRbvuuquOPfZYZWRk6Mknn9RPf/pTJRIJjRs3TpJ0xx13aMKECcrLy2v/60ppaamkdX+lOOigg7R06VJdcMEFGjBggN544w1NnDhRy5cvb79eM5lM6rjjjtOcOXP0k5/8RLvssotmzZqls846KyWfY2tobW3VmDFjdOCBB+q3v/2tHn74YY0fP165ubm66qqrNHbsWJ144omaOnWqzjzzTJWXl280hHh9//jHPyRJZ5xxxiYtw+jRo7XPPvvo1ltv1fPPP6//+Z//0U477dThr2R33nmnjj32WI0dO1bxeFwzZszQ97//fT311FM66qijOtScM2eOZs6cqZ/+9KfKz8/XXXfdpZNOOklffPGFevXq1WHaU045RTvssIMmTZqkt99+W/fff79KSko6/BXl5ptv1tVXX61TTjlFP/7xj7Vq1SrdfffdOvDAA/XOO+902tkIAMCWUF1drdWrV3d4rXfv3l7vzcvL0wknnKAHHnhAH374oXbdddfN+u7uysMPP6xDDjlEZWVlOvXUU3XllVfqySef1Pe//33n+5YuXapDDjlEgUBAEydOVG5uru6///5ORztfd911uv766zVq1ChdeOGFWrhwoaZMmaL58+fr9ddf73ApyZo1azRmzBideuqpOv3009vbeuvbZZdddMMNN+iaa67R+eefrwMOOECStO+++7ZPU1lZqSOOOEInnniiTjnlFD3++OP6xS9+od13311jxozpUG/SpEnKzs7WlVdeqUWLFunuu+9WZmamgsGgKisrdd111+nNN9/Ugw8+qB122EHXXHON17rdcJtnZmaqsLCwy+kXLlyo0047TRdccIHOO+88DRkyxLuNuzlCoZBOO+00XX311ZozZ05728ynDXXVVVepurpaX375pW6//XZJan/wQCKR0LHHHqs5c+bo/PPP1y677KL3339ft99+u/773//q73//e/syXH/99bruuuu077776oYbblA4HNa8efP04osv6vDDD3e2/zvz4IMP6pxzztHee++tSZMmacWKFbrzzjv1+uuvb9T+82nPPvfcczrttNN06KGHtrczP/roI73++uu66KKLNnvdI0WSQDf961//SoZCoWQoFEqWl5cnr7jiiuTs2bOT8Xh8o2kHDhyYPOuss9r/f9q0aUlJydGjRycTiUT76+Xl5clAIJD8yU9+0v5aS0tLsl+/fsmDDjqo/bWXXnopKSn50ksvdZjPZ599lpSUnDZtWvtr1157bXLDXb6hoWGjZRw9enRyxx137PDarrvu2mG+bW688cZkbm5u8r///W+H16+88spkKBRKfvHFF8lkMpn8+9//npSU/O1vf9vh8xxwwAEbLadl1apVSUnJa6+91pz2d7/7XVJS8rPPPtso25R1d9ZZZyUlJX/961+3v1ZZWZnMzs5OBgKB5IwZM9pf/89//uO1fCeccEJSUrKystL8HOsvww033NDh9e985zvJ4cOHd3htw+0aj8eTu+22W3LkyJEdXpeUDIfDyUWLFrW/9t577yUlJe++++7219r2nR/96EcbfYZevXq1///ixYuToVAoefPNN3eY7v33309mZGR0eP2ss85KDhw40OOTAwCwadraV539W9/AgQOTRx11VJd1br/99qSk5BNPPJFMJjf9u7srK1asSGZkZCTvu+++9tf23Xff5HHHHbfRtBu2HSdMmJAMBALJd955p/21NWvWJIuLizu0eVauXJkMh8PJww8/PNna2to+7e9///ukpOQf//jH9tcOOuigpKTk1KlTN5r/QQcd1KENOH/+/C7bbm11/vznP7e/FovFkmVlZcmTTjqp/bW2Nthuu+3Wob182mmnJQOBQHLMmDEd6paXl3u1GdraShv+a1v+tv1i/XbhwIEDk5KSzz77bIdavm3crhx00EHJXXfdtct81qxZSUnJO++8M5lMblob6qijjup0ffzlL39JBoPB5Guvvdbh9alTpyYlJV9//fVkMplMfvzxx8lgMJg84YQTOuwbyWSyw++Rrtr/G7ah4/F4sqSkJLnbbrslGxsb26d76qmnkpKS11xzTftrvu3Ziy66KFlQUJBsaWnZaP7oeVzOg2477LDDNHfuXB177LF677339Nvf/lajR4/W9ttv3/4XC8u5557b4fHD++yzj5LJpM4999z210KhkEaMGKFPP/00Zcu+/vWebX+tOeigg/Tpp59uNLywM4899pgOOOAAFRUVafXq1e3/Ro0apdbWVr366quS1t19PiMjo8NoiVAo1OGmu18HP/7xj9v/OxqNasiQIcrNzdUpp5zS/vqQIUMUjUbN7VRTUyNJXpcere8nP/lJh/8/4IADNprX+tu1srJS1dXVOuCAA/T2229vVG/UqFHaaaed2v9/jz32UEFBQafL39m816xZ0/5ZZs6cqUQioVNOOaXD/lBWVqbBgwfrpZde2qTPCgBAd9xzzz167rnnOvzbFG1/4a+trZW0+d/dG5oxY4aCwWCHS4JOO+00PfPMM6qsrHS+99lnn1V5eXmHm7oWFxdr7NixHaZ7/vnnFY/HdfHFF3d4qMF5552ngoIC/fOf/+wwfVZWls4555xufKp18vLyOtwHJBwO67vf/W6n7Yozzzyzw2iYtvbvj370ow7T7bPPPlqyZIlaWlrM+UcikY22+f/8z/8437PDDjto9OjRHV7zbeNurg33rVS0oR577DHtsssuGjp0aIcaI0eOlKT2Gn//+9+VSCR0zTXXbPTAi/V/j/h66623tHLlSv30pz/tcK+Uo446SkOHDt1oX5Ps9mw0GlV9fX23n2SELYPLeZASe++9t2bOnKl4PK733ntPs2bN0u23366TTz5Z7777roYNG+Z8/4ABAzr8f9uQw/79+2/0uvXluilef/11XXvttZo7d+5G97aorq52Dn2UpI8//lj/93//1+WNXtturPv5559ru+22a//CaDNkyJBuLP3WFYlENvqchYWF6tev30ZfOD7bqaCgQNK6L0/fS1w6W4aioqKN5vXUU0/ppptu0rvvvtvhGtjOvhg33Pe6qtnZtEVFRZLWddQUFBTo448/VjKZ1ODBgztd/s25Az0AAJvru9/9rnljWZe6ujpJX3WabM53d2fa7kWxZs0arVmzRpL0ne98R/F4XI899pjOP//8Lt/7+eefq7y8fKPXd955542mkzZua4XDYe24447teZvtt98+JTeR7axdVFRUpP/7v//baNpNaf8mEglVV1dvdKnxhkKh0CbfoLezy69927iba8N9KxVtqI8//lgfffSRucyffPKJgsGg+fvEV1f7miQNHTpUc+bM6fCaT3v2pz/9qf76179qzJgx2n777XX44YfrlFNO0RFHHJGSZUb30ImClAqHw9p77721995761vf+pbOOeccPfbYY7r22mud7+vqTuGdvZ5c78ayXfUWb3hjps588sknOvTQQzV06FDddttt6t+/v8LhsJ5++mndfvvtXjfNSiQSOuyww3TFFVd0mn/rW98ya6Sb9dfv+jZlG7nqtBk6dKikdTelbbum2GLdUV6SXnvtNR177LE68MADNXnyZG233XbKzMzUtGnTOr3h7aYsvzVtIpFQIBDQM8880+m0G3aiAQCQzj744ANJX3VQbM5394Y+/vhjzZ8/X5I6/cH88MMPOztRtpRUPI1GSk27YnPbVpurs8++pdu4G+5bqWhDJRIJ7b777hs9lrvNhp1TPcWnPVtSUqJ3331Xs2fP1jPPPKNnnnlG06ZN05lnnqk//elPW2Ep4UInCraYtr98LF++fIvNo20kwIZ3Wd/wrwudefLJJxWLxfSPf/yjw18COhsu2FVnzU477aS6ujqzx3/gwIF64YUXVFdX1+FLYOHCheZybmltwyjbrFixYqvM95hjjtGkSZP00EMPbXZDrDN/+9vfFIlENHv27A43mZs2bVrK5tGVnXbaSclkUjvssMPXsgMNAIA2dXV1mjVrlvr3769ddtlFUmq+ux9++GFlZmbqL3/5y0Y/JufMmaO77rpLX3zxRacjRaV1bapFixZt9PqGrw0cOFDSurbWjjvu2P56PB7XZ599ttmPU96cyz2+jnzbuJujtbVV06dPV05Ojvbff//2+fm2oVzt8vfee0+HHnqoczvttNNOSiQS+vDDDztcFuY7nw2tv6+1XTrUZuHChe35pgqHwzrmmGN0zDHHKJFI6Kc//an+8Ic/6Oqrr95o5BW2Lu6Jgm576aWXOu0Zf/rppyVt2UtWBg4cqFAotNF1mZMnTzbf2/bFvf6yV1dXd/pjOzc3t9PHEZ9yyimaO3euZs+evVFWVVXVfu3qkUceqZaWlg6PT25tbdXdd99tLueWtmGn0axZsyRtub92tCkvL9cRRxyh+++/v8Pd0tvE43Fdfvnlm1w3FAopEAh0GI20ePHiTueRaieeeKJCoZCuv/76jdZfMplsH7IMAEA6a2xs1BlnnKG1a9fqqquuav8xmYrv7ocfflgHHHCAfvCDH+jkk0/u8O/nP/+5JOmRRx7p8v2jR4/W3Llz9e6777a/tnbtWj388MMdphs1apTC4bDuuuuuDt/JDzzwgKqrqzd6Wp+v3NxcSRv/Ae+bxreNu6laW1v1s5/9TB999JF+9rOftV8itiltqNzc3E7vXXjKKado6dKluu+++zbKGhsbVV9fL0k6/vjjFQwGdcMNN2w08nz9eXfV/t/QiBEjVFJSoqlTp3a4jPyZZ57RRx99tFn72oZtxmAwqD322EOSUvK4a3QPI1HQbRMmTFBDQ4NOOOEEDR06VPF4XG+88YYeffRRDRo0KCU36epKYWGhvv/97+vuu+9WIBDQTjvtpKeeesrrOs3DDz+8vYf3ggsuUF1dne677z6VlJRsNHpm+PDhmjJlim666SbtvPPOKikp0ciRI/Xzn/9c//jHP3T00Ufr7LPP1vDhw1VfX6/3339fjz/+uBYvXqzevXvrmGOO0X777acrr7xSixcv1rBhwzRz5kyvm9e2+ctf/qLPP/+8/d4tr776qm666SZJ6x412NbLXV1d3d458/rrr0uSfv/73ysajSoajWr8+PEd6t53331qamrSt7/9bb311lt67LHHFAgENHPmTO2www46+OCDvZdxU/35z3/W4YcfrhNPPFHHHHOMDj30UOXm5urjjz/WjBkztHz5ct16662bVPOoo47SbbfdpiOOOEI//OEPtXLlSt1zzz3aeeedO70eOZV22mkn3XTTTZo4caIWL16s448/Xvn5+frss880a9YsnX/++ZvVMQQAwJaydOlSPfTQQ5LWjT758MMP9dhjj6miokKXXXaZLrjggg7Td+e7e968eVq0aNFGbZE222+/vfbaay89/PDD+sUvftHpNFdccYUeeughHXbYYZowYUL7I44HDBigtWvXtnf49OnTRxMnTtT111+vI444Qscee6wWLlyoyZMna++99+5w89dNsdNOOykajWrq1KnKz89Xbm6u9tlnn07vK/J15tvGdamurm7ftxoaGrRo0SLNnDlTn3zyiU499VTdeOON7dNuShtq+PDhevTRR3XppZdq7733Vl5eno455hidccYZ+utf/6qf/OQneumll7TffvuptbVV//nPf/TXv/5Vs2fP1ogRI7Tzzjvrqquu0o033qgDDjhAJ554orKysjR//nz17dtXkyZNap9PZ+3/DWVmZuqWW27ROeeco4MOOkinnXZa+yOOBw0apEsuuWST1/+Pf/xjrV27ViNHjlS/fv30+eef6+6779a3v/3t9pFh6EFb81FA+GZ65plnkj/60Y+SQ4cOTebl5SXD4XBy5513Tk6YMCG5YsWKDtN29Yjj+fPnd5iu7ZGyq1at6vD6WWedlczNze3w2qpVq5InnXRSMicnJ1lUVJS84IILkh988IHXI47/8Y9/JPfYY49kJBJJDho0KHnLLbck//jHP270+LeKiorkUUcdlczPz+/wqLhkMpmsra1NTpw4Mbnzzjsnw+Fwsnfv3sl99903eeutt3Z4bN2aNWuSZ5xxRrKgoCBZWFiYPOOMM5LvvPOO9yOO2x6b19m/9R9T3PaI4s7+rf84uLbHs02ePDn53e9+NxkOh5PDhg1LvvLKK8nTTz89mZeX1/74v87We9sydfb4OuuRietraGhI3nrrrcm99967ff8ZPHhwcsKECR0ePdzVMnS2XR944IHk4MGDk1lZWcmhQ4cmp02b1ul0kpLjxo3rdPnX30+72h87e1RgMplM/u1vf0vuv//+ydzc3GRubm5y6NChyXHjxiUXLlzY4fPwiGMAwJbQVftqQ22Pt5WUDAQCyYKCguSuu+6aPO+885Lz5s3r8n2+390bmjBhQlJS8pNPPulymuuuuy4pKfnee++1L+P638nJZDL5zjvvJA844IBkVlZWsl+/fslJkyYl77rrrqSkZEVFRYdpf//73yeHDh2azMzMTJaWliYvvPDCjR7R7Hoc74aPOE4mk8knnngiOWzYsGRGRkaHdlxXdTb8zm9rgz322GMdptvUdnFn8+msrbRh/Q0fcdxVm823jduZDduteXl5ycGDBydPP/305L/+9a8u3+fThqqrq0v+8Ic/TEaj0Y3at/F4PHnLLbckd91112RWVlayqKgoOXz48OT111+frK6u7jCvP/7xj8nvfOc77dMddNBByeeee64976r9v+Ejjts8+uij7fWKi4uTY8eOTX755ZcdpvFtzz7+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rVy50pn7dLRHIp0fz21aWuzt1tjo3sdyc+0WQWNjgzP3ORaqqqqdeUtLjTOXpETC+rVgP23O2rY+T6zr06fEmVvHm2Sfg5qaYmaNoqKibs1Dss+ntbX2dmlo6Hr/aGqy14W0ifdE6devn37zm99owYIFeuuttzRy5Egdd9xx+ve//y1JuuSSS/Tkk0/qscce0yuvvKJly5bpxBNP3JRZAACA9W2BG8suWbJE1dXV7f8mTpxoLsa4ceP0wQcfaMaMGe2v9enTR4899piefPJJ5eXlqbCwUFVVVdprr728GkO+/vKXv2i//fZT37599fnnn0uS7rjjDj3xxBMpmwfWoa0HAIDbJo1EOeaYYzr8/80336wpU6bozTffVL9+/fTAAw9o+vTpGjly3d8Dp02bpl122UVvvvmmvve976VuqQEAwGYrKCjw+kt/m/Hjx7ffELZfv34dssMPP1yffPKJVq9erYyMDEWjUZWVlWnHHXeUJJWVlW30F86WlhatXbtWZWVl5rynTJmia665RhdffLFuvvnm9nugRKNR3XHHHTruuOO8PwdstPUAAHDb7D8Ttba2asaMGaqvr1d5ebkWLFig5uZmjRo1qn2aoUOHasCAAZo7d25KFhYAgG1OQusu6UnFv028sWwymdT48eM1a9Ysvfjii9phhx26nLZ3796KRqN68cUXtXLlSh177LGSpPLyclVVVWnBggXt07744otKJBLaZx/7Iry7775b9913n6666qoOQ9JHjBih999/f9M+EDYJbT0AADa2yTeWff/991VeXq6mpibl5eVp1qxZGjZsmN59912Fw2FFo9EO05eWljqveY7FYorFvrqGasOb3QEAgJ4xbtw4TZ8+XU888YTy8/Pbv88LCwvb72XRNhKhT58+mjt3ri666CJdcsklGjJk3d2SdtllFx1xxBE677zzNHXqVDU3N2v8+PE69dRTzSfzSOtuLPud73xno9ezsrLM+0hg89DWAwCga5s8EmXIkCF69913NW/ePF144YU666yz9OGHH272AkyaNEmFhYXt/za82R0AANu0LXBPFF9TpkxRdXW1Dj74YG233Xbt/x599NH2aRYuXKjjjz9eu+yyi2644QZdddVVuvXWWzvUefjhhzV06FAdeuihOvLII7X//vvr3nvv9VqGHXbYQe++++5Grz/77LPaZZddNu0D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849RVwBhQq+3dPR6waLXCx693vKizyuOUE+ivPfee+rq6tL+/ft15swZNTU1adeuXRobGyv20ErC1NSUmpqadOjQoRvGX375ZR08eFBvvvmmTp06pcrKSu3atUvpdHqFR1oa+vr6lEqldPLkSfX29iqTyejBBx/U1NRU/jnPP/+8PvroIx09elR9fX06f/68Hn/88SKOOtzq6+t14MAB9ff365tvvtEDDzygRx99VN99950k6lmo06dP66233tL27dsXPE5dAYQFvV5h6PWCRa8XPHq95UOfV0ReiLW0tHipVCr/czab9erq6rzu7u4ijqo0SfJ6enryP+dyOS+ZTHqvvPJK/rErV654sVjMe/fdd4swwtIzNjbmSfL6+vo8z5uv3+rVq72jR4/mn/P99997krwTJ04Ua5glZ/369d7bb79NPQs0MTHhbd261evt7fXuv/9+b+/evZ7nsZ8CCBd6veDQ6wWPXm950OsVjj6vuEJ7Jcrs7Kz6+/vV3t6ef6y8vFzt7e06ceJEEUd2cxgaGtLIyMiC+lZXV2vnzp3U19HVq1clSTU1NZKk/v5+ZTKZBTW988471dDQQE0dZLNZHTlyRFNTU2ptbaWeBUqlUnr44YcX1E9iPwUQHvR6y4ter3D0esGi1wsOfV5xRYo9gMVcvHhR2WxWtbW1Cx6vra3VuXPnijSqm8fIyIgk3bC+12NYXC6XU2dnp+677z7dddddkuZrGo1GtW7dugXPpab+zp49q9bWVqXTaa1du1Y9PT3atm2bBgYGqOcSHTlyRGfOnNHp06d/EWM/BRAW9HrLi16vMPR6waHXCxZ9XvGFdhIFCLNUKqVvv/1WX331VbGHUvLuuOMODQwM6OrVq3r//ffV0dGhvr6+Yg+rZA0PD2vv3r3q7e1VPB4v9nAAAChJ9HrBodcLDn1eOIT2dp5bbrlFq1at+sU3CY+OjiqZTBZpVDeP6zWkvr/enj179PHHH+v48eOqr6/PP55MJjU7O6srV64seD419ReNRnX77berublZ3d3dampq0muvvUY9l6i/v19jY2O6++67FYlEFIlE1NfXp4MHDyoSiai2tpa6AggFer3lRa+3dPR6waLXCw59XjiEdhIlGo2qublZx44dyz+Wy+V07Ngxtba2FnFkN4fGxkYlk8kF9R0fH9epU6eo7yI8z9OePXvU09Ojzz//XI2NjQvizc3NWr169YKaDg4O6qeffqKmv0Iul9PMzAz1XKK2tjadPXtWAwMD+T87duzQk08+mf87dQUQBvR6y4te79ej11sZ9HpLR58XDqG+naerq0sdHR3asWOHWlpa9Oqrr2pqakpPPfVUsYdWEiYnJ/Xjjz/mfx4aGtLAwIBqamrU0NCgzs5OvfTSS9q6dasaGxu1b98+1dXVaffu3cUbdIilUikdPnxYH374oaqqqvL3FVZXV6uiokLV1dV65pln1NXVpZqaGiUSCT333HNqbW3VvffeW+TRh9MLL7yghx56SA0NDZqYmNDhw4f1xRdf6NNPP6WeS1RVVZW/d/u6yspKbdiwIf84dQUQFvR6haHXCxa9XvDo9YJFnxcSxV4eyPL66697DQ0NXjQa9VpaWryTJ08We0gl4/jx456kX/zp6OjwPG9+6bt9+/Z5tbW1XiwW89ra2rzBwcHiDjrEblRLSd4777yTf8709LT37LPPeuvXr/fWrFnjPfbYY96FCxeKN+iQe/rpp73bbrvNi0aj3q233uq1tbV5n332WT5OPYPxf5e+8zzqCiBc6PWWjl4vWPR6waPXW370eSuvzPM8byUnbQAAAAAAAEpRaL8TBQAAAAAAIEyYRAEAAAAAAHDAJAoAAAAAAIADJlEAAAAAAAAcMIkCAAAAAADggEkUAAAAAAAAB0yiAAAAAAAAOGASBQAAAAAAwAGTKAAAAAAAAA6YRAEAAAAAAHDAJAoAAAAAAIADJlEAAAAAAAAc/A8hTWoVqomLagAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Number of fire pixels detected: 0\n" + ] + } + ] }, - "ab51866f1a11495eb0e2ec95039082dc": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletWidgetControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletWidgetControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletWidgetControlView", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "options": [ - "position", - "transparent_bg" + { + "cell_type": "markdown", + "source": [ + "### Data Transformation: Applying the Fire Detection Algorithm (FDC)\n", + "\n", + "There are additional steps associated with the algorithm such as estimating its **fire radiative power (FRP)** which represents the brightness or intensity of a fire in the confirmed pixel. From there, the algorithm then assigns a confidence value towards the probability of an actual fire being reflected from the pixel and plots it on a map to build a fire perimeter.\n", + "\n", + "For the sake of brevity, we can cover the complexities behind these confidence values in a future article so for now, take these explanations at face value. At this point in the code, we are now assigning `confidence_values` between 50-100% to the outputs produced by the algorithm. With a single output, if the algorithm returns a value of `15`, it's classifying it as a low probability fire pixel at 50% and in contrast, if it returns a value of `10`, there's a near 100% probability that it is a processed fire pixel (Restif & Hoffman, 2020). The resulting values from this process are captured in the `goes_16_confidence` and `goes_17_confidence` objects in the following code." ], - "position": "topright", - "transparent_bg": false, - "widget": "IPY_MODEL_5ab5ad8185c249229caaf19d8808d04e" - } - }, - "ad00c5871f02441898e0eb15355f707a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "auto", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 4px", - "right": null, - "top": null, - "visibility": null, - "width": "auto" - } - }, - "ad333e3f1fe3421684815c2566328924": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "28px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": "72px" - } + "metadata": { + "id": "pFhtnzFIjgJD" + } }, - "b2856e01a3854c30a01268d6d847a4da": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletAttributionControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletAttributionControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletAttributionControlView", - "options": [ - "position", - "prefix" + { + "cell_type": "code", + "source": [ + "# Conversion from mask codes to confidence values.\n", + "fire_mask_codes = [10, 30, 11, 31, 12, 32, 13, 33, 14, 34, 15, 35]\n", + "confidence_values = [1.0, 1.0, 0.9, 0.9, 0.8, 0.8, 0.5, 0.5, 0.3, 0.3, 0.1, 0.1]\n", + "default_confidence_value = 0\n", + "\n", + "# Processing the GOES-16 satellite images\n", + "goes_16_confidence = goes_16.select([\"Mask\"]).map(map_from_mask_codes_to_confidence_values)\n", + "goes_16_max_confidence = goes_16_confidence.reduce(ee.Reducer.max())\n", + "\n", + "# Processing the GOES-17 satellite images\n", + "goes_17_confidence = goes_17.select([\"Mask\"]).map(map_from_mask_codes_to_confidence_values)\n", + "goes_17_max_confidence = goes_17_confidence.reduce(ee.Reducer.max())" ], - "position": "bottomright", - "prefix": "ipyleaflet" - } + "metadata": { + "id": "Hin2lrkHYshb", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17 + }, + "outputId": "d642a02e-c333-4236-8512-2b461d473106" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + } + ] }, - "b56764dc4edf4a6b852eeb94813465cf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "GridBoxModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "GridBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "GridBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_cdee68c696484bea812a894f65a3f12c", - "IPY_MODEL_ef8fc14efe174e0e9fa8cd8adc5410ee", - "IPY_MODEL_dca45c47f02548e995f2dbad100daad1" + { + "cell_type": "markdown", + "source": [ + "### Data Visualization\n", + "\n", + "Now, one last thing. Since the satellites collect data over a specific time range, the probability of a fire in a given pixel may vary greatly due to the evolving nature of the on-ground event. Although the temporal aspect of the data itself contains plenty of valuable information, in this instance, we're more concerned with generating a broad outline of the fire boundary. To do so, we can use the `ee.Reducer.max()` function to return the highest confidence value of each pixel within the specified time range (Restif & Hoffman, 2020). We'll apply this to both the `goes_16_confidence` and the `goes_17_confidence` objects before overlaying the specific pixel plots on our map below." ], - "layout": "IPY_MODEL_2aedf7599327489699d5ed8540457f98" - } - }, - "b7450505c65648f39dff1fc0140322f0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "wrench", - "layout": "IPY_MODEL_7203de29c95e43408e7593e2175f8630", - "style": "IPY_MODEL_3b0d7e2b818545d0bf00e75db591bf17", - "tooltip": "Toolbar", - "value": false - } - }, - "bed712ce36ce4bff9719f1e09c9e37b0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "wrench", - "layout": "IPY_MODEL_6476a8ee57c249b9843df37d61640421", - "style": "IPY_MODEL_5cf55f8758334ac29f935ceae044e2d4", - "tooltip": "Toolbar", - "value": false - } - }, - "c11fcb2bc7e14aee9b2f3a99c89c172e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "c26e8c080d464664b7024abd238b6718": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "auto", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 4px", - "right": null, - "top": null, - "visibility": null, - "width": "auto" - } - }, - "c4c81b26a1284ba0b795c12b86d78d53": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "grab" - } + "metadata": { + "id": "iiq-Rd_SmZEQ" + } }, - "ca2b34d262fb4496b132243083638856": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletDrawControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletDrawControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletDrawControlView", - "circle": {}, - "circlemarker": {}, - "data": [], - "edit": true, - "marker": { - "shapeOptions": { - "color": "#3388ff" - } - }, - "options": [ - "position" + { + "cell_type": "code", + "source": [ + "# We can visualize that initial data processing step from each satellite, using:\n", + "affected_area_palette = [\"white\", \"yellow\", \"orange\", \"red\", \"purple\"]\n", + "\n", + "earth_engine_viz = {\n", + " \"opacity\": 0.3,\n", + " \"min\": 0,\n", + " \"max\": 1,\n", + " \"palette\": affected_area_palette\n", + " }\n", + "\n", + "# Create a map.\n", + "Map = geemap.Map()\n", + "Map.centerObject(poi, 9)\n", + "Map.addLayer(poi, {\"color\": \"green\"}, \"Area of interest\", True, 0.2)\n", + "Map.addLayer(goes_16_max_confidence, earth_engine_viz, \"GOES-16 maximum confidence\")\n", + "Map.addLayer(goes_17_max_confidence, earth_engine_viz, \"GOES-17 maximum confidence\")\n", + "Map" ], - "polygon": { - "shapeOptions": {} - }, - "polyline": { - "shapeOptions": {} + "metadata": { + "id": "lh4HOGb7dU-b", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 621, + "referenced_widgets": [ + "9470415a9dc44809940f3c967e24de34", + "385ae06f43094e4e97e9dce81756621c", + "04ac8eb0c97a48adaa2589588bd6a481", + "e464f2d84e484efaa405e812e423e541", + "f7d1501fcbb24550b305c1e857824d96", + "ab51866f1a11495eb0e2ec95039082dc", + "b2856e01a3854c30a01268d6d847a4da", + "02d2ce2c1d094866b5d3370f6e917f53", + "83a930218ccf459da373a6162244ff3e", + "8e5b9cb56d904a299c1146c05f720cde", + "02f4a049e36e4963bc8446e3fc80a4a2", + "8380126b3a7b4110a82fdec0a7f0833b", + "93a7ffc87ec546ccb7f5ea8dffb53b23", + "a208756ef0614a63a2f2bc7e060b22de", + "93849482fcc94f20b3e1abc8b73c6915", + "5ab5ad8185c249229caaf19d8808d04e", + "7f3796cf17e044679c73ce6513c249c3", + "9156829da21a4f7797d7fad70631365f", + "3c16f5b1ab8f4af98c27a2b618303549", + "2f084073179c49efba19584acd27a353", + "c26e8c080d464664b7024abd238b6718", + "c11fcb2bc7e14aee9b2f3a99c89c172e", + "cfef96a5039c4dbea3c7b0d605089bbd", + "009300d787f040b187f0f9be8b3b5c92", + "ad00c5871f02441898e0eb15355f707a", + "d5a226f7fbbe4cc0877735da3c656f68", + "cdee68c696484bea812a894f65a3f12c", + "ef8fc14efe174e0e9fa8cd8adc5410ee", + "dca45c47f02548e995f2dbad100daad1", + "2aedf7599327489699d5ed8540457f98", + "ad333e3f1fe3421684815c2566328924", + "d485ac9f212943af9ab0eae60e589588", + "a367aaf12c2945579728b3487aa97de6", + "fcd71ba8dfbb4ae3ad80cda3efc5460e", + "00c34898babb44598172f5edb305928e", + "b56764dc4edf4a6b852eeb94813465cf" + ] + }, + "outputId": "34be02cd-1b53-4cca-ce8d-e9d42893037f" }, - "position": "topleft", - "rectangle": { - "shapeOptions": { - "color": "#3388ff" - } - }, - "remove": true - } - }, - "cdee68c696484bea812a894f65a3f12c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "primary", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "map", - "layout": "IPY_MODEL_c26e8c080d464664b7024abd238b6718", - "style": "IPY_MODEL_c11fcb2bc7e14aee9b2f3a99c89c172e", - "tooltip": "Basemap selector", - "value": false - } - }, - "cfef96a5039c4dbea3c7b0d605089bbd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "auto", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": "0px 0px 0px 4px", - "right": null, - "top": null, - "visibility": null, - "width": "auto" - } - }, - "d485ac9f212943af9ab0eae60e589588": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } - }, - "d5a226f7fbbe4cc0877735da3c656f68": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "DescriptionStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "description_width": "" - } + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Map(center=[50.23128609777502, -121.58153879631847], controls=(ZoomControl(options=['position', 'zoom_in_text'…" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "9470415a9dc44809940f3c967e24de34" + } + }, + "metadata": { + "application/vnd.jupyter.widget-view+json": { + "colab": { + "custom_widget_manager": { + "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js" + } + } + } + } + } + ] }, - "d63f91597a284fc0870c59077f043695": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletWidgetControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletWidgetControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletWidgetControlView", - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "options": [ - "position", - "transparent_bg" + { + "cell_type": "markdown", + "source": [ + "From our initial results, we can see two iterations of the FDC Algorithm layered over top of each other on the map. We can combine the results of our two satellite images to increase the spatial resolution of our wildfire perimeter using the `ee.Reducer.min()` function which returns the lesser of the two confidence values where the two layers intersect (Restif & Hoffman, 2020)." ], - "position": "topright", - "transparent_bg": false, - "widget": "IPY_MODEL_e5569bde1b8c40fab5cf4911bd4aeeec" - } + "metadata": { + "id": "IkWC8o-feLwz" + } }, - "d7e2e560a45149f0b0c4438e2ebf61eb": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapModel", - "state": { - "_dom_classes": [], - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletMapView", - "bottom": 44621, - "bounce_at_zoom_limits": true, - "box_zoom": true, - "center": [ - 50.23128609777502, - -121.58153879631847 - ], - "close_popup_on_click": true, - "controls": [ - "IPY_MODEL_2d4a017cbf4f4a5c8b122bda2b82b0f3", - "IPY_MODEL_71c314d945d34598bc7de1aad53f42bd", - "IPY_MODEL_ca2b34d262fb4496b132243083638856", - "IPY_MODEL_0df9d456f17c4f8db7c7a50045cc482f", - "IPY_MODEL_21560dbaff1b4ecaae9a91b1a7f48e4f", - "IPY_MODEL_105e20950122479695f20fba4b9ae7ca" + { + "cell_type": "code", + "source": [ + "# Combine the confidence values from both GOES-16 and GOES-17 using the minimum reducer\n", + "combined_confidence = ee.ImageCollection([goes_16_max_confidence, goes_17_max_confidence]).reduce(ee.Reducer.min())\n", + "\n", + "# Create a map\n", + "Map = geemap.Map()\n", + "Map.centerObject(poi, 9)\n", + "Map.addLayer(poi, {\"color\": \"green\"}, \"Area of interest\", True, 0.2)\n", + "Map.addLayer(combined_confidence, earth_engine_viz, \"Combined confidence\")\n", + "\n", + "# Display the map\n", + "Map" ], - "crs": { - "custom": false, - "name": "EPSG3857" + "metadata": { + "id": "rVEaK3EgdU7T", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 621, + "referenced_widgets": [ + "491583fa5edf4d398f9a5e5ca71d54aa", + "f64b26b56ac84e389d657dbe460c67fc", + "28cdeb24a4bc48e7b6b179e9ab47d80d", + "75a80c80751a418ebf8c6f0563182140", + "9844fe02dbb747b6bb427572cc9db899", + "d63f91597a284fc0870c59077f043695", + "8f21bd7200f447c1aac3f659765ad118", + "c4c81b26a1284ba0b795c12b86d78d53", + "fec77abaf75c4932adffead454232a80", + "de4eddaa83244e3498bbd8d996b6cf30", + "fbadb1c98fdd45d994d546a95eac0ec6", + "060ec89c7e43471ca7da47ad99803113", + "0b106a2e37a94d44a48890258b6532f6", + "fcebfde4194d42198a3b84d5ff1e44b5", + "e5569bde1b8c40fab5cf4911bd4aeeec", + "bed712ce36ce4bff9719f1e09c9e37b0", + "78c4e94b6d794cd6a0ce7d86257adb01", + "6476a8ee57c249b9843df37d61640421", + "5cf55f8758334ac29f935ceae044e2d4" + ] + }, + "outputId": "4bc0ddfe-dab5-44ec-f086-ace639a5bee3" }, - "default_style": "IPY_MODEL_4f986b444bd9413fb5fbaee7480b4d17", - "double_click_zoom": true, - "dragging": true, - "dragging_style": "IPY_MODEL_fe3dd408629d42cbb59eec5fb32c0356", - "east": -120.41015625000001, - "fullscreen": false, - "inertia": true, - "inertia_deceleration": 3000, - "inertia_max_speed": 1500, - "interpolation": "bilinear", - "keyboard": true, - "keyboard_pan_offset": 80, - "keyboard_zoom_offset": 1, - "layers": [ - "IPY_MODEL_3fc7cb02d14746b28d9747e11e88c04d", - "IPY_MODEL_20e6f269bc7f4def88a5c59d7443d40c", - "IPY_MODEL_9d8272167ce64ea5a5bc262061ff965f" - ], - "layout": "IPY_MODEL_da40b07b4db04ec8a27323a78cbe0564", - "left": 20844, - "max_zoom": null, - "min_zoom": null, - "modisdate": "2024-11-10", - "north": 50.75557231232454, - "options": [ - "bounce_at_zoom_limits", - "box_zoom", - "center", - "close_popup_on_click", - "double_click_zoom", - "dragging", - "fullscreen", - "inertia", - "inertia_deceleration", - "inertia_max_speed", - "interpolation", - "keyboard", - "keyboard_pan_offset", - "keyboard_zoom_offset", - "max_zoom", - "min_zoom", - "prefer_canvas", - "scroll_wheel_zoom", - "tap", - "tap_tolerance", - "touch_zoom", - "world_copy_jump", - "zoom", - "zoom_animation_threshold", - "zoom_delta", - "zoom_snap" - ], - "panes": {}, - "prefer_canvas": false, - "right": 21696, - "scroll_wheel_zoom": true, - "south": 49.70139134233472, - "style": "IPY_MODEL_588d2c29aa5b43e58b0e6b4223951e72", - "tap": true, - "tap_tolerance": 15, - "top": 44021, - "touch_zoom": true, - "west": -122.75024414062501, - "window_url": "https://h8bukvs53mh-496ff2e9c6d22116-0-colab.googleusercontent.com/outputframe.html?vrz=colab_20241107-060106_RC01_694212549", - "world_copy_jump": false, - "zoom": 9, - "zoom_animation_threshold": 4, - "zoom_delta": 1, - "zoom_snap": 1 - } - }, - "da40b07b4db04ec8a27323a78cbe0564": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": "600px", - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "dca45c47f02548e995f2dbad100daad1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "primary", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "question", - "layout": "IPY_MODEL_ad00c5871f02441898e0eb15355f707a", - "style": "IPY_MODEL_d5a226f7fbbe4cc0877735da3c656f68", - "tooltip": "Get help", - "value": false - } + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Map(center=[50.23128609777502, -121.58153879631847], controls=(ZoomControl(options=['position', 'zoom_in_text'…" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "491583fa5edf4d398f9a5e5ca71d54aa" + } + }, + "metadata": { + "application/vnd.jupyter.widget-view+json": { + "colab": { + "custom_widget_manager": { + "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js" + } + } + } + } + } + ] }, - "de4eddaa83244e3498bbd8d996b6cf30": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "© OpenStreetMap contributors", - "base": true, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 19, - "min_native_zoom": null, - "min_zoom": 1, - "name": "OpenStreetMap.Mapnik", - "no_wrap": false, - "opacity": 1, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" + { + "cell_type": "markdown", + "source": [ + "With the results of our two satellites combined, notice how the generated boundary is highly pixelated due to the image quality of the satellites. One last thing we can do to our wildfire boundary is to smooth the boundaries between the combined fire masks using the `ee.Image.reduceNeighborhood()` function." ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://tile.openstreetmap.org/{z}/{x}/{y}.png", - "visible": true, - "zoom_offset": 0 - } + "metadata": { + "id": "ZLtAfskkgXF_" + } }, - "e464f2d84e484efaa405e812e423e541": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletDrawControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletDrawControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletDrawControlView", - "circle": {}, - "circlemarker": {}, - "data": [], - "edit": true, - "marker": { - "shapeOptions": { - "color": "#3388ff" - } - }, - "options": [ - "position" + { + "cell_type": "code", + "source": [ + "# Define the kernel for smoothing\n", + "kernel = ee.Kernel.square(2000, \"meters\", True)\n", + "\n", + "# Apply the smoothing using reduceNeighborhood with the mean reducer\n", + "smoothed_confidence = combined_confidence.reduceNeighborhood(\n", + " reducer=ee.Reducer.mean(),\n", + " kernel=kernel,\n", + " optimization=\"boxcar\"\n", + ")\n", + "\n", + "# Create a map\n", + "Map = geemap.Map()\n", + "Map.centerObject(poi, 9)\n", + "Map.addLayer(poi, {\"color\": \"green\"}, \"Area of interest\", True, 0.2)\n", + "Map.addLayer(smoothed_confidence, earth_engine_viz, \"Smoothed confidence\")\n", + "\n", + "# Display the map\n", + "Map" ], - "polygon": { - "shapeOptions": {} - }, - "polyline": { - "shapeOptions": {} + "metadata": { + "id": "invP31ehdU2T", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 621, + "referenced_widgets": [ + "d7e2e560a45149f0b0c4438e2ebf61eb", + "2d4a017cbf4f4a5c8b122bda2b82b0f3", + "71c314d945d34598bc7de1aad53f42bd", + "ca2b34d262fb4496b132243083638856", + "0df9d456f17c4f8db7c7a50045cc482f", + "21560dbaff1b4ecaae9a91b1a7f48e4f", + "105e20950122479695f20fba4b9ae7ca", + "4f986b444bd9413fb5fbaee7480b4d17", + "fe3dd408629d42cbb59eec5fb32c0356", + "3fc7cb02d14746b28d9747e11e88c04d", + "20e6f269bc7f4def88a5c59d7443d40c", + "9d8272167ce64ea5a5bc262061ff965f", + "da40b07b4db04ec8a27323a78cbe0564", + "588d2c29aa5b43e58b0e6b4223951e72", + "4ec94c173362464d94362df255516a9c", + "b7450505c65648f39dff1fc0140322f0", + "f74f5b1f50424e18bc1062d4b7984706", + "7203de29c95e43408e7593e2175f8630", + "3b0d7e2b818545d0bf00e75db591bf17" + ] + }, + "outputId": "2849d881-1ef6-4730-d2f5-699f11ffc721" }, - "position": "topleft", - "rectangle": { - "shapeOptions": { - "color": "#3388ff" - } - }, - "remove": true - } - }, - "e5569bde1b8c40fab5cf4911bd4aeeec": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "VBoxModel", - "state": { - "_dom_classes": [ - "geemap-colab" - ], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "VBoxModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "VBoxView", - "box_style": "", - "children": [ - "IPY_MODEL_bed712ce36ce4bff9719f1e09c9e37b0" - ], - "layout": "IPY_MODEL_78c4e94b6d794cd6a0ce7d86257adb01" - } - }, - "ef8fc14efe174e0e9fa8cd8adc5410ee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ToggleButtonModel", - "state": { - "_dom_classes": [], - "_model_module": "@jupyter-widgets/controls", - "_model_module_version": "1.5.0", - "_model_name": "ToggleButtonModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/controls", - "_view_module_version": "1.5.0", - "_view_name": "ToggleButtonView", - "button_style": "primary", - "description": "", - "description_tooltip": null, - "disabled": false, - "icon": "info", - "layout": "IPY_MODEL_cfef96a5039c4dbea3c7b0d605089bbd", - "style": "IPY_MODEL_009300d787f040b187f0f9be8b3b5c92", - "tooltip": "Inspector", - "value": false - } + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "" + ], + "text/html": [ + "\n", + " \n", + " " + ] + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Map(center=[50.23128609777502, -121.58153879631847], controls=(ZoomControl(options=['position', 'zoom_in_text'…" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "d7e2e560a45149f0b0c4438e2ebf61eb" + } + }, + "metadata": { + "application/vnd.jupyter.widget-view+json": { + "colab": { + "custom_widget_manager": { + "url": "https://ssl.gstatic.com/colaboratory-static/widgets/colab-cdn-widget-manager/2b70e893a8ba7c0f/manager.min.js" + } + } + } + } + } + ] }, - "f64b26b56ac84e389d657dbe460c67fc": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletZoomControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletZoomControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletZoomControlView", - "options": [ - "position", - "zoom_in_text", - "zoom_in_title", - "zoom_out_text", - "zoom_out_title" + { + "cell_type": "markdown", + "source": [ + "There you have it! A near real-time wildfire boundary using Python to deploy the FDC Algorithm on GOES-16 and 17 satellite images from Google's Data Catalog platform. However, as with most technologies, the use of the FDC on GOES-16/17 images doesn't come without its weaknesses which we'll discuss to have a better understanding of the situations where other technologies would be more appropriate.\n", + "\n", + "One risk with using the FDC algorithm on GOES-16/17 images is its tendency to detect false positives with an image. For example, reflective surfaces from buildings in urban areas or lakes and dry vegetation in a forest may be misconstrued as a fire.\n", + "\n", + "Additionally, the image resolution from GOES-16/17 satellites is poorer compared to other data collection techniques. We saw this first-hand from the pixelated fire perimeter we produced in our initial effort applying the FDC algorithm. The reason why the wildfire perimeter was so pixelated is because each pixel captures anywhere between 4-36 $km^2$ depending on how far the area is from the centre of the image. Due to the spherical shape of the Earth and the satellite's position, the farther an area is from the centre of an image, the lower its image quality. For wildfire detection, what this means is that activities smaller than the pixel size may either be mischaracterized or missed completely.\n", + "\n", + "Another aspect to consider is the terrain of the area of interest. This risk is mostly attributed to mountainous terrain where the lee ward side of a mountain may obfuscate a satellite's view in that area.\n", + "\n", + "To mitigate these risks, we must use other imaging techniques and technologies alongside GOES-16/17 data to gain a clearer understanding of the ground situation. As we've previously discussed, high-resolution data from Sentinel-2 and Landsat satellites can be highly complementary when they're available as it allows us to cross-validate our resulting wildfire boundaries. On top of that, ground observations and aerial drone surveys add another layer of validation to a highly dynamic event.\n", + "\n", + "By executing the FDC algorithm on GOES-16/17 data, there's little doubt that this approach can be a powerful asset in helping us build wildfire perimeters in real time as part of a broader mitigation strategy with other sensory techniques." ], - "position": "topleft", - "zoom_in_text": "+", - "zoom_in_title": "Zoom in", - "zoom_out_text": "-", - "zoom_out_title": "Zoom out" - } - }, - "f74f5b1f50424e18bc1062d4b7984706": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } + "metadata": { + "id": "AgELtmT6i-re" + } }, - "f7d1501fcbb24550b305c1e857824d96": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletScaleControlModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletScaleControlModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletScaleControlView", - "imperial": true, - "max_width": 100, - "metric": true, - "options": [ - "imperial", - "max_width", - "metric", - "position", - "update_when_idle" + { + "cell_type": "markdown", + "source": [ + "If you've made it this far, thank you as always for taking the time to read through this tutorial! We hope that we played a role in reducing the barrier to entry in remote sensing and have empowered you with the tools to get started. As our summers get warmer and the proliferation of climate emergencies increases, the work of data science professionals will only become more essential in helping emergency teams save lives, protect property, and reduce suffering." ], - "position": "bottomleft", - "update_when_idle": false - } + "metadata": { + "id": "CyITs90YzY-I" + } }, - "fbadb1c98fdd45d994d546a95eac0ec6": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletTileLayerModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletTileLayerModel", - "_view_count": null, - "_view_module": "jupyter-leaflet", - "_view_module_version": "^0.18", - "_view_name": "LeafletTileLayerView", - "attribution": "Google Earth Engine", - "base": false, - "bottom": true, - "bounds": null, - "detect_retina": false, - "loading": false, - "max_native_zoom": null, - "max_zoom": 24, - "min_native_zoom": null, - "min_zoom": 0, - "name": "Area of interest", - "no_wrap": false, - "opacity": 0.2, - "options": [ - "attribution", - "bounds", - "detect_retina", - "max_native_zoom", - "max_zoom", - "min_native_zoom", - "min_zoom", - "no_wrap", - "tile_size", - "tms", - "zoom_offset" + { + "cell_type": "markdown", + "source": [ + "## Resources\n", + "\n", + "- Braaten, J. (2022, January, 7). Sentinel-2 Cloud Masking with s2cloudless. *Google Earth Engine.* https://developers.google.com/earth-engine/tutorials/community/sentinel-2-s2cloudless\n", + "\n", + "- BC Public Service. (2023, December 7). *Wildfire Season Summary*. https://www2.gov.bc.ca/gov/content/safety/wildfire-status/about-bcws/wildfire-history/wildfire-season-summary\n", + "\n", + "- European Space Agency. (2024). S2 mission. https://sentiwiki.copernicus.eu/web/s2-mission\n", + "\n", + "- Kulkarni, A. (2023, July 3). *What happens after the Donnie Creek wildfire, now larger than P.E.I., stops burning? CBC.* https://www.cbc.ca/news/canada/british-columbia/donnie-creek-wildfire-aftermath-1.6892294\n", + "\n", + "- Lindsay, B. & Dickson, C. (2021, July 1). *Village of Lytton, B.C., evacuated as mayor says 'the whole town is on fire.' CBC.* https://www.cbc.ca/news/canada/british-columbia/bc-wildfires-june-30-2021-1.6085919\n", + "\n", + "- National Oceananic and Atmospheric Association (NOAA) & National Aeronautics and Space Administration (NASA). (2024). Beginner's guide to GOES-R series data: How to acquire, analyze, and visualize GOES-R Series data. https://www.goes-r.gov/downloads/resources/documents/Beginners_Guide_to_GOES-R_Series_Data.pdf\n", + "\n", + "- National Oceananic and Atmospheric Association (NOAA) & National Aeronautics and Space Administration (NASA). (n.d.). Instruments: Advanced baseline imager (ABI). https://www.goes-r.gov/spacesegment/abi.html\n", + "\n", + "- Restif, C. & Hoffman, A. (2020, November 20). How to generate wildfire boundary maps with Earth Engine. *Medium*. https://medium.com/google-earth/how-to-generate-wildfire-boundary-maps-with-earth-engine-b38eadc97a38\n", + "\n", + "- Schmidt, C., Hoffman, J., Prins, E., & Lindstrom, S. (2012, July 30). GOES-R Advanced Baseline Imager (ABI) algorithm theoretical basis document for\n", + "fire / hot spot characterization. NOAA NESDIS Center for Satellite Applications and Research. https://www.star.nesdis.noaa.gov/goesr/docs/ATBD/Fire.pdf\n", + "\n", + "- Stull, R. & Rodell, C. (2023, November 18). Case: Sparks Lake, BC. *UBC Earth, Ocean, and Atomspheric Sciences.* https://www.eoas.ubc.ca/courses/atsc413/cases/sparks_lake_BC/index.html\n", + "\n", + "- Watson, B. & Lindsay, B. (2021, June 29). *Homes evacuated as out-of-control wildfires grow in B.C.'s Interior CBC.* https://www.cbc.ca/news/canada/british-columbia/wildfires-interior-bc-1.6084445\n", + "\n", + "- United Nations: Office for Outer Space Affairs. (n.d.). Normalized Burn Ratio (NBR). https://un-spider.org/advisory-support/recommended-practices/recommended-practice-burn-severity/in-detail/normalized-burn-ratio" ], - "pane": "", - "popup": null, - "popup_max_height": null, - "popup_max_width": 300, - "popup_min_width": 50, - "show_loading": false, - "subitems": [], - "tile_size": 256, - "tms": false, - "url": "https://earthengine.googleapis.com/v1/projects/bc-wildfire-422905/maps/949cdc3eaef037d03d1f783d22744dda-8e8800e25784505b662842f083f820ff/tiles/{z}/{x}/{y}", - "visible": true, - "zoom_offset": 0 - } - }, - "fcd71ba8dfbb4ae3ad80cda3efc5460e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "_model_module": "@jupyter-widgets/base", - "_model_module_version": "1.2.0", - "_model_name": "LayoutModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "LayoutView", - "align_content": null, - "align_items": null, - "align_self": null, - "border": null, - "bottom": null, - "display": null, - "flex": null, - "flex_flow": null, - "grid_area": null, - "grid_auto_columns": null, - "grid_auto_flow": null, - "grid_auto_rows": null, - "grid_column": null, - "grid_gap": null, - "grid_row": null, - "grid_template_areas": null, - "grid_template_columns": null, - "grid_template_rows": null, - "height": null, - "justify_content": null, - "justify_items": null, - "left": null, - "margin": null, - "max_height": null, - "max_width": null, - "min_height": null, - "min_width": null, - "object_fit": null, - "object_position": null, - "order": null, - "overflow": null, - "overflow_x": null, - "overflow_y": null, - "padding": null, - "right": null, - "top": null, - "visibility": null, - "width": null - } - }, - "fcebfde4194d42198a3b84d5ff1e44b5": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "grab" - } - }, - "fe3dd408629d42cbb59eec5fb32c0356": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "move" - } + "metadata": { + "id": "VbdqtRlgp29J" + } }, - "fec77abaf75c4932adffead454232a80": { - "model_module": "jupyter-leaflet", - "model_module_version": "^0.18", - "model_name": "LeafletMapStyleModel", - "state": { - "_model_module": "jupyter-leaflet", - "_model_module_version": "^0.18", - "_model_name": "LeafletMapStyleModel", - "_view_count": null, - "_view_module": "@jupyter-widgets/base", - "_view_module_version": "1.2.0", - "_view_name": "StyleView", - "cursor": "move" - } + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "Nnlar9EvgCfk" + }, + "execution_count": null, + "outputs": [] } - } - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} + ] +} \ No newline at end of file