NASA Acres and Climate Resilience Network

Author

Jacom Almon Orser and Dr. Michael Humber

Primary Learning Objectives

Technical Skills:

  1. Access and process satellite imagery using NASA’s APPEARS platform
  2. Work with different spatial data formats and resolutions
  3. Perform raster analysis and visualization
  4. Calculate and interpret NDVI values from multispectral satellite data

Analytical Skills:

  1. Compare vegetation health between areas affected and unaffected by saltwater intrusion
  2. Evaluate limitations and uncertainties in geospatial analysis

In this lesson you will:

  1. Understand the relationship between sealevel rise, salt water intrusion, and agricultural productivity in Maryland’s coastal regions
  2. Learn to work with and analyze multiple types of geospatial data (raster datasets) using Python
  3. Interpret vegetation health patterns using satellite-derived NDVI measurements
  4. Evaluate potential future impacts of sea level rise on agricultural land

This lesson will allow the learner to gain a deper understanding of the followinf concepts - Recognizing the economic importance of agriculture in Maryland - Understanding how sea level rise is impacting coastal farming - Identifying the role of remote sensing in monitoring environmental changes - Connecting local agricultural challenges to broader climate change impacts

This module can help to contextualize the impact of saltwater inundation. For this module, we will identify cropland, and then, using the NOAA sea level rise estimations, we can calculate the difference in productivity using NDVI as a measure of vegetation health. A graphical time series allows us to see areas impacted by sea level rise.

First, we can find the county-level statistics of harvestable acreage. We are using the Crop Data Layer (CDL) from the United States Department of Agriculture National Agriculture Statistics Service (USDA NASS)

  • Use API to call in the CDL dataset to map crop types.

After getting familiar with the dataset, we can modify it. Because we are interested in the impact of sea level rise and the effect we can find that data from the National Oceanic and Atmospheric Administration

  • Access the Sea level rise (elevation dataset) to identify new areas of potential areas that are at risk of future flooding. Clip to county of interest
  • Compare the CDL with the SLR mask and without to identify the NOAA estimated loss of land.

Then using Landsat create a time series for the Normalized Difference Vegetation Index (NDVI) of the masked cropland, derive insights about trends in NDVI.

  • Use NDVI to create a time series looking back in time at areas that have experienced flooding to visualize the movement from productive farms to moderate quality.

This all together would allow us to make a predictive analysis for Maryland in the future under the projections of sea level rise. Given the current conditions, subtracting the sea level rise inundated areas.

The data story we have derived concerns sea level rise in Maryland and its impact on production levels within the state. This module can help students draw from multiple data sources and derive insights using historical and future viewing data sets.

We can prompt the user to think about future impacts outside the direct sea level rise projections, allowing them to include a full picture and finally using that picture to identify economic impacts that action or inaction causes. This begs the question: What can the public do to enact changes rather than putting pressure on farmers to change?

Introduction

Created by NASA Acres, this module was built to promote the research that has been done. If you want to explore more about the data collected, explore the dashboard. And provide the public with the knowledge, know-how, and ability to use and understand this data. With the help of TOPST SCHOOL, this data discovery process walks through each data source, identifying the limitations of research and spatial data and exploring, as George Box says, “all models are wrong, some are useful.”

NASA Acres

NASA Acres is NASA’s consortium focused on agriculture and food security in the United States.

1

NASA Acres brings together actors throughout the agricultural community to share methods, data, and technology to work towards a richer knowledge about past and present agricultural land use, productivity, and sustainability in the U.S. The mission is also to create a stronger agricultural technology workforce ready to tackle the challenges of climate change and global hazards to U.S. agriculture and food security.

NASA Acres has defined the Essential Agricultural Variables (EAVs) to address this problem. These were designed by NASA Acres to define the capabilities of the top satellite data scientists and practitioners who make up NASA Acres Research, Development, and Extension partners, and the needs of decision-making-collaborators already in our network, to identify an initial set of focus.

  • Cropland and Crop Type Mapping

  • Crop and Crop Type Area Estimation

This can help us determine the changes in the cropland. As things change, we can tell how much and what is actually changing because we have mapped and studied this area. The need for accurate, consistent study within these areas of agriculture is vital for describing changes as they occur.

What is Remote Sensing?

Remote sensing is the action of measuring the reflectance of energy from objects. For this module we are using Landsat, a passive satellite that relies on the sun to send out energy and the sensor measures the reflectance.

From this, we can use both the visible (red, green, blue) reflectance and the infrared light to detect objects on the ground.

This is an example of a Landsat image. Compared to the aerial image, the Landsat image appears pixelated. This is because Landsat takes all the reflectances within each 30 by 30-meter square in the ground to get one value.

Generate the pull for the NDVI data. This data pull comes from The Application for Extracting and Exploring Analysis Ready Samples (AppEEARS), which offers a simple and efficient way to access data archives. We will use Landsat for this module, but a variety of datasets are available.

NDVI is a commonly used calculation as an indicator for the health of vegetation based on the ratio of reflectance of red to near-infrared values within the electromagnetic spectrum. If you want to learn more.

WHY AGRICULTURE?

According to the United States Department of Agriculture (USDA) in 2023 farming operations in Maryland (MD) were an estimated 2,000,000 acres. For grain corn in MD, in 2023, 440,000 acres were harvested. The total commercial value for all corn in the state was $355,740,000.

Food is a vital resource for direct and indirect consumption. However, as salt water intrudes into agricultural land, the impacts and consequences are just beginning to be felt.

As researchers, we must come to the same understanding of what is important in order to understand why we are studying agriculture.

CLIMATE SMART AGRICULTURE IN MARYLAND

Why is agriculture important in Maryland and what is salt water intrusion?

Researchers found that salt was intruding on coastal agricultural areas.

Saltwater impacted coastal farming on a broad scale. Although there was some debate around the area lost, estimates put land losses between 8,000 to 140,000 ha of surface inundation (Mondal et al. 2023; Taylor et al. 2020).

2

Researchers use satellite remote sensing to develop machine learning models built on ground-truthed data to identify salt patches in the mid-Atlantic region of the US.

The U.S. Mid-Atlantic has seen higher rates of sea level rise, marshes may be especially vulnerable. “In the Chesapeake Bay, sea level rise has already contributed to the degradation of over 80,000 ha (70%) of tidal marsh” (Taylor et al. 2020). This view can help us understand the impacts of small sea level rise on land.

Saltwater Intrusion

To understand more about saltwater intrusion in Maryland, run this code and watch the video that explains the causes and effects.

Learn more about saltwater inundation from the National Oceanic and Atmospheric Administration program titled Coastal Farming Challenges: Flooding, Salt, and Land Loss.

Below is a simplified illustration of saltwater intrusion:

3

Data Processing Tools

The primary tool we are using is Python. Python is used to take large quantities of data and help users define and derive stories from that data. The installation depends on the method you are using. For Google Colab, you must install rasterio (a substantial raster library) and import the following libraries.

# Use pip to install the Raster library
# !pip install rasterio
## importing libraries
# Extends pandas for working with geometric/geographic data, handling spatial operations and file formats like shapefiles
import geopandas as gpd

# Handles reading, writing, and processing of geospatial raster data (like satellite imagery or elevation data)
import rasterio

# Fundamental package for scientific computing in Python, provides support for large multi-dimensional arrays and matrices
import numpy as np  # Note: This is imported twice in your list

# Data manipulation and analysis library, particularly good for structured data in DataFrames
import pandas as pd

# Plotting library for creating static, animated, and interactive visualizations
import matplotlib.pyplot as plt  # Note: This is imported twice in your list

# Library for making HTTP requests to web services and APIs
import requests

#import json package
import json

# API for parsing and creating XML data
import xml.etree.ElementTree as ET

