Download and process GOES-16 and GOES-17 data from NOAA's archive on AWS using Python.

Overview

Download and display GOES-East and GOES-West data

DOI

GOES-East and GOES-West satellite data are made available on Amazon Web Services through NOAA's Big Data Program. GOES-2-go is a python package that makes it easy to find and download the files you want to your local computer with some additional helpers to look at and understand the data.



📔 GOES-2-go Documentation



Capabilities

Download Data

Download GOES ABI or GLM NetCDF files to your local computer. Files can also be read with xarray.

from goes2go.data import goes_latest, goes_nearesttime
# Get latest data
G_ABI = goes_latest(satellite='G16', product='ABI')
# Get data for a specific time
G_GLM = goes_nearesttime('2021-01-01 12:00', satellite='G16', product='GLM')

RGB Recipes

The rgb xarray accessor creates an RGB product for a GOES ABI multichannel xarray.Dataset. See the demo for more examples of RGB products.

from goes2go.data import goes_latest
import matplotlib.pyplot as plt
G = goes_latest()
ax = plt.subplot(projection=G.rgb.crs)
ax.imshow(G.rgb.TrueColor(), **G.rgb.imshow_kwargs)
ax.coastlines()

Field of View

The FOV xarray accessor creates shapely.Polygon objects for the ABI and GLM field of view. See notebooks for GLM and ABI field of view.

from goes2go.data import goes_latest
G = goes_latest()
# Get polygons of the full disk or ABI domain field of view.
G.FOV.full_disk
G.FOV.domain
# Get Cartopy coordinate reference system
G.FOV.crs

GOES-West is centered over -137 W and GOES-East is centered over -75 W. When GOES was being tested, it was in a "central" position, outlined in the dashed black line. Below is the ABI field of view for the full disk: field of view image

The GLM field of view is slightly smaller and limited by a bounding box. Below is the approximated GLM field of view: field of view image

Useful Links

What if I don't like the GOES-2-go or Python?

As an alternative you can use rclone to download GOES files from AWS. I quite like rclone. Here is a short rclone tutorial.



I hope you find this makes GOES data easier to retrieve and display. Enjoy!

- Brian Blaylock

👨🏻‍💻 Contributing Guidelines
💬 GitHub Discussions
🚑 GitHub Issues
🌐 Personal Webpage

P.S. If you like GOES-2-go, check out my Herbie package to download weather model data and SynopticPy to download mesonet data from the Synoptic API.

