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
Submission to the HEAR2021 Challenge

Submission to the HEAR 2021 Challenge For model evaluation, python=3.8 and cuda10.2 with cudnn7.6.5 have been tested. The work uses a mixed supervised

Heinrich Dinkel 10 Dec 08, 2022
This repository contains the code for the python introduction lab

This repository contains the code for the python introduction lab. The purpose is to have a fairly simple python assignment that introduces the basic features and tools of python

1 Jan 24, 2022
Web interface for browsing, search and filtering recent arxiv submissions

Web interface for browsing, search and filtering recent arxiv submissions

Andrej 4.8k Jan 08, 2023
How to build an Fahrenheit to Celsius Converter in Python

Generally to measure the temperature we make use of one of these two popular units i.e. Fahrenheit & Celsius.

PyLaboratory 0 Feb 07, 2022
Shai-Hulud - A qtile configuration for the (spice) masses

Shai-Hulud - A qtile configuration for the (spice) masses Installation Notes These dotfiles are set up to use GNU stow for installation. To install, f

16 Dec 30, 2022
Project in which we modelise an Among Us problem using graph theories.

Python-AmongUsProblem Project in which we modelise an Among Us problem using graph theories. The rules are as following: Total of 100 players 10 playe

Gabriel Shenouda 1 Feb 09, 2022
Script to produce `.tex` files of example GAP sessions

Introduction The main file GapToTex.py in this directory is used to produce .tex files of example GAP sessions. Instructions Run python GapToTex.py [G

Friedrich Rober 2 Oct 06, 2022
Datamol is a python library to work with molecules.

Datamol is a python library to work with molecules. It's a layer built on top of RDKit and aims to be as light as possible.

datamol 276 Dec 19, 2022
A simple script that can watch a list of directories for change and does some action

plot_watcher A simple script that can watch a list of directories and does some action when a specific kind of change happens In its current implement

Charaf Errachidi 12 Sep 10, 2021
The RAP community of practice includes all analysts and data scientists who are interested in adopting the working practices included in reproducible analytical pipelines (RAP) at NHS Digital.

The RAP community of practice includes all analysts and data scientists who are interested in adopting the working practices included in reproducible analytical pipelines (RAP) at NHS Digital.

NHS Digital 50 Dec 22, 2022
Jannik Ramrath 1 Feb 05, 2022
Wordle Solver

Wordle Solver Installation Install the following onto your computer: Python 3.10.x Download Page Run pip install -r requirements.txt Instructions To r

John Bucknam 1 Feb 15, 2022
A redesign of our previous Python World Cup, aiming to simulate the 2022 World Cup all the way from the qualifiers

A redesign of our previous Python World Cup, aiming to simulate the 2022 World Cup all the way from the qualifiers. This new version is designed to be more compact and more efficient and will reflect

Sam Counsell 1 Jan 07, 2022
Generate a wordlist to fuzz amounts or any other numerical values.

Generate a wordlist to fuzz amounts or any other numerical values. Based on Common Security Issues in Financially-Oriented Web Applications.

Ivan Ε incek 3 Oct 14, 2022
Drop-down terminal for GNOME

Guake 3 README Introduction Guake is a python based dropdown terminal made for the GNOME desktop environment. Guake's style of window is based on an F

Guake 4.1k Dec 25, 2022
Calculator in command line using python programming language

Calculator in command line using python programming language University of the People Python fundamental Chapter 5 Conditionals and recursion The main

mark sikaundi 3 Dec 09, 2021
Pengenalan para anggota KOMPETEGRAM

Pengenalan Anggota KOMPETEGRAM Apa isi repositori ini ? πŸ’¬ Repositori ini berisi pengenalan nama anggota KOMPETEGRAM dari seluruh angkatan atau Batch.

Repositori KOMPETEGRAM 7 Sep 17, 2022
A website to collect vintage 4 tracks cassette recorders.

Vintage 4tk cassette recorders A website to collect vintage 4 tracks cassette recorders. Local development setup Copy and customize Django settings (e

1 May 01, 2022
Solcast Integration for Home Assistant

Solcast Solar Home Assistant(https://www.home-assistant.io/) Component This custom component integrates the Solcast API into Home Assistant. Modified

Greg 45 Dec 20, 2022
Our Ping Pong Project of numerical analysis, 2nd year IC B2 INSA Toulouse

Ping Pong Project The objective of this project was to determine the moment of impact of the ball with the ground. To do this, we used different model

0 Jan 02, 2022