# Handles binary I/O objects
from io import BytesIO

# Provides functions for interacting with the operating system
import os

# Specific tools for transforming and reprojecting raster data
from rasterio.warp import calculate_default_transform, reproject, Resampling, transform_bounds

# Basic date and time types, useful for handling temporal data
from datetime import datetime, timedelta

# Creates interactive web maps
import folium

#  Adds raster layers (e.g., satellite images) to Folium maps
from folium import raster_layers

# Display graphical interfaces
from IPython.display import display

The base data that we are going to use for this module is Landsat 30 by 30 meter, 16 day highest quality NDVI value. To gather this data you must have a Earth Data login.

INTRODUCTORY CODE

Accessing Data

NASA Earth data requires a data pull request, this takes time to ‘order’, we can run this now to give the program time to gather the data we are requesting. This code chunk is used for local downloads if you have not yet downloaded data:

## NASA Earth Data username and password
# USERNAME = "USERNAME" ## ENTER HERE
# PASSWORD = "PASSWORD" ## ENTER HERE

## The submit the Landsat tiles, we have provided you with the geojson file of Talbot County.
## If you wish to use another county, download, and path to the other county geojson file
county_path = 'data/Talbot_County.geojson' # Path to county
# Conversion to geopandas data frame
county_data =  gpd.read_file(county_path)
 # Reproject the county_data to landsat
county_reprojected = county_data.to_crs('EPSG:4326')

year = 2018 # Year of interest
# Get the token from your Earth Data account
token = requests.post('https://appeears.earthdatacloud.nasa.gov/api/login',auth=(USERNAME, PASSWORD)).json()['token']
task = {'task_type': 'area',
          'task_name': 'Talbot_County',
          'params': {
                    'dates': [{'startDate':  f'06-01-{year}' , 'endDate': f'09-30-{year}'}],# Set the start and end dates for summer sections
                    'layers': [{'layer': 'SR_B4', 'product':'L08.002'},
                               {'layer': 'SR_B5', 'product':'L08.002'}], # Data of interest is the NDVI values
                    'geo': { #The geo field should contain the geoJSON, currently it is in a set
                        'type': 'FeatureCollection',
                        'features': [{
                            'type': 'Feature',
                            'properties': {},
                            'geometry': county_reprojected.geometry.iloc[0].__geo_interface__ #Extracting the geometry from the GeoPandas DataFrame as a GeoJSON-compatible dictionary
                        }]
                    },
                    "output": {"format": {"type": "geotiff"},
                              "projection": "native"}}}

task_id = requests.post('https://appeears.earthdatacloud.nasa.gov/api/task',json=task,headers={'Authorization': f'Bearer {token}'}).json()

You should receive an email from APPEEARS that says the task has started.

Working with Rasters

Reading Raster Data

There are two ways to display information: vectors (points, lines, polygons) or rasters. Rasters are continuous sheets that are layered across a space; they are made up of pixels. Each pixel represents the ground beneath it. For example, if a raster pixel is 30 by 30 meters, that means a single pixel represents 30 by 30 meters on the ground.

fips = "24041" # County code for all US counties, remember we called this in the first code chunk when we used the geojson to gather Landsat NDVI images
year = 2018 # Year of interest

# The CDL (crop data layer) is the authoritative data layer for the US crops
base_url = "https://nassgeodata.gmu.edu/axis2/services/CDLService/GetCDLFile"

# Pulling the data from the online source using the requests library allows us to access the data without needing to download the dataset
response = requests.get(f"{base_url}?year={year}&fips={fips}")
print(response.content)
root = ET.fromstring(response.content)
tif_url = root.find('.//returnURL').text
cdl_data = rasterio.open(tif_url)
cdl_meta = cdl_data.meta
data = cdl_data.read(1)
b'<ns1:GetCDLFileResponse xmlns:ns1="http://cropscape.csiss.gmu.edu/CDLService/"><returnURL>https://nassgeodata.gmu.edu/webservice/nass_data_cache/byfips/CDL_2018_24041.tif</returnURL></ns1:GetCDLFileResponse>'

Displaying Raster Data

MISSING TEXT

bounds = transform_bounds(cdl_data.crs, 'EPSG:4326', *cdl_data.bounds)

# Calculate the center of the image for the map
center_lat = (bounds[1] + bounds[3]) / 2
center_lon = (bounds[0] + bounds[2]) / 2

# Create a base map centered on the image
m = folium.Map(location=[center_lat, center_lon], zoom_start=10)

# Add the raster layer to the map
img = folium.raster_layers.ImageOverlay(
    data,
    bounds=[[bounds[1], bounds[0]], [bounds[3], bounds[2]]],

)
img.add_to(m)

# Add the colormap to the map

# Add layer control
folium.LayerControl().add_to(m)
display(m)
Make this Notebook Trusted to load map: File -> Trust Notebook

Zoom around in on the map. Look at the raster structure, the squares stacked next to each other, representing an area on the ground.

Spatially Project Raster Data

When working with geographic data, we have to begin by knowing that all of our data is in the right space on the globe. We begin with a function for reprojecting rasters. This is one of the keys when working with spatial data: ensuring that all of the data is based on the same spatial reference.

Reprojecting requires a resampling method; for this, we use the nearest neighbor’s resampling.

def reproject_raster(src_dataset, src_crs, src_transform, dst_crs):
    # Convert the destination CRS string into a CRS object that rasterio can use
    # For example, 'EPSG:4326' becomes a python coordinate object
    dst_crs = rasterio.crs.CRS.from_string(dst_crs)

    # Calculate the new dimensions and transformation matrix for the output raster
    # This ensures the whole image fits in the new coordinate system
    dst_transform, dst_width, dst_height = calculate_default_transform(
        src_crs,                    # Current coordinate system
        dst_crs,                    # Target coordinate system
        src_dataset.width,          # Current image width
        src_dataset.height,         # Current image height
        *src_dataset.bounds         # The geographical bounds of the image
    )

    # Copy the metadata from the source dataset
    # This includes things like data type, number of bands, etc.
    dst_kwargs = src_dataset.meta.copy()

    # Update the metadata with the new CRS, transform, width, and height
    dst_kwargs.update({
        'crs': dst_crs,
        'transform': dst_transform,
        'width': dst_width,
        'height': dst_height
    })

    # Create an empty array to store the reprojected data
    # Shape is (number of bands, new height, new width)
    dst_data = np.zeros((src_dataset.count, dst_height, dst_width),
                       dtype=src_dataset.dtypes[0])
    reproject(
        source=rasterio.band(src_dataset,1),
        destination=dst_data,             # Where to store the result
        src_transform=src_transform,           # Current transformation
        src_crs=src_crs,                      # Current coordinate system
        dst_transform=dst_transform,           # New transformation
        dst_crs=dst_crs,                      # New coordinate system
        resampling=Resampling.nearest         # Use nearest neighbor resampling
    )

    # Return both the reprojected data and the updated metadata
    return dst_data, dst_kwargs

Access data with API

To understand the nature of Maryland agriculture we can begin by using the CDL. This raster dataset comes at a 30-meter spatial resolution. We can access this data through their API. The current configuration allows data to be pulled at the county level.

COUNTY LEVEL CDL FOR FIPS

This view provides insight into the common commodities that are grown in Maryland in the desired year.

cdl_reprojected, cdl_meta_reprojected = reproject_raster(cdl_data, cdl_meta['crs'], cdl_meta['transform'], 'EPSG:4326')

The eastern seaboard has seen changes in the sea level along with increased flooding and the decrease in the predictability of water flow from rivers. This data comes from NOAA, this raster is the projection of inundated areas by the year 2050. Data access can be found here.

# Path to the stored sea level rise tif file
slr_path = 'data/MD_East_slr_depth_3_5ft.tif'