Comments
  • Data not returning as xarray

    Data not returning as xarray

    Hello, I am not sure if I am missing something or not, but when I use the goes_timerange() function and request to return the data as an xarray, I get an error and the result does not return as an xarray. I am using jupyter notebook. Attached is a word document with screenshots of the code and the error. The code is just the sample code you provided in the documentation. Thank you! error.docx

    opened by efamutimi 7
  • Issue on specific day for reading data

    Issue on specific day for reading data

    Hello,

    I am downloading data for many days, which works fine most of the time, but there is a specific day that causes an issue. Here is my code (in a loop over multiple scene.target_time):

            print(scene.satellite_name[-4:])
            print(scene.target_time)
            data = goes_nearesttime(scene.target_time, satellite=scene.satellite_name[-4:], product='ABI-L2-ACMF', save_dir=data_dir+'GOES/', verbose=False)
    

    and it produces:

    
    WEST
    2021-07-19 21:00:00
    WEST
    2021-07-20 21:00:00
    WEST
    2021-07-21 21:00:00
    WEST
    2021-07-22 21:00:00
    Traceback (most recent call last):
    ...
      File "/uufs/chpc.utah.edu/common/home/u1020524/cloud-distributions-chpc/data_reader.py", line 1012, in _GOES_read
        data = goes_nearesttime(scene.target_time, satellite=scene.satellite_name[-4:], product='ABI-L2-ACMF', save_dir=data_dir+'GOES/', verbose=False)
      File "/uufs/chpc.utah.edu/common/home/u1020524/software/pkg/miniconda3/lib/python3.9/site-packages/goes2go/data.py", line 640, in goes_nearesttime
        df = _goes_file_df(satellite, product, start, end, refresh=s3_refresh)
      File "/uufs/chpc.utah.edu/common/home/u1020524/software/pkg/miniconda3/lib/python3.9/site-packages/goes2go/data.py", line 151, in _goes_file_df
        df["file"].str.rsplit("_", expand=True, n=3).loc[:, 1:]
      File "/uufs/chpc.utah.edu/common/home/u1020524/software/pkg/miniconda3/lib/python3.9/site-packages/pandas/core/indexing.py", line 925, in __getitem__
        return self._getitem_tuple(key)
    ...
    TypeError: cannot do slice indexing on Index with these indexers [1] of type int
    

    (I have omitted some of the traceback) As you can see, it works fine for most days but there seems to be a problem at the specific time of 2021-07-22 21:00:00. I am not sure what is wrong on that day.

    Thanks

    bug 
    opened by thomasdewitt 3
  • FOV of CONUS scan data

    FOV of CONUS scan data

    The field_of_view still gets the Full Disk FOV when the input is the CONUS data.

    import xarray as xr
    from glob import glob
    from goes2go.tools import field_of_view
    
    ds_abi = xr.open_dataset(glob('../data/GOES-16/ABI_L1/OR_ABI-L1b-RadC-M6C13_G16_s2020153000*')[0])
    FOV_abi, geo_abi = field_of_view(ds_abi)
    
    display(FOV_abi)
    

    image

    opened by zxdawn 3
  • Importing Goes2Go fails

    Importing Goes2Go fails

    Hello!

    I installed Goes2Go using pip and I'm trying to follow the example code for downloading and reading the data. When I try to import the module GOES (from goes2go import GOES) it returns a syntax error:

    /home/ec2-user/.local/lib/python3.7/site-packages/goes2go/init.py:15: UserWarning: goes2go xarray accessors could not be imported. warnings.warn("goes2go xarray accessors could not be imported.")

    Traceback (most recent call last):

    File "/home/ec2-user/.local/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3553, in run_code
      exec(code_obj, self.user_global_ns, self.user_ns)
    
    File "/tmp/ipykernel_19813/3951463100.py", line 1, in <module>
      from goes2go import GOES
    
    File "/home/ec2-user/.local/lib/python3.7/site-packages/goes2go/__init__.py", line 96, in <module>
      from goes2go.NEW import GOES
    
    File "<fstring>", line 1
      (self.satellite=)
                     ^
    

    SyntaxError: invalid syntax

    I tried importing other modules but returns the same error

    install 
    opened by isagonza 2
  • Pandas reindexing error when passing multiple bands to `goes_nearesttime`

    Pandas reindexing error when passing multiple bands to `goes_nearesttime`

    When selecting the ABI-L1b-Rad product, passing a single band to goes2go.data.goes_nearesttime yields a non-error result, but a list of multiple bands results in pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects. The issue is raised on line 612.

    Example to illustrate the issue:

    import datetime
    from goes2go.data import goes_nearesttime
    
    if __name__ == '__main__':
    
        t = datetime.datetime(2021, 1, 1, 17, 0, 0)
    
        # this succeeds
        bands = [1]
        res = goes_nearesttime(
            t,
            satellite=17,
            product='ABI-L1b-Rad',
            return_as='filelist',
            bands=bands,
            download=False,
            domain='C')
        print(res)
    
        # this fails 
        bands = [1, 2]
        res = goes_nearesttime(
            t,
            satellite=17,
            product='ABI-L1b-Rad',
            return_as='filelist',
            bands=bands,
            download=False,
            domain='C')
        print(res)
    

    Environment details:

    This failed on the latest release 2022.7.15 and the current HEAD commit 8a431a2. I am running this on an M1 Pro (Apple Silicon) machine, Python 3.9.13. I also experienced this while running in a Docker container with Ubuntu 20.04.4 & Python 3.8.10.

    opened by olimcc 2
  • Missing `product_table.txt` file on setup

    Missing `product_table.txt` file on setup

    From an email

    I have been trying to use your Goes2go python library, and I just happen to be missing something from the guidance of your GitHub examples. I believe my main issue is coming from an error saying I do not have a product_table.txt file. Do you have any insight on the product_table.txt file needed to run goes2go? I was also wondering if you would recommend using an older version of python rather than the most up to date one. I am using python 3.10.6. would this have any effect? What instillation method would you recommend? Just to use pip install?

    bug 
    opened by blaylockbk 2
  • Use the yml installation environment to report an error

    Use the yml installation environment to report an error

    I use the environment.yml installation when an error is reported, please ask what is the reason

    ERROR: yaml.scanner.ScannerError: mapping values are not allowed here in xxxxxxx line 28,col 66

    opened by muyiaaaa 2
  • setup.py not working properly

    setup.py not working properly

    Hey!

    First off, I just found this project and the archive it links to but this looks like an amazing resource!

    Now to the issue: there seems to be a bug in setup.py. Running the script doesn't actually include the package and this seems to be the case with the release on PyPI as well. If you open the released wheel you'll notice the actual package is missing. The problem seems to be the use of find_package, which to my knowledge still relies on the __init__.py files to identify packages. So you either have to add an __init__.py or specify the package manually within the setup.py.

    opened by simeks 2
  • Is it possible to add goes2go to the geemap package?

    Is it possible to add goes2go to the geemap package?

    Hi,

    Thank you very much, thanks to this repository it helped me to fix a deficiency of Google Earth Engine (GEE): the data is available with 1 or 2 days of delay. I would like the goes2go functionalities to be in the geemap package so that everyone can have recent (via AWS) and past (via GEE) data from GOES or another AWS dataset (Sentinel, Landsat, etc.).

    opened by ErikSeras 2
  • environment.yml link points to Herbie repo

    environment.yml link points to Herbie repo

    In the readme under the Installation section there is a link that points to an environment.yml file to set up the conda environment but it points to a file in the Herbie repo.

    Here's the link it points to: https://github.com/blaylockbk/Herbie/blob/main/environment.yml

    opened by jjm0022 1
  • Publish to conda-forge

    Publish to conda-forge

    Publish goes2go on conda-forge. This will help some of the installation problems people run into.

    • [x] create conda recipe
    • [x] publish on conda-forge
    • [ ] test install from conda-forge
    opened by blaylockbk 1
  • Download interface GUI?

    Download interface GUI?

    Can my legacy download pages at the University of Utah be recreated using only GitHub pages?

    • https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/cgi-bin/generic_AWS_download.cgi
    • https://home.chpc.utah.edu/~u0553130/Brian_Blaylock/cgi-bin/goes16_download.cgi

    Would need some help with the JavaScript and web design. https://aws.amazon.com/developer/tools/

    help wanted 
    opened by blaylockbk 0
  • Test for getting GOES-18 data

    Test for getting GOES-18 data

    Should just need to set satellite=18 to explicitly get GOES-18. But when user requests satellite="west" it should automatically detect which is the operational satellite (17 or 18).

    opened by blaylockbk 0
  • Accessing xarray when using goes_nearesttime loaded in memory

    Accessing xarray when using goes_nearesttime loaded in memory

    hour = '2022-01-01 00:00:00'
    g = goes_nearesttime(hour,
                       satellite='goes16',
                       product='ABI',
                       domain = 'C',
                       return_as='xarray',
                       download = False)
    
    timestamp = str(g.time_coverage_end.values)
    R = g['CMI_C02'].data
    

    results in this error: raise ValueError("I/O operation on closed file.") ValueError: I/O operation on closed file.

    R = g['CMI_C02'].data

    When download = True and return as filelist, I have no issues opening xarray.open_dataset, but these files are huge so i was hoping to load in memory, process, and then move onto the next one. Am i doing something wrong when trying to access the data once this is loaded into memory?

    opened by nrchade 4
  • Fix this Pandas Warning

    Fix this Pandas Warning

    FutureWarning: In a future version of pandas all arguments of StringMethods.rsplit except for the argument 'pat' will be keyword-only.
      product_mode = df.product_mode.str.rsplit("-", 1, expand=True)
    
    opened by blaylockbk 0
  • Documentation example fails with AttributeError

    Documentation example fails with AttributeError

    When installing goes2go per the documentation using the provided environment.yml to create a clean conda environment, the ABI example below does not work:

    from goes2go.data import goes_latest
    import matplotlib.pyplot as plt
    import cartopy.crs as ccrs
    
    # Download a GOES ABI dataset
    G = goes_latest(product='ABI')
    
    # Make figure on Cartopy axes
    ax = plt.subplot(projection=G.rgb.crs )
    ax.imshow(G.rgb.TrueColor(), **G.rgb.imshow_kwargs)
    ax.coastlines()
    

    This fails with

    Traceback (most recent call last):
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/backends/backend_qt.py", line 456, in _draw_idle
        self.draw()
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/backends/backend_agg.py", line 408, in draw
        self.figure.draw(self.renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/artist.py", line 74, in draw_wrapper
        result = draw(artist, renderer, *args, **kwargs)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/artist.py", line 51, in draw_wrapper
        return draw(artist, renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/figure.py", line 3074, in draw
        mimage._draw_list_compositing_images(
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/image.py", line 131, in _draw_list_compositing_images
        a.draw(renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/artist.py", line 51, in draw_wrapper
        return draw(artist, renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py", line 558, in draw
        return matplotlib.axes.Axes.draw(self, renderer=renderer, **kwargs)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/artist.py", line 51, in draw_wrapper
        return draw(artist, renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/axes/_base.py", line 3107, in draw
        mimage._draw_list_compositing_images(
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/image.py", line 131, in _draw_list_compositing_images
        a.draw(renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/matplotlib/artist.py", line 51, in draw_wrapper
        return draw(artist, renderer)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/cartopy/mpl/feature_artist.py", line 147, in draw
        extent = ax.get_extent(feature_crs)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py", line 814, in get_extent
        p = self._get_extent_geom(crs)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py", line 821, in _get_extent_geom
        with self.hold_limits():
      File "~/miniconda3/envs/goes2go/lib/python3.9/contextlib.py", line 119, in __enter__
        return next(self.gen)
      File "~/miniconda3/envs/goes2go/lib/python3.9/site-packages/cartopy/mpl/geoaxes.py", line 491, in hold_limits
        self._autoscaleXon, self._autoscaleYon)
    AttributeError: 'GeoAxesSubplot' object has no attribute '_autoscaleXon'
    
    opened by mjstarke 1
  • python runtime error using goes_timerange - windows

    python runtime error using goes_timerange - windows

    Hi All - Love using 'goes_latest' - works great, Unable to use 'goes_timerange' and get python runtime error on windows. Suggestions to address spawn and fork issues in python setup or in goes2go? The toml config file has cpu set as 2 which did not affect 'goes-latest' use.

            if __name__ == '__main__':
                freeze_support()
                ...
    

    Thanks, Jeff

    bug need more info 
    opened by zmcfire 1
Releases(2022.10.0)
  • 2022.10.0(Oct 20, 2022)

    Modernized Installation

    After several people telling me they couldn't install goes2go, I updated the installation with setup.cfg and pyproject.toml files.

    What's Changed

    • Updated package installation with setup.cfg: Blaylockbk/issue33-update-to-setup.cfg by @blaylockbk in https://github.com/blaylockbk/goes2go/pull/35

    Full Changelog: https://github.com/blaylockbk/goes2go/compare/2022.08.26...2022.10.0

    Source code(tar.gz)
    Source code(zip)
  • 2022.08.26(Aug 27, 2022)

    What's Changed

    • Nearesttime multiple bands handling. by @olimcc in https://github.com/blaylockbk/goes2go/pull/29

    New Contributors

    • @olimcc made their first contribution in https://github.com/blaylockbk/goes2go/pull/29

    Full Changelog: https://github.com/blaylockbk/goes2go/compare/2022.7.15...2022.08.26

    Source code(tar.gz)
    Source code(zip)
  • 2022.7.15(Jul 16, 2022)

    What's Changed

    • Fix FutureWarning by @blaylockbk in https://github.com/blaylockbk/goes2go/pull/17
    • #20 Added "bands" argument when requesting ABI-L1b_Rad data.
    • Changed _download function to use Multithreading (this is much cleaner) https://github.com/blaylockbk/goes2go/commit/ae1cb1d193b16841320befba0b5ac6c98367251f
    • Changed default branch name from master to main.
    • Changed to CalVer versioning scheme. Using YYYY.MM.DD to show the date of the release.
    • Added a new GOES object with several useful methods. This should make it easier to find and access GOES data.
    • Added dark theme to Docs 😎

    Full Changelog: https://github.com/blaylockbk/goes2go/compare/0.0.4...2022.7.15

    There's bound to be some issues here since I published this in haste. Feel free to submit an issue/pull request if you see problems.

    Source code(tar.gz)
    Source code(zip)
  • 0.0.4(Aug 30, 2021)

    Changelog

    • Set refresh=True as default to fs file enumeration #5. This enables finding the latest file on s3 and not one from a cached list.
    • Change config file to TOML format ~/.config/goes2go/config.toml.
    • Expand settings controlled in by config file.
    • Adopt Black formatting
    • https://github.com/blaylockbk/goes2go/issues/4 I updated the field_of_fiew function to produce both a polygon for the full field of view of the ABI instrument and a domain of the ABI scan for the specific domain.
    • Fixed specifying M1 and M2 when selecting a specific mesoscale domain.
    • Moved field_of_view function from tools.py to an xarray accessor.py. If G is an xarray Dataset of the GOES file, do G.FOV.crs for the cartopy coordinate reference system of the satellite. G.FOV.full_disk will give you a polygon of the full disk, and G.FOV.domain will give you the domain polygon for ABI files.
    • Moved RGB recipies to an xarray accessors.py. If G is an xarrray Dataset of the GOES file, do G.rgb.TrueColor() for TrueColor RGB.
    • Some enhancement to the documentation.
    Source code(tar.gz)
    Source code(zip)
  • 0.0.2(Feb 26, 2021)

    Be aware, this is v0.0.2, meaning it is subject to change at my leisure. The purpose of this repository is to serve as an example of how you can download GOES data from Amazon Web Services and make RGB composites. Still, I try to keep this package in a workable state that might be useful for you.

    📔 Documentation

    Source code(tar.gz)
    Source code(zip)
Owner
Brian Blaylock
Atmospheric scientist. Post-doc at Naval Research Laboratory
Brian Blaylock
A NetBox Plugin that gives a UI for generating, comparing and deploying configurations to devices.

netbox_config_plugin - A plugin to generate, compare and deploy configurations This plugin allows you to execute your code to generate a config for a

Jo 11 Dec 21, 2022
A very basic ciphering/deciphering tool

ckrett-python-library This is an useful python library for people who care about privacy, this library is useful to cipher and decipher text using 4 s

SasiVatsal 8 Oct 18, 2022
A hackers attempt at an MVP anki plugin

my anki plugin if you have found this by accident, you should probably run away this is nothing more than a hackers attempt at an MVP anki plugin I re

Chris Hall 1 Nov 02, 2021
Python Project Template

A low dependency and really simple to start project template for Python Projects.

Bruno Rocha 651 Dec 29, 2022
Demo of patching a python context manager

patch-demo-20211203 demo of patching a python context manager poetry install poetry run python -m my_great_app to run the code poetry run pytest to te

Brad Smith 1 Feb 09, 2022
Insights in greek football league 2020-2021 and bookmaker's accuracy

Greek_Football_League_Analysis_2020_2021 Aim of Project: This project aims in deriving useful insights from greek football league 2020-2021 by mean st

2 Jan 16, 2022
Python flexible slugify function

Python flexible slugify function

Dmitry Voronin 471 Dec 20, 2022
ERPNext Easy Letterhead

ERPNext Easy Letterhead Intro Quality letterheads are a problem for non-technical users. So we've built (really hacked together) a slightly easier sol

Bantoo 3 Jan 02, 2023
This program goes thru reddit, finds the most mentioned tickers and uses Vader SentimentIntensityAnalyzer to calculate the ticker compound value.

This program goes thru reddit, finds the most mentioned tickers and uses Vader SentimentIntensityAnalyzer to calculate the ticker compound value.

195 Dec 13, 2022
Coronavirus Tracker API

Coronavirus Tracker API Provides up-to-date data about Coronavirus outbreak. Includes numbers about confirmed cases, deaths and recovered. Support mul

Francisco Laguna 1 Oct 31, 2020
In this project, we are going to display the battery notification and the time left for the battery to drain out using the battery capacity value.

In this project, we are going to display the battery notification and the time left for the battery to drain out using the battery capacity value.

Ritoban Biswas 1 Dec 20, 2021
Make your functions return something meaningful, typed, and safe!

Make your functions return something meaningful, typed, and safe! Features Brings functional programming to Python land Provides a bunch of primitives

dry-python 2.5k Jan 03, 2023
A pet facts python api

Pet-Facts-API A pet facts python api Project Links API :- https://pet-facts-api.vercel.app Docs :- https://fayasnoushad.github.io/Pet-Facts-API

Fayas Noushad 3 Dec 18, 2021
Zues Auto Claimer Leaked By bazooka#0001

Zues Auto Claimer Leaked By bazooka#0001 put proxies in prox.txt put ssid in sid.txt put all users you want to target in user.txt for the login just t

1 Jan 15, 2022
Digitales Raumbuch

Helios Digitales Raumbuch Settings Moved to settings. Basic Commands Setting Up Your Users To create a normal user account, just go to Sign Up and fil

1 Nov 19, 2021
Open source style Deep Dream project

DeepDream ⚠️ If you don't have a gpu with cuda, the style transfer execution time will be much longer Prerequisites Python =3.8.10 How to Install sud

Patrick martins de lima 7 May 17, 2022
Write Streamlit apps using Notion! (Prototype)

Streamlit + Notion test app Write Streamlit apps using Notion! ☠️ IMPORTANT: This is just a little prototype I made to play with some ideas. Not meant

Thiago Teixeira 22 Sep 08, 2022
Tools to convert SQLAlchemy models to Pydantic models

Pydantic-SQLAlchemy Tools to generate Pydantic models from SQLAlchemy models. Still experimental. How to use Quick example: from typing import List f

Sebastián Ramírez 893 Dec 29, 2022
An easy python calculator for those who want's to know how if statements, loops, and imports works give it a try!

A usefull calculator for any student or anyone who want's to know how to build a simple 2 mode python based calculator.

Antonio Sánchez 1 Jan 06, 2022
Processamento da Informação - Disciplina UFABC

Processamento da Informacao Disciplina UFABC, Linguagem de Programação Python - 2021.2 Objetivos Apresentar os fundamentos sobre manipulação e tratame

Melissa Junqueira de Barros Lins 1 Jun 12, 2022