From f11e1b449e1448eaceaa20f7bbf7c1f0460ab719 Mon Sep 17 00:00:00 2001 From: siddharth0248 Date: Thu, 4 Apr 2024 12:10:12 -0500 Subject: [PATCH] micasa-land carbon flux edits --- ...gfed-carbonflux-monthgrid-v3_Data_Flow.qmd | 3 - ...micasa-carbonflux-daygrid-v1_Data_Flow.png | Bin 0 -> 79601 bytes ...micasa-carbonflux-daygrid-v1_Data_Flow.qmd | 3 + datatransformation.qmd | 7 +- datausage.qmd | 2 +- ...-v3_Processing and Verification Report.qmd | 4 +- ...carbonflux-daygrid-v1_User_Notebook .ipynb | 609 ++++++++++++++++++ 7 files changed, 618 insertions(+), 10 deletions(-) delete mode 100644 data_workflow/casagfed-carbonflux-monthgrid-v3_Data_Flow.qmd create mode 100644 data_workflow/media/micasa-carbonflux-daygrid-v1_Data_Flow.png create mode 100644 data_workflow/micasa-carbonflux-daygrid-v1_Data_Flow.qmd create mode 100644 user_data_notebooks/micasa-carbonflux-daygrid-v1_User_Notebook .ipynb diff --git a/data_workflow/casagfed-carbonflux-monthgrid-v3_Data_Flow.qmd b/data_workflow/casagfed-carbonflux-monthgrid-v3_Data_Flow.qmd deleted file mode 100644 index bf0a5d73..00000000 --- a/data_workflow/casagfed-carbonflux-monthgrid-v3_Data_Flow.qmd +++ /dev/null @@ -1,3 +0,0 @@ -# CASA-GFED3 Land Carbon Flux - Data Workflow - -![Data Flow Diagram Extending From Acquisition/Creation to User Delivery](./media/casagfed-carbonflux-monthgrid-v3_Data_Flow.png) \ No newline at end of file diff --git a/data_workflow/media/micasa-carbonflux-daygrid-v1_Data_Flow.png b/data_workflow/media/micasa-carbonflux-daygrid-v1_Data_Flow.png new file mode 100644 index 0000000000000000000000000000000000000000..b03435e6281a4a2cc2bea8bd679feb49a6d1ecee GIT binary patch literal 79601 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%0A1EVQ)=e@;m4vgbVR7#X-nQ4zZf5euJ8nS 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 literal 0 HcmV?d00001 diff --git a/data_workflow/micasa-carbonflux-daygrid-v1_Data_Flow.qmd b/data_workflow/micasa-carbonflux-daygrid-v1_Data_Flow.qmd new file mode 100644 index 00000000..1fc117fb --- /dev/null +++ b/data_workflow/micasa-carbonflux-daygrid-v1_Data_Flow.qmd @@ -0,0 +1,3 @@ +# MiCASA Land Carbon Flux - Data Workflow + +![Data Flow Diagram Extending From Acquisition/Creation to User Delivery](./media/micasa-carbonflux-daygrid-v1_Data_Flow.png) \ No newline at end of file diff --git a/datatransformation.qmd b/datatransformation.qmd index 079b3513..c8b10774 100644 --- a/datatransformation.qmd +++ b/datatransformation.qmd @@ -20,10 +20,9 @@ Explore, analyze, and make a difference with the US GHG Center. ## Natural Greenhouse Gas Emissions and Sinks 1. [Air-Sea CO₂ Flux, ECCO-Darwin Model v5](cog_transformation/eccodarwin-co2flux-monthgrid-v5.ipynb) - Model Output -2. [CASA-GFED3 Land Carbon Flux](cog_transformation/casagfed-carbonflux-monthgrid-v3.ipynb) - Model Output -3. [GOSAT-based Top-down Total and Natural Methane Emissions](cog_transformation/gosat-based-ch4budget-yeargrid-v1.ipynb) - Model Output -4. [OCO-2 MIP Top-Down CO₂ Budgets](cog_transformation/oco2-mip-co2budget-yeargrid-v1.ipynb) - Model Output -5. [TM5-4DVar Isotopic CH₄ Inverse Fluxes](cog_transformation/tm54dvar-ch4flux-monthgrid-v1.ipynb) - Model Output, Ground Measurements +2. [GOSAT-based Top-down Total and Natural Methane Emissions](cog_transformation/gosat-based-ch4budget-yeargrid-v1.ipynb) - Model Output +3. [OCO-2 MIP Top-Down CO₂ Budgets](cog_transformation/oco2-mip-co2budget-yeargrid-v1.ipynb) - Model Output +4. [TM5-4DVar Isotopic CH₄ Inverse Fluxes](cog_transformation/tm54dvar-ch4flux-monthgrid-v1.ipynb) - Model Output, Ground Measurements ## Large Emissions Events 1. [EMIT Methane Point Source Plume Complexes](cog_transformation/emit-ch4plume-v1.ipynb) - Satellite Observations diff --git a/datausage.qmd b/datausage.qmd index 20fa20b7..d9b68a23 100644 --- a/datausage.qmd +++ b/datausage.qmd @@ -19,7 +19,7 @@ Explore, analyze, and make a difference with the US GHG Center. ## Natural Greenhouse Gas Emissions and Sinks 1. [Air-Sea CO₂ Flux, ECCO-Darwin Model v5](user_data_notebooks/eccodarwin-co2flux-monthgrid-v5_User_Notebook.ipynb) - Model Output -2. [CASA-GFED3 Land Carbon Flux](user_data_notebooks/casagfed-carbonflux-monthgrid-v3_User_Notebook.ipynb) - Model Output +2. [MiCASA Land Carbon Flux](user_data_notebooks/micasa-carbonflux-daygrid-v1_User_Notebook.ipynb) - Model Output 3. [GOSAT-based Top-down Total and Natural Methane Emissions](user_data_notebooks/gosat-based-ch4budget-yeargrid-v1_User_Notebook.ipynb) - Model Output 4. [OCO-2 MIP Top-Down CO₂ Budgets](user_data_notebooks/oco2-mip-co2budget-yeargrid-v1_User_Notebook.ipynb) - Model Output 5. [TM5-4DVar Isotopic CH₄ Inverse Fluxes](user_data_notebooks/tm54dvar-ch4flux-monthgrid-v1_User_Notebook.ipynb) - Model Output, Ground Measurements diff --git a/processing_and_verification_reports/casagfed-carbonflux-monthgrid-v3_Processing and Verification Report.qmd b/processing_and_verification_reports/casagfed-carbonflux-monthgrid-v3_Processing and Verification Report.qmd index 3aea26da..08d88002 100644 --- a/processing_and_verification_reports/casagfed-carbonflux-monthgrid-v3_Processing and Verification Report.qmd +++ b/processing_and_verification_reports/casagfed-carbonflux-monthgrid-v3_Processing and Verification Report.qmd @@ -1,6 +1,6 @@ --- -title: CASA-GFED3 Land Carbon Flux -description: "Global, monthly 0.5 degree resolution carbon fluxes from Net Primary Production (NPP), heterotrophic respiration (Rh), wildfire emissions (FIRE), and fuel wood burning emissions (FUEL) derived from the CASA-GFED model, version 3" +title: MiCASA Land Carbon Flux +description: "Global, daily 0.1 degree resolution carbon fluxes from Net Primary Production (NPP), heterotrophic respiration (Rh), wildfire emissions (FIRE), and fuel wood burning emissions (FUEL) derived from the MiCASA model, version 1" --- diff --git a/user_data_notebooks/micasa-carbonflux-daygrid-v1_User_Notebook .ipynb b/user_data_notebooks/micasa-carbonflux-daygrid-v1_User_Notebook .ipynb new file mode 100644 index 00000000..3223cb5b --- /dev/null +++ b/user_data_notebooks/micasa-carbonflux-daygrid-v1_User_Notebook .ipynb @@ -0,0 +1,609 @@ +{ + "cells": [ + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "---\n", + "title: MiCASA Land Carbon Flux\n", + "description: Global, daily 0.1 degree resolution carbon fluxes from Net Primary Production (NPP), heterotrophic respiration (Rh), wildfire emissions (FIRE), and fuel wood burning emissions (FUEL) derived from the MiCASA model, version 1\n", + "authors: Siddharth Chaudhary, Vishal Gaur\n", + "published: 10 August 2023\n", + "execute:\n", + " freeze: true\n", + "---" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Approach\n", + "\n", + "1. Identify available dates and temporal frequency of observations for a given collection using the GHGC API `/stac` endpoint. The collection processed in this notebook is the Land-Atmosphere Carbon Flux data product.\n", + "2. Pass the STAC item into the raster API `/stac/tilejson.json `endpoint.\n", + "3. Using `folium.plugins.DualMap`, visualize two tiles (side-by-side), allowing time point comparison.\n", + "4. After the visualization, perform zonal statistics for a given polygon.\n", + " " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## About the Data\n", + "\n", + "This dataset presents a variety of carbon flux parameters derived from the Más Informada Carnegie-Ames-Stanford-Approach (MiCASA) model. The model’s input data includes air temperature, precipitation, incident solar radiation, a soil classification map, and several satellite derived products. All model calculations are driven by analyzed meteorological data from NASA’s Modern-Era Retrospective analysis for Research and Application, Version 2 (MERRA-2). The resulting product provides global, daily data at 0.1 degree resolution from January 2001 through December 2023. It includes carbon flux variables expressed in units of kilograms of carbon per square meter per day (kg Carbon/m²/day) from the following sources: net primary production (NPP), heterotrophic respiration (Rh), wildfire emissions (FIRE), and fuel wood burning emissions (FUEL). MiCASA is an extensive revision of the CASA – Global Fire Emissions Database, version 3 (CASA-GFED3) product. CASA-GFED3 and earlier versions of MERRA-driven CASA-GFED carbon fluxes have been used in several atmospheric carbon dioxide (CO₂) transport studies, serve as a community standard for priors of flux inversion systems, and through the support of NASA’s Carbon Monitoring System (CMS), help characterize, quantify, understand and predict the evolution of global carbon sources and sinks. " + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Installing the Required Libraries\n", + "Required libraries are pre-installed on the GHG Center Hub. If you need to run this notebook elsewhere, please install them with this line in a code cell:\n", + "\n", + "%pip install requests, folium, rasterstats, pystac_client, pandas, matplotlib" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Querying the STAC API\n", + "Please run the next cell to import the required libraries. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import folium\n", + "import folium.plugins\n", + "from folium import Map, TileLayer \n", + "from pystac_client import Client \n", + "import branca \n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Provide STAC and RASTER API endpoints\n", + "STAC_API_URL = \"http://ghg.center/api/stac\"\n", + "RASTER_API_URL = \"https://ghg.center/api/raster\"\n", + "\n", + "# Please use the collection name similar to the one used in the STAC collection.\n", + "# Name of the collection for CASA GFED Land-Atmosphere Carbon Flux monthly emissions. \n", + "collection_name = \"casagfed-carbonflux-monthgrid-v3\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fetch the collection from STAC collections using the appropriate endpoint\n", + "# the 'requests' library allows a HTTP request possible\n", + "collection = requests.get(f\"{STAC_API_URL}/collections/{collection_name}\").json()\n", + "collection" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Examining the contents of our `collection` under the `temporal` variable, we see that the data is available from January 2003 to December 2017. By looking at the `dashboard:time density`, we observe that the periodic frequency of these observations is monthly." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a function that would search for the above data collection in the STAC API\n", + "def get_item_count(collection_id):\n", + " count = 0\n", + " items_url = f\"{STAC_API_URL}/collections/{collection_id}/items\"\n", + "\n", + " while True:\n", + " response = requests.get(items_url)\n", + "\n", + " if not response.ok:\n", + " print(\"error getting items\")\n", + " exit()\n", + "\n", + " stac = response.json()\n", + " count += int(stac[\"context\"].get(\"returned\", 0))\n", + " next = [link for link in stac[\"links\"] if link[\"rel\"] == \"next\"]\n", + "\n", + " if not next:\n", + " break\n", + " items_url = next[0][\"href\"]\n", + "\n", + " return count" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Apply the above function and check the total number of items available within the collection\n", + "number_of_items = get_item_count(collection_name)\n", + "items = requests.get(f\"{STAC_API_URL}/collections/{collection_name}/items?limit={number_of_items}\").json()[\"features\"]\n", + "print(f\"Found {len(items)} items\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Examine the first item in the collection\n", + "items[0]" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exploring Changes in Carbon Flux Levels Using the Raster API\n", + "\n", + "We will explore changes in the land atmosphere Carbon flux `Heterotrophic Respiration` and examine their impacts over time. We'll then visualize the outputs on a map using `folium`. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# To access the year value from each item more easily, this will let us query more explicitly by year and month (e.g., 2020-02)\n", + "items = {item[\"properties\"][\"start_datetime\"][:7]: item for item in items} \n", + "# rh = Heterotrophic Respiration\n", + "asset_name = \"rh\"" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Below, we are entering the minimum and maximum values to provide our upper and lower bounds in `rescale_values`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rescale_values = {\"max\":items[list(items.keys())[0]][\"assets\"][asset_name][\"raster:bands\"][0][\"histogram\"][\"max\"], \"min\":items[list(items.keys())[0]][\"assets\"][asset_name][\"raster:bands\"][0][\"histogram\"][\"min\"]}" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we will pass the item id, collection name, and `rescaling_factor` to the `Raster API` endpoint. We will do this twice, once for December 2003 and again for December 2017, so that we can visualize each event independently." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "color_map = \"purd\" # please refer to matplotlib library if you'd prefer choosing a different color ramp.\n", + "# For more information on Colormaps in Matplotlib, please visit https://matplotlib.org/stable/users/explain/colors/colormaps.html\n", + "\n", + "# To change the year and month of the observed parameter, you can modify the \"items['YYYY-MM']\" statement\n", + "# For example, you can change the current statement \"items['2003-12']\" to \"items['2016-10']\" \n", + "december_2003_tile = requests.get(\n", + " f\"{RASTER_API_URL}/stac/tilejson.json?collection={items['2003-12']['collection']}&item={items['2003-12']['id']}\"\n", + " f\"&assets={asset_name}\"\n", + " f\"&color_formula=gamma+r+1.05&colormap_name={color_map}\"\n", + " f\"&rescale={rescale_values['min']},{rescale_values['max']}\", \n", + ").json()\n", + "december_2003_tile" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Now we apply the same process used in the previous step for the December 2017 tile\n", + "december_2017_tile = requests.get(\n", + " f\"{RASTER_API_URL}/stac/tilejson.json?collection={items['2017-12']['collection']}&item={items['2017-12']['id']}\"\n", + " f\"&assets={asset_name}\"\n", + " f\"&color_formula=gamma+r+1.05&colormap_name={color_map}\"\n", + " f\"&rescale={rescale_values['min']},{rescale_values['max']}\", \n", + ").json()\n", + "december_2017_tile" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing Land-Atmosphere Carbon Flux (Heterotrophic Respiration)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# For this study we are going to compare the RH level in 2003 and 2017 over the State of Texas \n", + "# To change the location, you can simply insert the latitude and longitude of the area of your interest in the \"location=(LAT, LONG)\" statement\n", + "# For example, you can change the current statement \"location=(31.9, -99.9)\" to \"location=(34, -118)\" to monitor the RH level in California instead of Texas\n", + "\n", + "# Set initial zoom and center of map for CO₂ Layer\n", + "# 'folium.plugins' allows mapping side-by-side\n", + "map_ = folium.plugins.DualMap(location=(31.9, -99.9), zoom_start=6)\n", + "\n", + "# The TileLayer library helps in manipulating and displaying raster layers on a map\n", + "# December 2003\n", + "map_layer_2003 = TileLayer(\n", + " tiles=december_2003_tile[\"tiles\"][0],\n", + " attr=\"GHG\",\n", + " opacity=0.8,\n", + " name=\"December 2003 RH Level\",\n", + " overlay= True,\n", + " legendEnabled = True\n", + ")\n", + "map_layer_2003.add_to(map_.m1)\n", + "\n", + "\n", + "# December 2017\n", + "map_layer_2017 = TileLayer(\n", + " tiles=december_2017_tile[\"tiles\"][0],\n", + " attr=\"GHG\",\n", + " opacity=0.8,\n", + " name=\"December 2017 RH Level\",\n", + " overlay= True,\n", + " legendEnabled = True\n", + ")\n", + "map_layer_2017.add_to(map_.m2)\n", + "\n", + "\n", + "# Display data markers (titles) on both maps\n", + "folium.Marker((40, 5.0), tooltip=\"both\").add_to(map_)\n", + "folium.LayerControl(collapsed=False).add_to(map_)\n", + "\n", + "\n", + "# Add a legend to the dual map using the 'branca' library. \n", + "# Note: the inserted legend is representing the minimum and maximum values for both tiles.\n", + "colormap = branca.colormap.linear.PuRd_09.scale(0, 0.3) # minimum value = 0, maximum value = 0.3 (kg Carbon/m2/month)\n", + "colormap = colormap.to_step(index=[0, 0.07, 0.15, 0.22, 0.3])\n", + "colormap.caption = 'Rh Values (kg Carbon/m2/month)'\n", + "\n", + "colormap.add_to(map_.m1)\n", + "\n", + "\n", + "# Visualizing the map\n", + "map_" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculating Zonal Statistics" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To perform zonal statistics, first we need to create a polygon. In this case we are creating a polygon in Texas (USA)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The Area of Interest (AOI) is set to Dallas, Texas (USA)\n", + "texas_dallas_aoi = {\n", + " \"type\": \"Feature\",\n", + " \"properties\": {},\n", + " \"geometry\": {\n", + " \"coordinates\": [\n", + " [\n", + " # [longitude, latitude]\n", + " [-96.1, 32.28], # Southeast Bounding Coordinate\n", + " [-96.1, 33.28], # Northeast Bounding Coordinate\n", + " [-97.58, 33.28], # Northwest Bounding Coordinate\n", + " [-97.58, 32.28], # Southwest Bounding Coordinate\n", + " [-96.1, 32.28] # Closing the polygon at the Southeast Bounding Coordinate\n", + " ]\n", + " ],\n", + " \"type\": \"Polygon\",\n", + " },\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# We will plug in the coordinates for a location inside the the polygon and a zoom level\n", + "aoi_map = Map(\n", + " tiles=\"OpenStreetMap\",\n", + " location=[\n", + " 32.81,-96.93, # coordinates for Dallas, Texas area\n", + " ],\n", + " zoom_start=9, # zoom in or out by increasing or decreasing the value here.\n", + ")\n", + "\n", + "folium.GeoJson(texas_dallas_aoi, name=\"Texas, Dallas\").add_to(aoi_map)\n", + "aoi_map" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Check the total number of items available for this location\n", + "items = requests.get(\n", + " f\"{STAC_API_URL}/collections/{collection_name}/items?limit=600\"\n", + ").json()[\"features\"]\n", + "print(f\"Found {len(items)} items\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Explore the first item\n", + "items[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The bounding box should be passed to the geojson param as a geojson Feature or FeatureCollection\n", + "def generate_stats(item, geojson):\n", + " result = requests.post(\n", + " f\"{RASTER_API_URL}/cog/statistics\",\n", + " params={\"url\": item[\"assets\"][asset_name][\"href\"]},\n", + " json=geojson,\n", + " ).json()\n", + " print(result)\n", + " return {\n", + " **result[\"properties\"],\n", + " \"start_datetime\": item[\"properties\"][\"start_datetime\"],\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Identify the start Date Time of the first observation in the collection\n", + "for item in items:\n", + " print(item[\"properties\"][\"start_datetime\"])\n", + " break" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the function above, we can generate the statistics for the area of interest. Now, we are going to print the wall time - the real-world-time - using the %%time command for the entire collection!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%%time\n", + "stats = [generate_stats(item, texas_dallas_aoi) for item in items]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate stats for the first item in the collection\n", + "stats[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a function that goes through every single item in the collection and populates their properties - including the minimum, maximum, and sum of their values - in a table.\n", + "def clean_stats(stats_json) -> pd.DataFrame:\n", + " df = pd.json_normalize(stats_json)\n", + " df.columns = [col.replace(\"statistics.b1.\", \"\") for col in df.columns]\n", + " df[\"date\"] = pd.to_datetime(df[\"start_datetime\"])\n", + " return df\n", + "\n", + "\n", + "df = clean_stats(stats)\n", + "df.head(5) # the number of granules displayed in the table can be changed by increasing or decreasing the value inserted here!" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing the Data as a Time Series\n", + "We can now explore the Heterotrophic Respiration time series (January 2003 -December 2017) available for the Dallas, Texas area. We can plot the data set using the code below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig = plt.figure(figsize=(20, 10)) #determine the width and height of the plot using the 'matplotlib' library\n", + "\n", + "plt.plot(\n", + " df[\"date\"],\n", + " df[\"max\"],\n", + " color=\"purple\",\n", + " linestyle=\"-\",\n", + " linewidth=0.5,\n", + " label=\"Max monthly Carbon emissions\",\n", + ")\n", + "\n", + "plt.legend()\n", + "plt.xlabel(\"Years\")\n", + "plt.ylabel(\"kg Carbon/m2/month\")\n", + "plt.title(\"Heterotrophic Respiration Values for Dallas, Texas (2003-2017)\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Now let's examine the Rh level for the 3rd item in the collection for Dallas, Texas area\n", + "# Keep in mind that a list starts from 0, 1, 2,... therefore items[2] is referring to the third item in the list/collection\n", + "print(items[2][\"properties\"][\"start_datetime\"]) #print the start Date Time of the third granule in the collection!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fetch the third granule in the collection and set the color scheme and rescale values. \n", + "october_tile = requests.get(\n", + " f\"{RASTER_API_URL}/stac/tilejson.json?collection={items[2]['collection']}&item={items[2]['id']}\"\n", + " f\"&assets={asset_name}\"\n", + " f\"&color_formula=gamma+r+1.05&colormap_name={color_map}\"\n", + " f\"&rescale={rescale_values['min']},{rescale_values['max']}\",\n", + ").json()\n", + "october_tile" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Map the Rh level for the Dallas, Texas area for the October, 2017 timeframe\n", + "aoi_map_bbox = Map(\n", + " tiles=\"OpenStreetMap\",\n", + " location=[\n", + " 32.8, # latitude\n", + " -96.79, # longitude\n", + " ],\n", + " zoom_start=9,\n", + ")\n", + "\n", + "map_layer = TileLayer(\n", + " tiles=october_tile[\"tiles\"][0],\n", + " attr=\"GHG\", opacity = 0.7, name=\"October 2017 RH Level\", overlay= True, legendEnabled = True\n", + ")\n", + "\n", + "map_layer.add_to(aoi_map_bbox)\n", + "\n", + "# Display data marker (title) on the map\n", + "folium.Marker((40, 5.9), tooltip=\"both\").add_to(aoi_map_bbox)\n", + "folium.LayerControl(collapsed=False).add_to(aoi_map_bbox)\n", + "\n", + "# Add a legend\n", + "colormap = branca.colormap.linear.PuRd_09.scale(0, 0.3) # minimum value = 0, maximum value = 0.3 (kg Carbon/m2/month)\n", + "colormap = colormap.to_step(index=[0, 0.07, 0.15, 0.22, 0.3])\n", + "colormap.caption = 'Rh Values (kg Carbon/m2/month)'\n", + "\n", + "colormap.add_to(aoi_map_bbox)\n", + "\n", + "aoi_map_bbox" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "In this notebook we have successfully completed the following steps for the STAC collection for CASA GFED Land-Atmosphere Carbon Flux data:\n", + "1.\tInstall and import the necessary libraries \n", + "2.\tFetch the collection from STAC collections using the appropriate endpoints\n", + "3.\tCount the number of existing granules within the collection\n", + "4.\tMap and compare the Heterotrophic Respiration (Rh) levels over the Dallas, Texas area for two distinctive years\n", + "5.\tCreate a table that displays the minimum, maximum, and sum of the Rh values for a specified region\n", + "6.\tGenerate a time-series graph of the Rh values for a specified region\n", + "\n", + "If you have any questions regarding this user notebook, please contact us using the [feedback form](https://docs.google.com/forms/d/e/1FAIpQLSeVWCrnca08Gt_qoWYjTo6gnj1BEGL4NCUC9VEiQnXA02gzVQ/viewform). " + ] + } + ], + "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.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}