# This allows us to open the raster file, then reproject and close the original file so we are not storing duplicates of the raster
with rasterio.open(slr_path) as slr_raster:
    slr_meta = slr_raster.meta.copy()
    slr_meta['nodata'] = 0

    # Reproject
    slr_reprojected, slr_meta_reprojected = reproject_raster(
        slr_raster,
        slr_meta['crs'],
        slr_meta['transform'],
        'EPSG:4326')

Working with NASA APPEEARS Data

You should have received an email from APPEEARS letting you know your task has completed. If you have not received this, go to the APPEEARS website to view the progress by clicking on the explore tab and viewing the TALBOT_COUNTY request.

## NASA hosts their Landsat data in their program called APPEEARS
# To access the data you must probe it from cold storage, that was the initial code we ran
# If you wish to learn more, visit the API documentation from appeears
def doy_2_date(day_of_year_str): # This function changes the DOY value to a more easily readable format (from Julian day of the year to date based on month day year)
              year = int(day_of_year_str[:4]) # year string to integer
              day_of_year = int(day_of_year_str[4:]) # Julian day string to integer
              start_date = datetime(year, 1, 1) # using datetime to change year to first day first month of the year of interest
              target_date = start_date + timedelta(days=day_of_year - 1) # add the DOY of acquisition to the year
              return target_date.strftime('%m-%d-%Y') ## return proper formatting
