diff --git a/_quarto.yml b/_quarto.yml
index 608fdf2b..5122c743 100644
--- a/_quarto.yml
+++ b/_quarto.yml
@@ -124,6 +124,7 @@ website:
- section: Stories
contents:
- user-guide/notebooks/stories/derechos.ipynb
+ - user-guide/notebooks/stories/blizzards_notebook.ipynb
- text: "---"
- section: open-source-ecosystem/index.qmd
contents:
diff --git a/user-guide/notebooks/stories/blizzards_notebook.ipynb b/user-guide/notebooks/stories/blizzards_notebook.ipynb
new file mode 100644
index 00000000..d23cd6fe
--- /dev/null
+++ b/user-guide/notebooks/stories/blizzards_notebook.ipynb
@@ -0,0 +1,6424 @@
+{
+ "cells": [
+ {
+ "cell_type": "raw",
+ "id": "9b3005ef-7c2b-4db9-a1f4-d749a6f0bd8b",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "title: When Winter Rages\n",
+ "description: Exploring the Power and Impact of Blizzards\n",
+ "author: Andrew Blackford (UAH)\n",
+ "date: August 7, 2025\n",
+ "execute:\n",
+ " freeze: true\n",
+ "---"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f27a0f12-73d7-4ea6-bbc5-ef9000474c1f",
+ "metadata": {},
+ "source": [
+ "# Run This Notebook"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "99a99fa8-5923-48d2-bdfd-720af5aca241",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a2979dad-dfa7-4f5c-a617-9e3c51af01aa",
+ "metadata": {},
+ "source": [
+ "\n",
+ "Disclaimer: it is highly recommended to run a tutorial within NASA VEDA JupyterHub, which already includes functions for processing and visualizing data specific to VEDA stories. Running the tutorial outside of the VEDA JupyterHub may lead to errors, specifically related to EarthData authentication. Additionally, it is recommended to use the Pangeo workspace within the VEDA JupyterHub, since certain packages relevant to this tutorial are already installed.
\n",
+ "\n",
+ " If you do not have a VEDA Jupyterhub Account you can launch this notebook on your local environment using MyBinder by clicking the icon below.
\n",
+ "
\n",
+ "\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a5bc145b-9ad8-4427-a52e-d65dd73ce1a4",
+ "metadata": {},
+ "source": [
+ "## Environment Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "e660b9c1-96de-4c42-ae48-d908293b54bb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Load libraries\n",
+ "import datetime\n",
+ "import glob\n",
+ "import os\n",
+ "\n",
+ "import earthaccess\n",
+ "import plotutils as putils\n",
+ "import requests\n",
+ "from pystac_client import Client"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "2e690482-48a3-440e-bfd6-ab99d097ea8b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# For retrieving data already catalogued in VEDA STAC\n",
+ "STAC_API_URL = \"https://openveda.cloud/api/stac\"\n",
+ "RASTER_API_URL = \"https://openveda.cloud/api/raster\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "90a19a27-5c9e-403a-954d-ef8569146032",
+ "metadata": {
+ "jp-MarkdownHeadingCollapsed": true
+ },
+ "source": [
+ "## Overview\n",
+ "\n",
+ "Blizzards are extreme winter weather events defined by the National Weather Service (NWS) as a combination of heavy falling or blowing snow, strong winds sustained at 35 mph or higher, and reduced visibility (less than a quarter of a mile) lasting for at least three contiguous hours. These powerful storms can bring everyday life to a standstill by disrupting travel, damaging infrastructure, and exposing people and animals to dangerous elements.\n",
+ "\n",
+ "In the United States, blizzards occur most frequently in the northern Great Plains, but they have been reported in every state except Hawaii. While blizzards are traditionally associated with winter, records show they can happen any time between October and June. Advances in weather monitoring and forecasting have improved our ability to detect and report these events, which has led to an increase in reported blizzard activity over the past several decades. On average, 13 blizzards occur annually across the contiguous United States (CONUS), but the past few decades have seen this number inflate to 19. The geographic spread of these storms has also widened, with more blizzards occurring outside their historical hotspots. Although the intensity of impact by individual storms has generally decreased due to better forecasting, their economic and societal impacts have risen, with associated losses now exceeding $1 billion per year. Understanding blizzards and preparing for their impacts is critical for communities in regions prone to extreme winter weather.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5398ed01-4fc9-41aa-bf48-a81cb5c0b510",
+ "metadata": {
+ "jp-MarkdownHeadingCollapsed": true
+ },
+ "source": [
+ "## Climatology of Blizzards\n",
+ "\n",
+ "In the United States, blizzards predominantly affect a region often referred to as \"Blizzard Alleyβ, encompassing parts of North Dakota, South Dakota, Minnesota, Iowa, Nebraska, southeastern Wyoming, and eastern Colorado. The flat terrain and scarcity of natural windbreaks, such as forests or mountains, allow cold Arctic air masses to sweep down from Canada unimpeded, leading to frequent blizzard conditions, far more than any other region in the country.\n",
+ "\n",
+ "Several key factors contribute to the high frequency of blizzards in this region:\n",
+ "\n",
+ "* Flat Topography: The expansive Great Plains offer little resistance to wind, enabling strong gusts to develop and sustain.\n",
+ "* Lack of Vegetation: The absence of significant tree cover means there are few obstacles to slow down or block wind flow.\n",
+ "* Proximity to Arctic Air Masses: The region's location allows cold air from the Arctic to move southward easily, interacting with moist air masses to produce snow.\n",
+ "* Frequent Storm Systems: Low-pressure systems often develop east of the Rocky Mountains, intensifying as they move into the Plains, bringing heavy snowfall and high winds.\n",
+ "\n",
+ "While Blizzard Alley is the most blizzard-prone area, other parts of the United States also experience these severe storms: The Northeastern U.S. is known as a secondary Blizzard Alley, as this region frequently experiences nor'eastersβpowerful storms that can produce blizzard conditions. Additionally, the Front Range of the Rocky Mountains is susceptible to blizzards due to storm systems intensifying as they descend from higher elevations.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d465df96-8a8c-455c-bdf1-132a829d56d6",
+ "metadata": {},
+ "source": [
+ "# Example: Blizzard Count (1950-2021)\n",
+ "\n",
+ "Pull the blizzard climatology data from from the VEDA STAC catalog and visualize\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3556d74-8b24-4327-878d-cb11a39e784a",
+ "metadata": {},
+ "source": [
+ "## Processing steps:\n",
+ "1.) Choose STAC catalog ID and date
\n",
+ "2.) Retrieve collection information and items from VEDA STAC catalog
\n",
+ "3.) Retrieve item statistics and tiling information
\n",
+ "4.) Plot data
"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9964579-daf7-4ea5-94db-65442aef5547",
+ "metadata": {},
+ "source": [
+ "Nearest neighbor interpolation of NCEI Storm Events Database confirmed blizzard reports from 1950-2021 in the United States, clipped to the Northern Plains, Midwest, and Northeast.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "94e17401-99ec-4ed3-ae7b-1c5014d5931a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "
\n",
+ " <CollectionClient id=blizzard-count>\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"Collection\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " id\n",
+ " \"blizzard-count\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " stac_version\n",
+ " \"1.1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Nearest neighbor interpolation of NCEI Storm Events Database confirmed blizzard reports from 1950-2021 in the United States, clipped to the Northern Plains, Midwest, and Northeast.\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " links[] 5 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-count/items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"parent\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"root\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA (Visualization, Exploration, and Data Analysis) STAC API\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"http://www.opengis.net/def/rel/ogc/1.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-count/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/schema+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"self\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-count\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " stac_extensions[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"https://stac-extensions.github.io/render/v1.0.0/schema.json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " renders
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " dashboard
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA Dashboard Render Parameters\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"cog_default\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " rescale[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " 1\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 50\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " colormap_name\n",
+ " \"turbo\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " item_assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " cog_default
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/tiff; application=geotiff; profile=cloud-optimized\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"data\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Default COG Layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Cloud optimized default layer to display on map\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " datetime_range\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:is_periodic\n",
+ " True\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:time_density\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Blizzard Count 1950-2021\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " extent
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " spatial
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " bbox[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 4 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " -110.6\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 34.7\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " -66.7\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 3\n",
+ " 49.6\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " temporal
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " interval[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"2021-12-31T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"2021-12-31T23:59:59Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " license\n",
+ " \"CC0-1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " providers[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"NASA VEDA\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"host\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://www.earthdata.nasa.gov/dashboard/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " thumbnail
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://thumbnails.openveda.cloud/blizzards-cover.png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Photo by Andrew Blackford (Near-blizzard conditions in Maria Stein, Ohio on December 23, 2022)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "client_STAC = Client.open(STAC_API_URL)\n",
+ "\n",
+ "collection_id = \"blizzard-count\"\n",
+ "date = \"2021-12-31\"\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "\n",
+ "# ββ VEDA Collection Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "items = list(results.items())\n",
+ "assert len(items) != 0, \"No items found\"\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "# grab the dashboard render block\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "((vmin, vmax),) = dashboard_render[\"rescale\"]\n",
+ "\n",
+ "collection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "fa60566e-b3c6-4d58-84fe-8589a54056df",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'tilejson': '2.2.0', 'version': '1.0.0', 'scheme': 'xyz', 'tiles': ['https://openveda.cloud/api/raster/collections/blizzard-count/items/StormEvents_Blizzards_cog_2021-12-31/tiles/WebMercatorQuad/{z}/{x}/{y}@1x?assets=cog_default&color_formula=gamma+r+1.05&colormap_name=turbo&rescale=1%2C50'], 'minzoom': 0, 'maxzoom': 24, 'bounds': [-110.62272262199996, 34.803751156000025, -66.21095309899994, 51.52535394900008], 'center': [-88.41683786049995, 43.164552552500055, 0]}\n"
+ ]
+ }
+ ],
+ "source": [
+ "# ββ VEDA Tile Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "colormap_name = \"turbo\"\n",
+ "\n",
+ "# Build endpoint URL without worrying about trailing slashes\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"&assets={assets}\"\n",
+ " f\"&color_formula=gamma+r+1.05&colormap_name={colormap_name}\"\n",
+ " f\"&rescale={vmin},{vmax}\",\n",
+ ")\n",
+ "\n",
+ "response.raise_for_status()\n",
+ "\n",
+ "tiles = response.json()\n",
+ "print(tiles)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "80a6afa4-7d1d-4c13-877d-bad844012e08",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Use the new plot_folium_from_VEDA_STAC function\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[43, -92],\n",
+ " zoom_level=6,\n",
+ " rescale=(vmin, vmax),\n",
+ " colormap_name=colormap_name,\n",
+ " capitalize_cmap=False, # to better match VEDA colors and matplotlib colors\n",
+ " layer_name=\"Blizzard Count\",\n",
+ " date=\"(1950-2021)\",\n",
+ " colorbar_caption=\"count\",\n",
+ " attribution=\"NCEI Blizzard Count (1950-2021)\",\n",
+ " tile_name=\"NCEI Blizzard Count (1950-2021)\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ ")\n",
+ "\n",
+ "# Display the map\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "35aaa435-c8bb-4912-b644-81b2a522b8df",
+ "metadata": {},
+ "source": [
+ "## Bomb Cyclogenesis\n",
+ "\n",
+ "A defining feature of many norβeasters is bomb cyclogenesis, or \"bombogenesis\", which occurs when a storm's central low pressure drops by at least 24 millibars in 24 hours, signifying rapid intensification of the system. The process is driven by the clash of cold air from the north and warm, humid air over the Atlantic. As the storm deepens, powerful winds spiral inward towards the central low pressure, enhancing snowfall rates and creating whiteout conditions. Bomb cyclogenesis often results in some of the most impactful norβeasters, which have been historically responsible for bringing record-breaking snowfall and hurricane-force winds to parts of the Northeast. The map shows GOES satellite imagery of one example of a Nor'easter undergoing bomb cyclogenesis off the East Coast of the USA on January 4, 2018."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "9693e891-2cfe-4aa2-8465-6a4d3b3566f6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "
\n",
+ " <CollectionClient id=blizzard-goes-bombogenesis>\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"Collection\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " id\n",
+ " \"blizzard-goes-bombogenesis\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " stac_version\n",
+ " \"1.1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Single GOES TrueColor three-band image of a mid-latitude cyclone undergoing bomb cyclogenesis and producing blizzard conditions on January 4, 2018.\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " links[] 5 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-goes-bombogenesis/items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"parent\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"root\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA (Visualization, Exploration, and Data Analysis) STAC API\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"http://www.opengis.net/def/rel/ogc/1.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-goes-bombogenesis/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/schema+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"self\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-goes-bombogenesis\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " stac_extensions[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"https://stac-extensions.github.io/render/v1.0.0/schema.json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " renders
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " dashboard
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " bidx[] 3 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " 1\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 2\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " 3\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA Dashboard Render Parameters\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"cog_default\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " rescale[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " 0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 15\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " item_assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " cog_default
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/tiff; application=geotiff; profile=cloud-optimized\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"data\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Default COG Layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Cloud optimized default layer to display on map\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " datetime_range\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:is_periodic\n",
+ " False\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:time_density\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"GOES Imagery - Bombogenesis (Select Event)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " extent
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " spatial
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " bbox[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 4 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " -98.0019305447347\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 20.003341757802602\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " -38.00265547381819\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 3\n",
+ " 55.002918882503906\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " temporal
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " interval[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"2018-01-04T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"2018-01-04T23:59:59Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " license\n",
+ " \"CC0-1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " providers[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"NASA VEDA\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"host\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://www.earthdata.nasa.gov/dashboard/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " summaries
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " datetime[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"2018-01-04T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " thumbnail
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://thumbnails.openveda.cloud/blizzards-cover.png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Photo by Andrew Blackford (Near-blizzard conditions in Maria Stein, Ohio on December 23, 2022)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "date = \"2018-01-04\" \n",
+ "collection_id = \"blizzard-goes-bombogenesis\"\n",
+ "\n",
+ "# ββ VEDA Collection Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "items = list(results.items())\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "((vmin, vmax),) = dashboard_render[\"rescale\"]\n",
+ "bidx = dashboard_render.get(\"bidx\", [1, 2, 3])\n",
+ "\n",
+ "# ββ VEDA Tile Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"&assets={assets}\"\n",
+ " f\"&bidx={bidx[0]}&bidx={bidx[1]}&bidx={bidx[2]}\"\n",
+ " f\"&rescale={vmin},{vmax}\"\n",
+ " f\"&resampling=bilinear\"\n",
+ ")\n",
+ "response.raise_for_status()\n",
+ "tiles = response.json()\n",
+ "\n",
+ "collection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "e7031438-e30d-4e9e-a59f-65b8ae105bcb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Use the new plot_folium_from_VEDA_STAC function\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[38, -72],\n",
+ " zoom_level=5,\n",
+ " rescale=(vmin, vmax),\n",
+ " layer_name=\"GOES TrueColor Imagery\",\n",
+ " date=\"January 4, 2018\",\n",
+ " attribution=\"GOES TrueColor Imagery\",\n",
+ " tile_name=\"GOES TrueColor Imagery\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ " remove_default_legend=True\n",
+ " \n",
+ ")\n",
+ "\n",
+ "# Display the map\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5175b007-b727-411a-a825-98639399523b",
+ "metadata": {},
+ "source": [
+ "## DCVZ\n",
+ "\n",
+ "A critical factor in the formation of Denver cyclones is the Denver Convergence Vorticity Zone (DCVZ)βa mesoscale atmospheric feature unique to the area. The DCVZ forms due to easterly upslope winds interacting with the Rocky Mountains, creating a zone of cyclonic rotation just east of Denver. This zone can serve as a focal point for the development or intensification of low pressure systems, often enhancing snowfall near Denver and the eastern Colorado Plains. This enhancement of snowfall often carries eastward as the storm moves into the Great Plains, but typically weakens by the time it reaches the Midwest (though there have been a few notable blizzards in the Midwest that can be attributed to Denver Cyclones)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "1d44a2bb-d651-43db-a7e2-2c78a26b51ab",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "collection_id = \"blizzard-count\"\n",
+ "date = \"2021-12-31\"\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "\n",
+ "# ββ VEDA Collection Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "items = list(results.items())\n",
+ "assert len(items) != 0, \"No items found\"\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "# grab the dashboard render block\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "((vmin, vmax),) = dashboard_render[\"rescale\"]\n",
+ "\n",
+ "# ββ VEDA Tile Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "colormap_name = \"turbo\"\n",
+ "\n",
+ "# Build endpoint URL without worrying about trailing slashes\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"&assets={assets}\"\n",
+ " f\"&color_formula=gamma+r+1.05&colormap_name={colormap_name}\"\n",
+ " f\"&rescale={vmin},{vmax}\",\n",
+ ")\n",
+ "\n",
+ "response.raise_for_status()\n",
+ "\n",
+ "tiles = response.json()\n",
+ "\n",
+ "# Use the new plot_folium_from_VEDA_STAC function\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[40.5, -103],\n",
+ " zoom_level=7,\n",
+ " rescale=(vmin, vmax),\n",
+ " colormap_name=colormap_name,\n",
+ " capitalize_cmap=False, # to better match VEDA colors and matplotlib colors\n",
+ " layer_name=\"DCVZ Blizzard Count\",\n",
+ " date=\"(1950-2021)\",\n",
+ " colorbar_caption=\"count\",\n",
+ " attribution=\"NCEI Blizzard Count (1950-2021)\",\n",
+ " tile_name=\"NCEI Blizzard Count (1950-2021)\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ ")\n",
+ "\n",
+ "# Display the map\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9fd7cbd6-f988-4a49-a618-f43604719953",
+ "metadata": {},
+ "source": [
+ "## Historic Blizzards\n",
+ "\n",
+ "### The Great Appalachian Storm of 1950 (Snow Bowl Blizzard)\n",
+ "\n",
+ "The Great Appalachian Blizzard of 1950 is remembered as one of the most extraordinary and impactful winter storms in U.S. history. Occurring over Thanksgiving weekend, from November 24 to 30, the storm wreaked havoc across 22 states, bringing record snowfall, hurricane-force winds, and freezing temperatures. Snowfall totals reached unprecedented levels, with Coburn Creek, West Virginia, reporting 62 inches, and widespread accumulations exceeding 30 inches across parts of Ohio, Pennsylvania, and West Virginia. Accompanying winds gusted up to 110 mph in Concord, New Hampshire, and 160 mph at Mount Washington, causing severe damage and widespread power outages. In total, the storm claimed 353 lives and caused an estimated $66.7 million in damages (equivalent to about $845 million today)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "98af5a75-28d1-4f3c-bc45-dc7ac5b09168",
+ "metadata": {},
+ "source": [
+ "# Example: Total Snowfall (1950 Blizzard)\n",
+ "\n",
+ "Pull the blizzard total snowfall data from from the VEDA STAC catalog and visualize\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "25ebdc80-cf61-4fbd-9152-e014912a64fa",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "https://openveda.cloud/api/raster/collections/blizzard-snowfall/items/RSI_Snowfall_cog_1950-11-26/tiles/WebMercatorQuad/{z}/{x}/{y}@1x?assets=cog_default&colormap=%7B%226%22%3A%5B30%2C144%2C201%2C255%5D%2C%2212%22%3A%5B171%2C148%2C214%2C255%5D%2C%2218%22%3A%5B90%2C22%2C128%2C255%5D%2C%2224%22%3A%5B217%2C67%2C212%2C255%5D%7D\n"
+ ]
+ }
+ ],
+ "source": [
+ "import json\n",
+ "import urllib.parse\n",
+ "import requests\n",
+ "from pystac_client import Client\n",
+ "\n",
+ "collection_id = \"blizzard-snowfall\"\n",
+ "date = \"1950-11-26\"\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "items = list(results.items())\n",
+ "assert len(items) != 0, \"No items found\"\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "\n",
+ "# --- RSI categorical colormap ---\n",
+ "veda_cmap_rgba = {\n",
+ " \"6\": [30, 144, 201, 255], # #1e90c9\n",
+ " \"12\": [171, 148, 214, 255], # #ab94d6\n",
+ " \"18\": [90, 22, 128, 255], # #5a1680\n",
+ " \"24\": [217, 67, 212, 255], # #d943d4\n",
+ "}\n",
+ "\n",
+ "# Compact JSON β URL-encode for query string\n",
+ "cmap_str = json.dumps(veda_cmap_rgba, separators=(\",\", \":\"))\n",
+ "cmap_q = urllib.parse.quote_plus(cmap_str)\n",
+ "\n",
+ "# β IMPORTANT: donβt override rescale/nodata/bidx here; just let the\n",
+ "# tile server use the raw values + our explicit colormap.\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"assets={assets}\"\n",
+ " f\"&colormap={cmap_q}\"\n",
+ ")\n",
+ "\n",
+ "response.raise_for_status()\n",
+ "tiles = response.json()\n",
+ "print(tiles[\"tiles\"][0])\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "ed8e373c-5fca-4301-96d0-7f906e1cb422",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Legend colors (HTML only)\n",
+ "rsi_custom_colors = [\n",
+ " {\"color\": \"#1e90c9\", \"label\": \"6\"},\n",
+ " {\"color\": \"#ab94d6\", \"label\": \"12\"},\n",
+ " {\"color\": \"#5a1680\", \"label\": \"18\"},\n",
+ " {\"color\": \"#d943d4\", \"label\": \"24\"},\n",
+ "]\n",
+ "\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[41, -85],\n",
+ " zoom_level=5.5,\n",
+ " rescale=(6, 24),\n",
+ " colormap_name=\"viridis\", # ignored for legend when custom_colors is set\n",
+ " custom_colors=rsi_custom_colors, # drives categorical legend\n",
+ " layer_name=\"Regional Snowfall Index (RSI) Accumulated Snowfall\",\n",
+ " date=f\"{date}T00:00:00Z\",\n",
+ " colorbar_caption=\"RSI Accumulated Snowfall (inches)\",\n",
+ " attribution=\"Regional Snowfall Index (RSI) Accumulated Snowfall\",\n",
+ " tile_name=\"Regional Snowfall Index (RSI) Accumulated Snowfall\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ " capitalize_cmap=False,\n",
+ " remove_default_legend=True # no continuous gradient\n",
+ ")\n",
+ "\n",
+ "m\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "20a62724-f52b-4e01-8e78-131cdab448e0",
+ "metadata": {},
+ "source": [
+ "## Historic Blizzards\n",
+ "\n",
+ "### The Great Blizzard of β78 (Cleveland Superbomb)\n",
+ "\n",
+ "The Great Blizzard of β78, also known as the \"Cleveland Superbomb,\" remains one of the most catastrophic winter storms in U.S. history, and is one of the worst natural disasters to ever impact Ohio, Indiana, and Michigan. Occurring from January 25 to 27, the storm developed as an intense low-pressure system surged northward from the Gulf of America, colliding with Arctic air on the heels of a small clipper system. This convergence created a rapid drop in atmospheric pressure, with Cleveland recording a barometric pressure of 28.28 inches (958 millibars)βone of the lowest ever observed in the continental United States. The rapid intensification, known as bomb cyclogenesis, led to blizzard conditions of unprecedented severity."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "589d8016-4154-4afe-ae75-ac1aa102a53f",
+ "metadata": {},
+ "source": [
+ "# Example: ERA5 Data (1978 Blizzard)\n",
+ "\n",
+ "Pull the ERA5 MSLP data from from the VEDA STAC catalog and visualize\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fa0b890c-98af-4e9d-a16b-79f5f94b5825",
+ "metadata": {},
+ "source": [
+ "ERA5 reanalysis, produced by the European Centre for Medium-Range Weather Forecasts (ECMWF), is a high-resolution global atmospheric dataset that provides historical climate and weather information from 1940 to the present. It combines observations from satellites, weather stations, and other sources with advanced numerical weather prediction models to generate a consistent, spatially complete representation of past atmospheric conditions. ERA5 offers hourly data at a 0.25 degree spatial resolution with multiple atmospheric variables, including temperature, wind speed, cloud coverage, and pressure, along with uncertainty estimates. It is widely used in climate research, meteorology, and environmental studies.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "17a063c4-4e34-4d28-af61-7a5f69e822d4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"Collection\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " id\n",
+ " \"blizzard-era5-mslp\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " stac_version\n",
+ " \"1.1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"ERA5 mean sea level pressure (MSLP) global reanalysis for three select blizzard events.\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " links[] 5 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-era5-mslp/items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"parent\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"root\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA (Visualization, Exploration, and Data Analysis) STAC API\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"http://www.opengis.net/def/rel/ogc/1.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-era5-mslp/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/schema+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"self\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-era5-mslp\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " stac_extensions[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"https://stac-extensions.github.io/render/v1.0.0/schema.json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " renders
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " dashboard
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA Dashboard Render Parameters\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"cog_default\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " rescale[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " 972\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 1040\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " colormap_name\n",
+ " \"nipy_spectral\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " item_assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " cog_default
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/tiff; application=geotiff; profile=cloud-optimized\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"data\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Default COG Layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Cloud optimized default layer to display on map\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " datetime_range\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:is_periodic\n",
+ " False\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:time_density\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"ERA5 Reanalysis β Mean Sea Level Pressure (Select Events)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " extent
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " spatial
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " bbox[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 4 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " -180\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " -90\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " 180\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 3\n",
+ " 90\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " temporal
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " interval[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"1950-11-26T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"1978-01-26T23:59:59Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " license\n",
+ " \"CC0-1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " providers[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"NASA VEDA\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"host\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://www.earthdata.nasa.gov/dashboard/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " summaries
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " datetime[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"1950-11-26T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"1978-01-26T09:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " thumbnail
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://thumbnails.openveda.cloud/blizzards-cover.png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Photo by Andrew Blackford (Near-blizzard conditions in Maria Stein, Ohio on December 23, 2022)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "collection_id = \"blizzard-era5-mslp\"\n",
+ "date = \"1978-01-26\"\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "\n",
+ "# ββ VEDA Collection Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "items = list(results.items())\n",
+ "assert len(items) != 0, \"No items found\"\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "# grab the dashboard render block\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "((vmin, vmax),) = dashboard_render[\"rescale\"]\n",
+ "\n",
+ "collection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "9f41df64-4ff4-4de4-800c-b27b0452480f",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'tilejson': '2.2.0', 'version': '1.0.0', 'scheme': 'xyz', 'tiles': ['https://openveda.cloud/api/raster/collections/blizzard-era5-mslp/items/ERA5_MSLP_cog_1978-01-26T09:00:00Z/tiles/WebMercatorQuad/{z}/{x}/{y}@1x?assets=cog_default&color_formula=gamma+r+1.05&colormap_name=nipy_spectral&rescale=972%2C1040'], 'minzoom': 0, 'maxzoom': 24, 'bounds': [-180.0, -90.0, 180.0, 90.0], 'center': [0.0, 0.0, 0]}\n"
+ ]
+ }
+ ],
+ "source": [
+ "# ββ VEDA Tile Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "colormap_name = \"nipy_spectral\"\n",
+ "\n",
+ "# Build endpoint URL without worrying about trailing slashes\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"&assets={assets}\"\n",
+ " f\"&color_formula=gamma+r+1.05&colormap_name={colormap_name}\"\n",
+ " f\"&rescale={vmin},{vmax}\",\n",
+ ")\n",
+ "\n",
+ "response.raise_for_status()\n",
+ "\n",
+ "tiles = response.json()\n",
+ "print(tiles)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "2ddf9c74-d2aa-4774-b1d6-3c1034325c11",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Use the new plot_folium_from_VEDA_STAC function\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[40, -80],\n",
+ " zoom_level=4.5,\n",
+ " rescale=(vmin, vmax),\n",
+ " colormap_name=colormap_name,\n",
+ " capitalize_cmap=False, # to better match VEDA colors and matplotlib colors\n",
+ " layer_name=\"ERA5 Mean Sea Level Pressure\",\n",
+ " date=f\"{date}T00:00:00Z\",\n",
+ " colorbar_caption=\"hPa\",\n",
+ " attribution=\"ERA5 Mean Sea Level Pressure\",\n",
+ " tile_name=\"ERA5 Mean Sea Level Pressure\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ ")\n",
+ "\n",
+ "# Display the map\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ccb4cd83-7530-4335-914d-97dee3e99b49",
+ "metadata": {},
+ "source": [
+ "## Historic Blizzards\n",
+ "\n",
+ "### 1991 Halloween Blizzard / The Perfect Storm\n",
+ "\n",
+ "The 1991 Halloween Blizzard struck the Upper Midwest from October 31 to November 3, and brought unprecedented snowfall and ice accumulation - particularly affecting Minnesota, Iowa, and Wisconsin. In Minnesota, snowfall began on Halloween morning and intensified over the following days, resulting in record-breaking accumulations. The Twin Cities (Minneapolis-St. Paul) experienced 8.2 inches of snow on October 31, with a storm total of 28.4 inches, marking it as the largest single snowstorm in the city's history. Duluth, Minnesota recorded an astonishing 36.9 inches, and nearby areas along the coast of Lake Superior saw up to 45 inches.\n",
+ "\n",
+ "The blizzard's impact was compounded by strong winds, creating snowdrifts up to 10 feet high, which paralyzed transportation and led to widespread power outages. In Iowa, the storm began with a mix of snow, sleet, and freezing rain, resulting in significant ice accumulation that downed power lines and trees, leaving thousands without electricity. The hazardous conditions caused numerous traffic accidents and at least 20 fatalities across the affected regions.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "272364c1-e8fd-4eb7-93d6-78dba3c0e4b3",
+ "metadata": {},
+ "source": [
+ "# Example: MERRA-2 Data (1991 Blizzard)\n",
+ "\n",
+ "Pull the MERRA-2 10-meter wind gust data from from the VEDA STAC catalog and visualize\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ee940f37-eb43-4fed-8597-be50b615bde1",
+ "metadata": {},
+ "source": [
+ "The Modern-Era Retrospective Analysis for Research and Applications, Version 2 (MERRA-2) is NASAβs atmospheric reanalysis dataset that spans from 1980 to the present. Produced by the *lobal Modeling and Assimilation Office (GMAO), MERRA-2 improves upon its predecessor by incorporating aerosol interactions, bias corrections for satellite radiances, and observed precipitation to improve the representation of the hydrological cycle within the dataset. It provides global atmospheric, land surface, and oceanic variables such as temperature, wind speed, cloud cover, and pressure at 0.5Β° x 0.625Β° spatial resolution with hourly to monthly temporal coverage. MERRA-2 is widely used for climate studies, weather analysis, and Earth system research, particularly for investigating long-term atmospheric trends and variability.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "fc3cf599-c9ce-46c6-a5e0-bdf1092e4823",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"Collection\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " id\n",
+ " \"blizzard-merra2-10m-wind\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " stac_version\n",
+ " \"1.1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"MERRA2 10-meter wind speeds global reanalysis for three select blizzard events.\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " links[] 5 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-merra2-10m-wind/items\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/geo+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"parent\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"root\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA (Visualization, Exploration, and Data Analysis) STAC API\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"http://www.opengis.net/def/rel/ogc/1.0/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-merra2-10m-wind/queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/schema+json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Queryables\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " rel\n",
+ " \"self\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://openveda.cloud/api/stac/collections/blizzard-merra2-10m-wind\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"application/json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " stac_extensions[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"https://stac-extensions.github.io/render/v1.0.0/schema.json\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " renders
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " dashboard
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"VEDA Dashboard Render Parameters\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"cog_default\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " rescale[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " 0\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " 25\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " colormap_name\n",
+ " \"ylorrd\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " item_assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " cog_default
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/tiff; application=geotiff; profile=cloud-optimized\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"data\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Default COG Layer\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Cloud optimized default layer to display on map\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " datetime_range\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:is_periodic\n",
+ " False\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " dashboard:time_density\n",
+ " \"day\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"MERRA2 Reanalysis β 10 Meter Wind (Select Events)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " extent
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " spatial
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " bbox[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 4 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " -180.3125\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " -90.43922186252138\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " 179.88109636856717\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 3\n",
+ " 90.25\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " temporal
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " interval[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0[] 2 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"1991-11-01T21:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"2016-01-23T23:59:59Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " license\n",
+ " \"CC0-1.0\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " providers[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " name\n",
+ " \"NASA VEDA\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"host\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " url\n",
+ " \"https://www.earthdata.nasa.gov/dashboard/\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " summaries
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " datetime[] 3 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"1991-11-01T21:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 1\n",
+ " \"1993-03-14T00:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 2\n",
+ " \"2016-01-23T12:00:00Z\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " assets
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " thumbnail
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " href\n",
+ " \"https://thumbnails.openveda.cloud/blizzards-cover.png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " type\n",
+ " \"image/png\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " title\n",
+ " \"Thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " description\n",
+ " \"Photo by Andrew Blackford (Near-blizzard conditions in Maria Stein, Ohio on December 23, 2022)\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " roles[] 1 items
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " - \n",
+ " 0\n",
+ " \"thumbnail\"\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "collection_id = \"blizzard-merra2-10m-wind\"\n",
+ "date = \"1991-11-01\"\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "\n",
+ "# ββ VEDA Collection Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "items = list(results.items())\n",
+ "assert len(items) != 0, \"No items found\"\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "# grab the dashboard render block\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "((vmin, vmax),) = dashboard_render[\"rescale\"]\n",
+ "\n",
+ "collection"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "id": "e52f5701-ba7a-47ea-9b98-8ec38552d5a6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'tilejson': '2.2.0', 'version': '1.0.0', 'scheme': 'xyz', 'tiles': ['https://openveda.cloud/api/raster/collections/blizzard-merra2-10m-wind/items/MERRA2_10m_Wind_cog_1991-11-01T21:00:00Z/tiles/WebMercatorQuad/{z}/{x}/{y}@1x?assets=cog_default&color_formula=gamma+r+1.05&colormap_name=ylorrd&rescale=0%2C25'], 'minzoom': 0, 'maxzoom': 24, 'bounds': [-180.3125, -90.43922186252138, 179.88109636856717, 90.25], 'center': [-0.21570181571641456, -0.09461093126068931, 0]}\n"
+ ]
+ }
+ ],
+ "source": [
+ "# ββ VEDA Tile Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "# Build endpoint URL without worrying about trailing slashes\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"&assets={assets}\"\n",
+ " f\"&color_formula=gamma+r+1.05&colormap_name={colormap_name}\"\n",
+ " f\"&rescale={vmin},{vmax}\",\n",
+ ")\n",
+ "\n",
+ "response.raise_for_status()\n",
+ "\n",
+ "tiles = response.json()\n",
+ "print(tiles)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "id": "7bf00831-1788-477b-8104-7f959bc781c0",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Use the new plot_folium_from_VEDA_STAC function\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[40, -90],\n",
+ " zoom_level=4.5,\n",
+ " rescale=(vmin, vmax),\n",
+ " colormap_name=\"YlOrRd\",\n",
+ " capitalize_cmap=False, # to better match VEDA colors and matplotlib colors\n",
+ " layer_name=\"MERRA-2 10-Meter Wind Gusts\",\n",
+ " date=f\"{date}T00:00:00Z\",\n",
+ " colorbar_caption=\"m/s\",\n",
+ " attribution=\"MERRA-2 10-Meter Wind Gusts\",\n",
+ " tile_name=\"MERRA-2 10-Meter Wind Gusts\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ ")\n",
+ "\n",
+ "# Display the map\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d158ae94-fa4d-4fc5-9810-db36f194efa6",
+ "metadata": {},
+ "source": [
+ "## Historic Blizzards\n",
+ "\n",
+ "### 1993 Storm of the Century\n",
+ "\n",
+ "The 1993 Storm of the Century, also known as the \"Superstorm of 1993,\" was a massive cyclonic storm that impacted a vast portion of the United States from March 12 to 15, 1993. This unprecedented weather event brought record-breaking snowfall, severe weather, and coastal flooding, affecting areas from the Deep South to the Northeast. In the Appalachian Mountains, the storm produced extraordinary snowfall totals. Mount LeConte in Tennessee recorded nearly five feet of snow, while Mount Mitchell in North Carolina saw 49 inches. These heavy snowfalls led to significant disruptions, including impassable roads and widespread power outages.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "90811ffd-368a-4016-a6cb-395f4a173e5a",
+ "metadata": {},
+ "source": [
+ "# Example: MERRA-2 Data (1993 Blizzard)\n",
+ "\n",
+ "Pull the MERRA-2 cloud fraction data from from the VEDA STAC catalog and visualize\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 59,
+ "id": "ba17b24b-a446-4743-af44-eb9f8ffbb773",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "Make this Notebook Trusted to load map: File -> Trust Notebook
"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 59,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "collection_id = \"blizzard-merra2-cfrac\"\n",
+ "date = \"1993-03-14\"\n",
+ "\n",
+ "results = client_STAC.search(collections=[collection_id], datetime=date)\n",
+ "\n",
+ "# ββ VEDA Collection Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "items = list(results.items())\n",
+ "assert len(items) != 0, \"No items found\"\n",
+ "item = items[0]\n",
+ "collection = item.get_collection()\n",
+ "\n",
+ "# grab the dashboard render block\n",
+ "dashboard_render = collection.extra_fields[\"renders\"][\"dashboard\"]\n",
+ "\n",
+ "assets = dashboard_render[\"assets\"][0]\n",
+ "((vmin, vmax),) = dashboard_render[\"rescale\"]\n",
+ "\n",
+ "# ββ VEDA Tile Request βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n",
+ "\n",
+ "# Build endpoint URL without worrying about trailing slashes\n",
+ "response = requests.get(\n",
+ " f\"{RASTER_API_URL.rstrip('/')}/collections/{collection_id}\"\n",
+ " f\"/items/{item.id}/WebMercatorQuad/tilejson.json?\"\n",
+ " f\"&assets={assets}\"\n",
+ " f\"&rescale={vmin},{vmax}\",\n",
+ ")\n",
+ "\n",
+ "response.raise_for_status()\n",
+ "\n",
+ "tiles = response.json()\n",
+ "\n",
+ "# Use the new plot_folium_from_VEDA_STAC function\n",
+ "m = putils.plot_folium_from_VEDA_STAC(\n",
+ " tiles_url_template=tiles[\"tiles\"][0],\n",
+ " center_coords=[30, -75],\n",
+ " zoom_level=3.5,\n",
+ " rescale=(vmin, vmax),\n",
+ " colormap_name=\"Greys\",\n",
+ " capitalize_cmap=False, # to better match VEDA colors and matplotlib colors\n",
+ " layer_name=\"MERRA-2 Cloud Fraction\",\n",
+ " date=f\"{date}T00:00:00Z\",\n",
+ " colorbar_caption=\"m/s\",\n",
+ " attribution=\"MERRA-2 Cloud Fraction\",\n",
+ " tile_name=\"MERRA-2 Cloud Fraction\",\n",
+ " opacity=0.8,\n",
+ " height=\"800px\",\n",
+ ")\n",
+ "\n",
+ "# Display the map\n",
+ "m"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fa549dd4-f554-4435-af32-95f62e7002e4",
+ "metadata": {},
+ "source": [
+ "# Clean Up (Optional)\n",
+ "\n",
+ "\n",
+ "Remove any **.gif** files that were created to save on storage space. Additionally, remove any **core** files that were created if the kernel crashed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 60,
+ "id": "986bbaab-f1cb-445e-b6fb-9131e26ee6cd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# find all .gif files in the current directory\n",
+ "for gif_path in glob.glob(\"*.gif\"):\n",
+ " try:\n",
+ " os.remove(gif_path)\n",
+ " print(f\"Removed {gif_path}\")\n",
+ " except OSError as e:\n",
+ " print(f\"Error removing {gif_path}: {e}\")\n",
+ "\n",
+ "# find all core files in the current directory\n",
+ "for core_path in glob.glob(\"core.*\"):\n",
+ " try:\n",
+ " os.remove(core_path)\n",
+ " print(f\"Removed {core_path}\")\n",
+ " except OSError as e:\n",
+ " print(f\"Error removing {core_path}: {e}\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f6eac53e-909d-42e5-bf90-5f40ef526c57",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}