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
Learning objective: Use React.js, Axios, and CSS to build a responsive YouTube clone app

Learning objective: Use React.js, Axios, and CSS to build a responsive YouTube clone app to search for YouTube videos, channels, playlists, and live events via wrapper around Google YouTube API.

Dillon 0 May 03, 2022
A simple BrainF**k compiler written in Python

bf-comp A simple BrainF**k compiler written in Python. What else were you looking for?

1 Jan 09, 2022
GitHub Actions Version Updater Updates All GitHub Action Versions in a Repository and Creates a Pull Request with the Changes.

GitHub Actions Version Updater GitHub Actions Version Updater is GitHub Action that is used to update other GitHub Actions in a Repository and create

Maksudul Haque 42 Dec 22, 2022
Distribute PySPI jobs across a PBS cluster

Distribute PySPI jobs across a PBS cluster This repository contains scripts for distributing PySPI jobs across a PBS-type cluster. Each job will conta

Oliver Cliff 1 Feb 10, 2022
Py-Parser est un parser de code python en python encore en plien dévlopement.

PY - PARSER Py-Parser est un parser de code python en python encore en plien dévlopement. Une fois achevé, il servira a de nombreux projets comme glad

pf4 3 Feb 21, 2022
Python library for ODE integration via Taylor's method and LLVM

heyoka.py Modern Taylor's method via just-in-time compilation Explore the docs » Report bug · Request feature · Discuss The heyókȟa [...] is a kind of

Francesco Biscani 45 Dec 21, 2022
Taxonomy addition for complete trees

TACT: Taxonomic Addition for Complete Trees TACT is a Python app for stochastic polytomy resolution. It uses birth-death-sampling estimators across an

Jonathan Chang 3 Jun 07, 2022
A fishing bot script written in Python!

A fishing bot script written in Python!

Anel Drocic 3 Nov 03, 2021
An application for automation of the mining function in the game Alienworlds.IO

alienautomation A Python script made to automate the tidious job of mining on AlienWorlds This script: Automatically opens the browser Automatically l

anonieXdev 42 Dec 03, 2022
An extension for Arma 3 that lets you write extensions in Python 3

An Arma 3 extension that lets you to write python extensions for Arma 3. And it's really simple and straightforward to use!

Lukasz Taczuk 48 Dec 18, 2022
Lagrange Interpolation Method-Python

Lagrange Interpolation Method-Python The Lagrange interpolation formula is a way to find a polynomial, called Lagrange polynomial, that takes on certa

Motahare Soltani 2 Jul 05, 2022
This python application let you check for new announcements from MMLS, take attendance while your lecturer is sharing QR Code on the screen.

This python application let you check for new announcements from MMLS, take attendance while your lecturer is sharing QR Code on the screen.

wyhong3103 5 Jul 17, 2022
A proof-of-concept package manager for Cairo contracts/libraries

glyph A proof-of-concept package manager for Cairo contracts/libraries. Distribution through pypi. Installation through existing package managers -- p

Sam Barnes 11 Jun 06, 2022
HomeAssistant Linux Companion

Application to run on linux desktop computer to provide sensors data to homeasssistant, and get notifications as if it was a mobile device.

Javier Lopez 10 Dec 27, 2022
Expose multicam options in the Blender VSE headers.

Multicam Expose multicam options in the Blender VSE headers. Install Download space_sequencer.py and swap it with the one that comes with the Blender

4 Feb 27, 2022
Trashselected - Plugin for fman.io to move files that has been selected in fman to trash

TrashSelected Plugin for fman.io to move files that has been selected in fman to

1 Feb 04, 2022
Watcher for systemdrun user scopes

Systemctl Memory Watcher Animated watcher for systemdrun user scopes. Usage Launch some process in your GNU-Linux or compatible OS with systemd-run co

Antonio Vanegas 2 Jan 20, 2022
This synchronizes my appearances with my calendar

Josh's Schedule Synchronizer Here's the "problem:" I use a Google Sheets spreadsheet to maintain all my public appearances.

Developer Advocacy 2 Oct 18, 2021
ARA Records Ansible and makes it easier to understand and troubleshoot.

ARA Records Ansible ARA Records Ansible and makes it easier to understand and troubleshoot. It's another recursive acronym. What it does Simple to ins

Community managed Ansible repositories 1.6k Dec 25, 2022
Wrapper around anjlab's Android In-app Billing Version 3 to be used in Kivy apps

IABwrapper Wrapper around anjlab's Android In-app Billing Version 3 to be used in Kivy apps Install pip install iabwrapper Important ( Add these into

Shashi Ranjan 8 May 23, 2022