bundle = requests.get(f'https://appeears.earthdatacloud.nasa.gov/api/bundle/{task_id["task_id"]}',headers={'Authorization': f'Bearer {token}'}).json()
QA_data = {}
data = {} # Create an empty dictionary to collect the data from appeears
bundle
{'files': [{'sha256': '17b628ac64fdfdcb7b9088f71a1e7075c6d58b2d6124b4d1025cca482cdcb423',
   'file_id': 'f0e3a5b2-ad6a-4873-876d-d6a50ae33926',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018157_aid0001.tif',
   'file_size': 4611159,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018157_aid0001.tif'},
  {'sha256': 'cd4c6e76ec2304ec2d5b820e9663b6c70e7850fca554736a08293c423e7e2583',
   'file_id': '161ca84b-88b0-40bf-8b03-3de4dc6bb721',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018166_aid0001.tif',
   'file_size': 3943037,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018166_aid0001.tif'},
  {'sha256': '374f4efb27e370a956b8b92dffeae795fdef3f8969c2f5f09219d315b0cb9f48',
   'file_id': 'f7cc7856-a938-430b-baca-a5bb11cd2ce7',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018173_aid0001.tif',
   'file_size': 4667202,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018173_aid0001.tif'},
  {'sha256': '890c8e09cf4bea742b268778abff84417f78729a865ebb0f8fbc788d5b2b4176',
   'file_id': '975948b7-b7f9-442e-b7f5-5d533e7069ab',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018182_aid0001.tif',
   'file_size': 3892355,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018182_aid0001.tif'},
  {'sha256': '81a6ab4dfbcb652e0096914245157101e2f89faf7d34d4ad4d23e8f01436df2e',
   'file_id': '5da93084-9769-4ea7-983b-4f749a441f8d',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018189_aid0001.tif',
   'file_size': 4067994,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018189_aid0001.tif'},
  {'sha256': '14c84cc240e9acd58cf51d140faf112dba0a5fb22ac441d0c6130258db0e825b',
   'file_id': '10472ca4-bd74-42ff-9910-c138381590f8',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018198_aid0001.tif',
   'file_size': 4443165,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018198_aid0001.tif'},
  {'sha256': 'b6e27060e2b6682a4874449aa4021e2d198f600573e8c3b73da7aab3e17e8a6c',
   'file_id': '77fd609f-b6df-4334-94da-ed14a80e60cf',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018205_aid0001.tif',
   'file_size': 4287187,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018205_aid0001.tif'},
  {'sha256': '8123dffd10a7c57983b1ca07cdaa97a79b670044c2070a8187e011b7e14f66b0',
   'file_id': '8d438908-5b12-4637-ab23-9ddb7d04baec',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018214_aid0001.tif',
   'file_size': 4453858,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018214_aid0001.tif'},
  {'sha256': '0878011997fda32c18743445ad5d471fdbdcc391b9483d5daa63336669629eff',
   'file_id': 'e4238b9f-3314-4818-81d3-7bcc06add73c',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018221_aid0001.tif',
   'file_size': 3786880,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018221_aid0001.tif'},
  {'sha256': '6db277d8fcf6e1e97d52f9027009f5f25f37d5a8eaca663c2dcc8f247ab50175',
   'file_id': '4553c456-d4cd-4ce9-8c7e-e9f2ea26a1b6',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018230_aid0001.tif',
   'file_size': 4802097,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018230_aid0001.tif'},
  {'sha256': 'bf976180bca64a9001cd69cf88a28c012e5dbc20e3348c1473ee5bbdecb0d1ba',
   'file_id': '00f980b6-f093-4c0e-89a3-77dd1dae2b3d',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018237_aid0001.tif',
   'file_size': 4608338,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018237_aid0001.tif'},
  {'sha256': '766a69fc0f40dc4abf2c5430d3417bdcbc758a234d5b1cdc6a872c82bc6eebb4',
   'file_id': '1a85f4cc-98dc-4096-9d8e-ae71909a42ca',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018246_aid0001.tif',
   'file_size': 3835018,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018246_aid0001.tif'},
  {'sha256': '3ba882e953574d8035ed3cce49aa144381858d96be2debff8a26f4736a344a6d',
   'file_id': '1dab5775-be86-46ea-bd75-63cf003d28c6',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018253_aid0001.tif',
   'file_size': 4661995,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018253_aid0001.tif'},
  {'sha256': '80a9cdabeb6efab41a7edbc9dfd6bd9c6f7c9812bb9287724322551a995dbdaa',
   'file_id': '81112daf-788e-4609-97fb-378ecbcbb167',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018262_aid0001.tif',
   'file_size': 3660368,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018262_aid0001.tif'},
  {'sha256': '5046133954e032586bef7859cb738e1d3f3692f8b2ae250d927a9af6cf1387bc',
   'file_id': 'f4948569-de6f-4d89-8721-9e394984fba1',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018269_aid0001.tif',
   'file_size': 3682402,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B4_CU_doy2018269_aid0001.tif'},
  {'sha256': '86a9ec78d98048649d2983cd007e216434333347130ca70e1f665b0d25190051',
   'file_id': 'cc2794af-4c1e-4c92-91dc-cc2b72fc4645',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018157_aid0001.tif',
   'file_size': 288081,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018157_aid0001.tif'},
  {'sha256': '2e1f5a08bb02060c6cc3ebc17a58893c44ad9f9f0c9039e9d981aade22e2969c',
   'file_id': '2de93a38-0bb3-48b2-a4db-525004bcbf7b',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018166_aid0001.tif',
   'file_size': 163000,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018166_aid0001.tif'},
  {'sha256': 'baba28464d006aabe325118e0cb443e3d749b03545b555cc8ba9b763e0645180',
   'file_id': 'c024672b-d40d-46b1-a261-05ea31afda28',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018173_aid0001.tif',
   'file_size': 59138,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018173_aid0001.tif'},
  {'sha256': 'b1a6cbecea141a5c8427efd75c5d96742167e1944bd22ad51f7f194c2ecc40f9',
   'file_id': '329b0c77-9e00-4073-911a-40597a7b60bd',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018182_aid0001.tif',
   'file_size': 176822,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018182_aid0001.tif'},
  {'sha256': 'fac9a3a0fb6909d48881f08712e2dabe6b26780a9d0c9c86a63433ff445288d8',
   'file_id': 'a69593e8-a42e-4062-98a7-a0c5b622ffa2',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018189_aid0001.tif',
   'file_size': 109628,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018189_aid0001.tif'},
  {'sha256': 'a7957b80c774c39888103acf6a3e59d6e1d311971da3cbd1aea6fe2e366f927c',
   'file_id': '6c01c577-547b-4e04-8317-cff246aa41f1',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018198_aid0001.tif',
   'file_size': 250103,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018198_aid0001.tif'},
  {'sha256': '24c2ac65ee1cba639c12c921281221504bdc0c5718ce6f9882a40e04c4057d7e',
   'file_id': '5996f0ce-6609-43aa-9d08-c43a1cb7adcc',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018205_aid0001.tif',
   'file_size': 63277,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018205_aid0001.tif'},
  {'sha256': '4701b2b73344ad6148e0354032d407bc2f99e8b9196b2bba1c5dce91d4c4d892',
   'file_id': '9a363ef1-95b9-4796-97f8-08f088a243b1',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018214_aid0001.tif',
   'file_size': 316808,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018214_aid0001.tif'},
  {'sha256': '0ece9e7d805006ee94f6d07482d4d7086719d6a3c5223264c61472c0bf47a660',
   'file_id': '0f263557-5f07-468f-9935-74fd29fc31c9',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018221_aid0001.tif',
   'file_size': 224411,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018221_aid0001.tif'},
  {'sha256': '15f49495006d425002a9e702ba692cdecaa656d864fa4dbf0650a0ca3aa5593e',
   'file_id': '52b6a8d5-9cac-4b9c-bcb1-e0d35bf815fa',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018230_aid0001.tif',
   'file_size': 221024,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018230_aid0001.tif'},
  {'sha256': '03c49e425c88aa173c892f920741952efc1bed8cd3bc23f36fd428ded4422cab',
   'file_id': '8bebdd36-0cc6-47d4-b590-d0860a3652bb',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018237_aid0001.tif',
   'file_size': 175511,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018237_aid0001.tif'},
  {'sha256': '48f6f947be5a6868e0e5e03388253d5e7182ce070111a92e33c116e126b35f73',
   'file_id': '37d8d549-5d4a-4fb2-8e52-8eda44196ff9',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018246_aid0001.tif',
   'file_size': 289283,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018246_aid0001.tif'},
  {'sha256': '9ace00536eede4417b61d1d3f958aecbc2d190062d71c8b9ee974bc40dd074d5',
   'file_id': 'ecb0b52b-63b6-46ab-8c2c-24aaae49a43d',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018253_aid0001.tif',
   'file_size': 56362,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018253_aid0001.tif'},
  {'sha256': 'c0205b98d3ea5446a896c8123218df2cf80c6fdf011a9c538dea262107e357ab',
   'file_id': '2601787f-142a-4e11-b986-556aa6613954',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018262_aid0001.tif',
   'file_size': 203431,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018262_aid0001.tif'},
  {'sha256': '7bd1c97bf1953a68b10b1213fb32c8a70c3106044350020efb234b27928a91fb',
   'file_id': '5ad2199b-9607-4582-83e5-5b0503563093',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018269_aid0001.tif',
   'file_size': 188318,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_QA_AEROSOL_CU_doy2018269_aid0001.tif'},
  {'sha256': 'db3dd17b3bd1eee45c2ce1571269a42078c15e80918a96357e624b61e84ae162',
   'file_id': '00b1f48f-75da-4c66-96c5-481405336efa',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018157_aid0001.tif',
   'file_size': 60147,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018157_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': '19e4d8fa-3e44-4ae1-b5db-429d6099ad2b',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018166_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018166_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': 'b7411089-6ecb-43ce-8ef8-cc86e0415d72',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018173_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018173_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': '675607f3-0e82-4bc3-af8e-ff5628bcd4d8',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018182_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018182_aid0001.tif'},
  {'sha256': '4513e96e29644ff1e96a83aa99524503cc5be2aea759e993e699c9e032ed85f7',
   'file_id': 'b228c68e-7548-4061-973d-5a6ebc45723c',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018189_aid0001.tif',
   'file_size': 60145,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018189_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': 'e29cd50e-4894-4092-9640-279754463622',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018198_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018198_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': '8667f438-ac28-4292-a2d6-5a5268513fdc',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018205_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018205_aid0001.tif'},
  {'sha256': 'f32032cdec0bd67ada22fe0355f804aa4ce01fff8adccdfc44190ed7a0e2b9bd',
   'file_id': 'a68ca891-8ea2-4c0c-9b05-689b0c64150b',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018214_aid0001.tif',
   'file_size': 60762,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018214_aid0001.tif'},
  {'sha256': 'bb6483672986c259f6cab1ed600e6eee1bfbdcbec6225c5ae8b0e26d208212cf',
   'file_id': '2e0ad941-3f63-4c3c-b422-ca06b9b29fc9',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018221_aid0001.tif',
   'file_size': 60155,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018221_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': '34d07fdd-8f1b-4034-9bd5-e1bf4ec3eb07',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018230_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018230_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': 'b2d229a2-f47e-4801-8735-8b45580ff685',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018237_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018237_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': '79edf650-55d7-4e8a-a448-118e475328dd',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018246_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018246_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': 'be759ab1-15a3-4cb1-863f-a309d7613c0a',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018253_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018253_aid0001.tif'},
  {'sha256': '36ec9b49bbbfeadd74084a700784b5eb0f71cd275b63eb2d21f48607fde165f7',
   'file_id': '13ee46d4-cf0a-46d8-beb1-3c0ad1d938e1',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018262_aid0001.tif',
   'file_size': 60142,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018262_aid0001.tif'},
  {'sha256': '4af7c38ef1238ebddd9ae9b16a0f8c416160c7507dcab0ee7ca0d4dfe7469a3d',
   'file_id': '14db9754-67d2-435c-aa94-3e803539f8cf',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018269_aid0001.tif',
   'file_size': 60141,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_RADSAT_CU_doy2018269_aid0001.tif'},
  {'sha256': 'f657fe4dc65e76f50c15698c225d6c2015168fee80d34d5225054feee9b8ff5c',
   'file_id': '0261ae18-1a06-4bd1-9eb4-a296b7741223',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018157_aid0001.tif',
   'file_size': 4697291,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018157_aid0001.tif'},
  {'sha256': '402dc763601ca5e181fac4eef74d64d7326b8773bad67f2279519b8b09c45df0',
   'file_id': 'c6305ab3-edef-422b-acdf-22cac007b979',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018166_aid0001.tif',
   'file_size': 4189149,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018166_aid0001.tif'},
  {'sha256': 'bcb537bee6fac01877d52ea1ef3dce2b1ace5c31725cbb820003601b2c054633',
   'file_id': '4b2c2cfe-8019-4f92-8a85-706010fbd0dd',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018173_aid0001.tif',
   'file_size': 4649799,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018173_aid0001.tif'},
  {'sha256': '078d1f04e9c636ab4ec77cebaaadb43c03ec6128169b517521262735e849f96f',
   'file_id': 'e871c4a9-8ac3-4f4f-951b-e6c8cdd5256f',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018182_aid0001.tif',
   'file_size': 4107878,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018182_aid0001.tif'},
  {'sha256': 'eb59a2d150801cb28c8b48f897774d2fa86b01f63e5788002c8f96948e3c472c',
   'file_id': 'add95543-9fe9-4d94-b1b0-13e185d6aaaf',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018189_aid0001.tif',
   'file_size': 4343192,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018189_aid0001.tif'},
  {'sha256': '3826fe3dbc3989add5851210c5be4b531c4ddbd27851a76f992232073b3e3f8e',
   'file_id': 'bb75c7e2-03ea-4111-89f2-a69777510550',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018198_aid0001.tif',
   'file_size': 4547878,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018198_aid0001.tif'},
  {'sha256': 'ac5ae5d51629d856bf716306535e1e03280ca9eed332c21c8f224ca97ff33081',
   'file_id': '23a694fc-ca87-45e4-8596-253d05748a70',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018205_aid0001.tif',
   'file_size': 4239075,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018205_aid0001.tif'},
  {'sha256': '1de2c3e9dcc397c1e21e2959e4eb5e2a3e13bad171e4d46bea3311dd8acc65d1',
   'file_id': 'da36526a-b5af-45c4-9299-812e1abb6a6f',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018214_aid0001.tif',
   'file_size': 4666502,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018214_aid0001.tif'},
  {'sha256': 'c04dbfb1b494f12f9e0c205cef73e6124945c9aa7eb07a319224519bddc26412',
   'file_id': '52d02530-01c0-4008-be17-87c0c7a459f9',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018221_aid0001.tif',
   'file_size': 4419285,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018221_aid0001.tif'},
  {'sha256': '18d48d2822f9ed19b04edef2c58e476f04268c776b284e587a9ef2bbbb25d1fc',
   'file_id': '4bbccec3-5782-4d8c-bf79-c21b0956e929',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018230_aid0001.tif',
   'file_size': 4832186,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018230_aid0001.tif'},
  {'sha256': 'fbc3c6f12573025cee1ce9853e8206e66f58d5be4cd5da5cffe817b7a321c380',
   'file_id': '779b2387-94c0-44fa-943c-41c9080ea65c',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018237_aid0001.tif',
   'file_size': 4844275,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018237_aid0001.tif'},
  {'sha256': '700e6fab752bb1674c8f52c7e3833abbf38ab11c6fd29928e1c7158030e60e7f',
   'file_id': '2958cbb9-e088-4c47-b081-c63fe5693e08',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018246_aid0001.tif',
   'file_size': 4106203,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018246_aid0001.tif'},
  {'sha256': '2e8b3ca86a1089a0a120cc45137774a17a29181829fcb1cedf7dda918fdc8ffb',
   'file_id': '4f6d7d76-3dc4-4896-9b61-7ca947464eac',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018253_aid0001.tif',
   'file_size': 4692602,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018253_aid0001.tif'},
  {'sha256': 'fabd21e8d6f00789a42b0aaf5cd80c6568666833a79fdbb1b826068ab8b33870',
   'file_id': '188c7fb8-10e7-49d4-827c-0aa2b64b8857',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018262_aid0001.tif',
   'file_size': 4235859,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018262_aid0001.tif'},
  {'sha256': 'a4d8b65096a86ee225ea2c176d29fce81a5427517e3ec9d7d2e9bbc807a25aab',
   'file_id': '2234823e-2e4c-4256-9931-b42f45bdf5e6',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018269_aid0001.tif',
   'file_size': 4140068,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_SR_B5_CU_doy2018269_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '16c43661-9690-49f8-8e87-30ae260c600d',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018157_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018157_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '77b42a9f-13d3-400c-aa59-6a3b823988d2',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018166_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018166_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '73c32204-8e44-482d-a58e-4266ab74dce3',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018173_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018173_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '668bf5fd-dee8-4c94-adec-55576af5a1ab',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018182_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018182_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '9b7646b8-a189-458c-ac31-c694850757fb',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018189_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018189_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '8dd36ad9-1117-4d49-ae69-5a4429e536f1',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018198_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018198_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '9ae86431-375f-45af-a4eb-c62995b549c6',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018205_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018205_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': 'ccedefdb-886a-4ea7-930c-73b413a3be49',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018214_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018214_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': 'a2d803de-5b7f-478b-a03b-489c00d2ecf7',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018221_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018221_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': 'b944c5c1-6bc3-4a9d-8533-ed907cb906fe',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018230_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018230_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '095c3fb5-a5b0-4d61-b7c0-37048d6b1fbc',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018237_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018237_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '686a47a8-9c8f-4016-aa28-393210648e78',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018246_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018246_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': 'c252ce99-f228-428d-b07b-aefaea990366',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018253_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018253_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': '142e091d-6b43-42c3-9797-8d5f6a6009ae',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018262_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018262_aid0001.tif'},
  {'sha256': '7183c85ac59622dbd8d0958a44318c0663a1da31288565a37661ce818e63ff94',
   'file_id': 'f87351f3-f426-458d-a99a-c1ff9b63c069',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018269_aid0001.tif',
   'file_size': 38872,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_LINEAGE_CU_doy2018269_aid0001.tif'},
  {'sha256': '24d3fb2db0a08dcd3e2463e61b50cd9f0b5132d2eb458e71d642b27e95997d27',
   'file_id': 'c59a115a-a69c-458a-a8e0-9c9172b2a836',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018157_aid0001.tif',
   'file_size': 309671,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018157_aid0001.tif'},
  {'sha256': '70c2cf9bb20a7560fd50ee6a79e8ee97d108c390aeadd9d31c5ffa7ed32f6970',
   'file_id': 'f9db2b17-41ad-42b7-a92a-0a28859fe3c7',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018166_aid0001.tif',
   'file_size': 120071,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018166_aid0001.tif'},
  {'sha256': '21f00a831574d1404fe8990bbb63583b21a3717c5d522ceebdf000e84b9fac47',
   'file_id': '055c634c-b20f-4bdc-a496-4c46719d000c',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018173_aid0001.tif',
   'file_size': 199737,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018173_aid0001.tif'},
  {'sha256': '38916f4e7399969c88967e42e25150c3af612e067ea5174012c4dffe368cd541',
   'file_id': '93a39aeb-8beb-4d51-8817-2a128aa808ea',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018182_aid0001.tif',
   'file_size': 121560,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018182_aid0001.tif'},
  {'sha256': 'fa9336a18832282738a501a8eab7b5c27606825d80b6ee34b8c91fe7333e68a6',
   'file_id': '0cc3bdcb-0230-483c-aedf-4d6871a59b47',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018189_aid0001.tif',
   'file_size': 122607,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018189_aid0001.tif'},
  {'sha256': '7dd6157238a8865086a752c10a2540befcb7c707997c4b008ef5a6d7501fc15b',
   'file_id': '6d12b7e1-33f0-4557-b49e-41789dae0b5a',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018198_aid0001.tif',
   'file_size': 204448,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018198_aid0001.tif'},
  {'sha256': '6588efc50164ee3e73f5d5a87615825aed32c8f104e7c8608a8cb421e1f24d78',
   'file_id': '0230ed1b-45f8-4b5d-8174-328cf2131c25',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018205_aid0001.tif',
   'file_size': 139991,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018205_aid0001.tif'},
  {'sha256': '90c0f97017f2181a16795676a39da05257b4356d886c28fd6b8db83017a89cdb',
   'file_id': '4b659bec-2557-47fe-adcf-73b72b305dc0',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018214_aid0001.tif',
   'file_size': 334000,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018214_aid0001.tif'},
  {'sha256': 'b90d858fe61f05b149efc0ce52ab942a726e1a97b16d99beb095fbac8c321726',
   'file_id': '573f9812-c496-4097-980a-fa9e4c6ce920',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018221_aid0001.tif',
   'file_size': 246250,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018221_aid0001.tif'},
  {'sha256': 'f75f3fed591a09133687750c8149b7d29ef4e6e15baa560b76d262cf7f9f2f61',
   'file_id': '313911e6-c512-4d04-b480-d2aa1ca30145',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018230_aid0001.tif',
   'file_size': 171440,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018230_aid0001.tif'},
  {'sha256': '9dc3c5be3cf72b32b3420324c5c251eae025af8d44141dd39fbd1e37033e8d93',
   'file_id': '9af369d2-e652-40ae-be3d-36abf8104c18',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018237_aid0001.tif',
   'file_size': 204891,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018237_aid0001.tif'},
  {'sha256': '11552df0c265e3a26eb10193902d629369061b56e25f063767df98725551b5b7',
   'file_id': 'c14382a5-9307-4cae-bba0-76aa8f1b56e1',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018246_aid0001.tif',
   'file_size': 226971,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018246_aid0001.tif'},
  {'sha256': '0b728e6be301ba49affce673ae23622e57dcc5a930eb3ed8e40bdbcf08fb814b',
   'file_id': 'af1b857c-4bed-4e5d-bcdf-997a2915f183',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018253_aid0001.tif',
   'file_size': 132798,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018253_aid0001.tif'},
  {'sha256': 'afed8e7c2210ae56bcf177a12f2b0e9ae2dee8fbe65d13c5c027129c873ca329',
   'file_id': 'a9c6f0bd-e8d8-4961-b87a-a14a332c4016',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018262_aid0001.tif',
   'file_size': 127148,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018262_aid0001.tif'},
  {'sha256': '80378129504b3da632ab6b942ba106ac364dabf2753f75c9a46addc2622d6520',
   'file_id': '465d3c39-2e1d-472b-aa80-3e82d1ec9af3',
   'file_name': 'L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018269_aid0001.tif',
   'file_size': 163425,
   'file_type': 'tif',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08.002_2018137_to_2018273/L08.002_QA_PIXEL_CU_doy2018269_aid0001.tif'},
  {'sha256': 'badc041c6f4e9ff2b8c66f5df24350b7c789f3a4d61b51341163da6477be8a05',
   'file_id': '75d0cbfa-ecfc-4a83-b28a-fc2b41f45ef5',
   'file_name': 'L08-002-SR-QA-AEROSOL-CU-lookup.csv',
   'file_size': 1670,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-SR-QA-AEROSOL-CU-lookup.csv'},
  {'sha256': '42975e156330815c979e1229cc8cafadd9ea95850296081114b14e57d7821a64',
   'file_id': '48b052d6-2ab5-4037-a073-814684438175',
   'file_name': 'L08-002-QA-RADSAT-CU-lookup.csv',
   'file_size': 755,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-QA-RADSAT-CU-lookup.csv'},
  {'sha256': '44a9da27fc2e12ec055161a7008ec8be8c287ff40e19ff5c5f6feda2e5bc55a2',
   'file_id': '96f14492-5f5b-4f3a-aa47-8ec28efcb666',
   'file_name': 'L08-002-QA-LINEAGE-CU-lookup.csv',
   'file_size': 42,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-QA-LINEAGE-CU-lookup.csv'},
  {'sha256': '6a2d1509ac0eb1d491d9f97313ff108cc8108508b1a8a005d54902caf3c3e0ab',
   'file_id': '43f43072-b524-4ca0-a2b3-7f31c6d3bd4b',
   'file_name': 'L08-002-QA-PIXEL-CU-lookup.csv',
   'file_size': 9238,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-QA-PIXEL-CU-lookup.csv'},
  {'sha256': '0ee52de0533b08e052ff41f4766eb5d1785f16573350c47d2e198d4fedc7dd6e',
   'file_id': 'abdacdf4-ea16-42f8-9722-d1da301254e6',
   'file_name': 'L08-002-SR-QA-AEROSOL-CU-Statistics-QA.csv',
   'file_size': 2202,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-SR-QA-AEROSOL-CU-Statistics-QA.csv'},
  {'sha256': '930bb24267ec1f3c77841939a78e64ec9a939f555c830b3687deb72c7e886273',
   'file_id': '8e58639e-e5b9-4a12-9997-f5bc465079ae',
   'file_name': 'L08-002-QA-RADSAT-CU-Statistics-QA.csv',
   'file_size': 887,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-QA-RADSAT-CU-Statistics-QA.csv'},
  {'sha256': 'cbedcd08ffcdd0a10e60cfbbde775405ca49d812e01f985af18e86d9b87c0790',
   'file_id': '93f728b1-692a-4a96-bbf4-b146e0b010cf',
   'file_name': 'L08-002-QA-LINEAGE-CU-Statistics-QA.csv',
   'file_size': 826,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-QA-LINEAGE-CU-Statistics-QA.csv'},
  {'sha256': 'f4fc91d61dc338187268cc5ca14ba10ef737bbfdd316f1f3c8e678a0cd2467e8',
   'file_id': 'cb5022d7-183c-4b38-954c-eafb39104ffd',
   'file_name': 'L08-002-QA-PIXEL-CU-Statistics-QA.csv',
   'file_size': 2634,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-QA-PIXEL-CU-Statistics-QA.csv'},
  {'sha256': '67f57531f7b943291a334b6106f24f671b74bd59c279e0674f966df38928cb01',
   'file_id': 'db72ddeb-822a-4ceb-9ae5-05f54ebb985a',
   'file_name': 'L08-002-Statistics.csv',
   'file_size': 5673,
   'file_type': 'csv',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/L08-002-Statistics.csv'},
  {'sha256': 'e9c4a40e839ac0280d0ea8e1ecc3a5f20c20a497afd52e5f072a4bb41dff8918',
   'file_id': 'f1112eba-c98e-4975-b6d1-ef0f374b6dd7',
   'file_name': 'Talbot-County-granule-list.txt',
   'file_size': 14160,
   'file_type': 'txt',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/Talbot-County-granule-list.txt'},
  {'sha256': '1cb0ded677a9a9f947c3db0e32c4c35015905f65074072822e30d51fc4f2ded7',
   'file_id': 'e11d51fe-740b-4633-8d3e-ed7bbcc3b89d',
   'file_name': 'Talbot-County-request.json',
   'file_size': 61734,
   'file_type': 'json',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/Talbot-County-request.json'},
  {'sha256': '5ee1621f970ccca1a8ccd3f401fd9ff647a1b0cf7ac89748fb4589f6e05e05e7',
   'file_id': '47144630-27a1-4f6c-a8d7-22606d08b8cf',
   'file_name': 'Talbot-County-L08-002-metadata.xml',
   'file_size': 21769,
   'file_type': 'xml',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/Talbot-County-L08-002-metadata.xml'},
  {'sha256': '43a4092efcfac3cb297ad2063de5849be6f7869b24605e6fa7e064335cdaa5d0',
   'file_id': 'f238f3d0-5315-4573-82ef-245ef60d489d',
   'file_name': 'README.md',
   'file_size': 37481,
   'file_type': 'txt',
   's3_url': 's3://appeears-output/0bf195aa-7544-4a53-83c9-793e36cf821d/README.md'}],
 'created': '2025-02-03T23:02:56.208443',
 'task_id': '0bf195aa-7544-4a53-83c9-793e36cf821d',
 'updated': '2025-02-03T23:06:38.236079',
 'bundle_type': 'area'}
for file in bundle['files']: # loops through each Landsat tile that we called.
    file_id = file['file_id'] # store the name of the tile
    if '_doy' in file['file_name']: # doy is the day of the year, ordering the dictionary by doy allows for easier access later
      # This allows us to get just the files of interest. We only want the
      if "SR_B4" in file['file_name'] or "SR_B5" in file['file_name'] or "QA_PIXEL_C" in file['file_name']:
          datesy = file['file_name'].split('_doy')[1][:7] # seperation of doy values
          doy = doy_2_date(datesy) # calling the function (from Julian day (001 is the first day of the year, 365 is the last day of the year) to mm-dd-yyyy
          band = file['file_name'].split('/L08.002_')[1][:5]
      else:
          continue
      # access the NDVI data via request library
      file_download = requests.get(
          'https://appeears.earthdatacloud.nasa.gov/api/bundle/{0}/{1}'.format(task_id['task_id'], file_id),
          headers={'Authorization': 'Bearer {0}'.format(token)},
          allow_redirects=True,
          stream=True)
      # Get the status of the file
      file_download.raise_for_status()
      # This error warning allows for continuation even if there is an error
      if not file_download.content:
          print(f"Warning: Empty file downloaded for {file['file_name']}") # print warning message if there is an error, continue to next data set otherwise
          continue
      file_content = BytesIO(file_download.content) # format the downloaded content
      with rasterio.open(file_content) as src_initial: # open the accessed raster
          src = src_initial.read(1, masked=True) # read in the layer data
          src_meta = src_initial.meta # access the metadata
          dst_crs = 'EPSG:4326' # define the crs
          transform, width, height = calculate_default_transform(
              src_meta['crs'], dst_crs, src.shape[1], src.shape[0], *src_initial.bounds)
          kwargs = src_meta.copy()
          # collect the current meta data information
          kwargs.update({
              'crs': dst_crs,
              'transform': transform,
              'width': width,
              'height': height
          })

          dst = np.zeros((height, width), dtype=src_meta['dtype'])
          # Begin the reprojection process based on earlier defined projections of interest
          reproject(
              source=src,
              destination=dst,
              src_transform=src_meta['transform'],
              src_crs=src_meta['crs'],
              dst_transform=transform,
              dst_crs=dst_crs,
              resampling=Resampling.nearest)

          # update the data (if no data set to 0)
          kwargs.update({'nodata': 0})
          # name the data
          key = f'{band}'
          if key not in data:
              # if first dataset, append the metadata to the entire dictionary
              data[key] = {'data': [], 'meta': kwargs, 'doy': []}
          # stack the data and data
          data[key]['data'].append(dst)
          data[key]['doy'].append(doy)

    else:
      continue

# name the stacked data, day, and metadata to be referenced later
nir = np.stack(data['SR_B5']['data']) / 100
red = np.stack(data['SR_B4']['data']) / 100
qa_flags = np.stack(data['QA_PI']['data'])
day = np.stack(data['SR_B5']['doy'])
meta_nir = data['SR_B5']['meta']
meta_red = data['SR_B4']['meta']

ndvi = np.where((nir + red) != 0, (nir - red) / (nir + red), 0)

Now that we have an NDVI dataset for each date, we have to filter out the cloudy or otherwise poor-quality NDVI values.

qa_flags_to_mask = [21824, 21890, 21952, 22018, 22146, 22208] ## These are the values that indicate the higher quality of pixel
masked_ndvi = np.where(np.isin(qa_flags, qa_flags_to_mask), np.nan, ndvi) # filter the NDVI array
## This function resamples the data to the same
# Because the NDVI is 30 by 30-meters, the CDL data is at 30 by 30-meter resolution, and the SLR is less than 10 by 10-meter resolution
# Resampling to the same spatial scale allows for analysis on the same spatial scale
def resample_data(data, data_meta, to_reproject, method):
    # collect the metadata from the CDL dataset
    resampled_data = np.zeros(
        (data.shape[0], to_reproject['height'], to_reproject['width']),
        dtype=data.dtype
    )
    # collect the metadata from the target dataset
    for i in range(data.shape[0]): # Because the NDVI stack has multiple dates, we have to loop through the stacked data
        reproject(
            source=data[i],
            destination=resampled_data[i],
            src_transform=data_meta['transform'],
            src_crs=data_meta['crs'],
            dst_transform=to_reproject['transform'],
            dst_crs=to_reproject['crs'],
            resampling=method # method of resampling - either nearest neightbor or bilinear (average of 4 closest neighbors)
        )
    # update the target dataset to the CDL dataset height and width
    updated_meta = data_meta.copy()
    updated_meta.update({
        'transform': to_reproject['transform'],
        'width': to_reproject['width'],
        'height': to_reproject['height'],
        'crs': to_reproject['crs']
    })

    return resampled_data, updated_meta

cdl_resampled, cdl_resampled_meta = resample_data(cdl_reprojected, cdl_meta_reprojected, meta_red, Resampling.nearest)
slr_resampled, slr_resampled_meta = resample_data(slr_reprojected, slr_meta_reprojected, meta_red, Resampling.bilinear)

# print out the dataset shapes to see how the transformation has changed the resolution of the data
print("NDVI shape:", ndvi.shape)

print("Original CDL shape:", cdl_reprojected.shape)
print('Resampled CDL:', cdl_resampled.shape)

print("Original SLR shape:", slr_reprojected.shape)
print("Resampled SLR shape:", slr_resampled.shape)
NDVI shape: (15, 1681, 2153)
Original CDL shape: (1, 1681, 2153)
Resampled CDL: (1, 1681, 2153)
Original SLR shape: (1, 44790, 28460)
Resampled SLR shape: (1, 1681, 2153)

This code places both rasters on the same map. We first select only corn (where the CDL value is equal to 1). Look on the CDL website if you are interested in other land classes.

corn_mask = cdl_resampled[0,:,:] == 1 # Sets the CDL to only values of 1, which is representative of corn
SLR_MASK = slr_resampled[0,:,:] <= 10  # values that will be underwater



fig, ax = plt.subplots(figsize=(15, 5))

ax.imshow(corn_mask, cmap='Greens', alpha=0.5)
ax.imshow(SLR_MASK, cmap='Blues', alpha=0.5)

plt.tight_layout()
plt.show()

# Calculate the area of overlap between the corn and water masks.
overlap_mask = np.logical_and(corn_mask, SLR_MASK)

# Get the resolution of the raster data (assuming both are the same)
resolution = meta_red['transform'][0]  # Assuming the transform is consistent across all rasters
# Calculate the area of each pixel in acres (1 acre = 43560 sq ft)
pixel_area_acres = (30 * 3.28084)**2 / 43560 # convert from 30 meters to acres

# Calculate the total impacted area
impacted_acres = np.sum(overlap_mask) * pixel_area_acres

print(f"Acres impacted by flooding in corn fields: {impacted_acres:.2f}")

# Calculate the area of corn based on the corn mask.
corn_area_acres = np.sum(corn_mask) * pixel_area_acres
print(f"Total acres of corn: {corn_area_acres:.2f}")

Acres impacted by flooding in corn fields: 57.60
Total acres of corn: 36616.42

What can we tell from the changes in corn acreage and the amount below

Graphically view the changes in NDVI.

# Graph the differences

corn_above_water_mask = corn_mask & ~SLR_MASK # set the water mask (corn and not below water)
corn_below_water_mask = corn_mask & SLR_MASK # set the below water mask for corn

corn_above_water_mask = corn_above_water_mask[:,:]
corn_below_water_mask = corn_below_water_mask[:,:]
masked_ndvi_below_water = masked_ndvi[:, corn_below_water_mask] # find the NDVI for below water
masked_ndvi_above_water = masked_ndvi[:, corn_above_water_mask] # find the NDVI for above water


ndvi_analysis =  {
    'corn_below_water': { # gather data for the corn that is to be below water
        'mask': corn_below_water_mask,
        'ndvi': masked_ndvi_below_water,
        'mean': np.mean(masked_ndvi_below_water, axis=1) if masked_ndvi_below_water.size > 0 else None,
        'min': np.min(masked_ndvi_below_water, axis=1) if masked_ndvi_below_water.size > 0 else None,
        'max': np.max(masked_ndvi_below_water, axis=1) if masked_ndvi_below_water.size > 0 else None
    },
    'corn_above_water': {
        'mask': corn_above_water_mask,
        'ndvi': masked_ndvi_above_water,
        'mean': np.mean(masked_ndvi_above_water, axis=1) if masked_ndvi_above_water.size > 0 else None,
        'min': np.min(masked_ndvi_above_water, axis=1) if masked_ndvi_above_water.size > 0 else None,
        'max': np.max(masked_ndvi_above_water, axis=1) if masked_ndvi_above_water.size > 0 else None
    }
}



plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.plot(day, ndvi_analysis['corn_above_water']['mean'], label='Corn Above Water', color='green')
plt.plot(day, ndvi_analysis['corn_below_water']['mean'], label='Corn Below Water', color='blue')
plt.title('Mean NDVI')
plt.xlabel('Days')
plt.xticks(rotation=90)
plt.ylabel('NDVI')
plt.legend()


plt.subplot(1, 2, 2)
plt.plot(day, ndvi_analysis['corn_above_water']['max'], label='Corn Above Water', color='green')
plt.plot(day, ndvi_analysis['corn_below_water']['max'], label='Corn Below Water', color='blue')
plt.title('Maximum NDVI')
plt.xlabel('Days')
plt.xticks(rotation=90)
plt.ylabel('NDVI')
plt.legend()

plt.tight_layout()
plt.show()

for condition in ['corn_below_water', 'corn_above_water']:
    print(f"\n{condition.replace('_', ' ').title()} Corn Analysis per tile:")
    for stat in ['mean', 'max']:
        print(f"{stat.capitalize()} NDVI: {ndvi_analysis[condition][stat]}")


Corn Below Water Corn Analysis per tile:
Mean NDVI: [        nan         nan         nan         nan         nan         nan
 -0.02143939         nan         nan         nan         nan         nan
  0.02174798         nan         nan]
Max NDVI: [       nan        nan        nan        nan        nan        nan
 0.00174968        nan        nan        nan        nan        nan
 0.04795939        nan        nan]

Corn Above Water Corn Analysis per tile:
Mean NDVI: [        nan         nan         nan         nan         nan         nan
 -0.0182513          nan         nan         nan         nan         nan
  0.02514324         nan         nan]
Max NDVI: [       nan        nan        nan        nan        nan        nan
 0.00197202        nan        nan        nan        nan        nan
 0.07461124        nan        nan]

We can see that it is currently in trouble because the NDVI values are already lower, but we also know the number of acres impacted. What are the estimations for the loss of land? Building on that, what other areas beyond these calculations might be impacted as the sea rises?

We can see that the corn predicted to be below water in 2050 is already showing signs of decreased NDVI values. As the sea level continues to rise and salinization impacts farmers, what are the future conditions for corn growing in Maryland? What are the estimated impacts? What can we do?

# Final Analysis and Reflection Section

# Cropland and Crop Type Mapping Insights
cropland_impact = {
    'total_corn_acres': corn_area_acres,
    'projected_flooded_acres': impacted_acres,
    'percent_at_risk': (impacted_acres / corn_area_acres) * 100
}

# Crop Area Estimation Insights
ndvi_trend_analysis = {
    'below_water_ndvi_mean': np.mean(ndvi_analysis['corn_below_water']['mean']),
    'above_water_ndvi_mean': np.mean(ndvi_analysis['corn_above_water']['mean']),
    'productivity_difference': np.mean(ndvi_analysis['corn_above_water']['mean']) - np.mean(ndvi_analysis['corn_below_water']['mean'])
}

# Print Narrative Report
print("\n--- NASA Acres Essential Agricultural Variables (EAV) Analysis ---")
print(f"Total Corn Acreage: {cropland_impact['total_corn_acres']:.2f} acres")
print(f"Projected Flood Impact: {cropland_impact['projected_flooded_acres']:.2f} acres")
print(f"Percentage of Corn Land at Risk: {cropland_impact['percent_at_risk']:.2f}%")
print(f"\nNDVI Productivity Assessment:")
print(f"  Corn Above Water NDVI: {ndvi_trend_analysis['above_water_ndvi_mean']:.4f}")
print(f"  Corn Below Water NDVI: {ndvi_trend_analysis['below_water_ndvi_mean']:.4f}")
print(f"  Productivity Difference: {ndvi_trend_analysis['productivity_difference']:.4f}")

# Reflection on Broader Implications
print("\nReflection:")
print("This analysis demonstrates the critical importance of:")
print("1. Continuous monitoring of agricultural lands")
print("2. Understanding climate change impacts on crop productivity")
print("3. Developing adaptive strategies for coastal agricultural communities")

--- NASA Acres Essential Agricultural Variables (EAV) Analysis ---
Total Corn Acreage: 36616.42 acres
Projected Flood Impact: 57.60 acres
Percentage of Corn Land at Risk: 0.16%

NDVI Productivity Assessment:
  Corn Above Water NDVI: nan
  Corn Below Water NDVI: nan
  Productivity Difference: nan

Reflection:
This analysis demonstrates the critical importance of:
1. Continuous monitoring of agricultural lands
2. Understanding climate change impacts on crop productivity
3. Developing adaptive strategies for coastal agricultural communities

Knowledge Check

Test your knowledge from this module.

  • What are the insights that we can derive from this module?
  • What are the current impacts of land being close to the water?
  • What is the potential loss of productive land?
  • Where could there be errors given the sampling methods?

This is where mapping and monitoring the changes in our farmland is crucial. We can identify, monitor, and track changes as they arise. We can apply this view to a historical view using earlier imagery or later imagery to track the newest updates, even applying models to highlight potential future views.

Printing and Sharing Results

If you want to download the tifs you created, you can do so here.

SLR_output_tif_path = '' # Replace with your desired path
slr_masked_int = SLR_MASK.astype(rasterio.uint8)


with rasterio.open(
    SLR_output_tif_path,
    'w',
    driver='GTiff',
    height=slr_resampled_meta['height'],
    width=slr_resampled_meta['width'],
    count=1,  # Number of bands in the output GeoTIFF
    dtype=rasterio.uint8,
    crs=slr_resampled_meta['crs'],
    transform=slr_resampled_meta['transform'],
    nodata=0 # Set nodata value if necessary
) as dst:
    dst.write(slr_masked_int, 1)

print(f"Masked SLR saved to: {SLR_output_tif_path}")
corn_maskoutput_tif_path = '' # Replace with your desired path
corn_mask_int = corn_mask.astype(rasterio.uint8)


with rasterio.open(
    corn_maskoutput_tif_path,
    'w',
    driver='GTiff',
    height=cdl_resampled_meta['height'],
    width=cdl_resampled_meta['width'],
    count=1,  # Number of bands in the output GeoTIFF
    dtype=rasterio.uint8,
    crs=cdl_resampled_meta['crs'],
    transform=cdl_resampled_meta['transform'],
    nodata=0 # Set nodata value if necessary
) as dst:
    dst.write(corn_mask_int, 1)

print(f"Masked SLR saved to: {corn_maskoutput_tif_path}")

References

Mondal, P., M. Walter, J. Miller, R. Epanchin-Niell, K. Gedan, V. Yawatkar, E. Nguyen, and K. L. Tully. 2023. “The Spread and Cost of Saltwater Intrusion in the US Mid-Atlantic.” Nature Sustainability 6 (11): 1352–62. https://doi.org/10.1038/s41893-023-01186-6.
Taylor, Lotem, David Curson, Gregory M. Verutes, and Chad Wilsey. 2020. “Mapping Sea Level Rise Impacts to Identify Climate Change Adaptation Opportunities in the Chesapeake and Delaware Bays, USA.” Wetlands Ecology and Management 28 (3): 527–41. https://doi.org/10.1007/s11273-020-09729-w.

Footnotes

  1. Credit: NASA Acres↩︎

  2. Photo courtesy of Jarrod Miller↩︎

  3. Courtesy of the authors↩︎