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
Secret santa is a fun and easy way to get together with your friends and/or family with a gift for them.

Vaccine Validator Tool to validate domestic New Zealand vaccine passes Create a new virtual environment: python3 -m venv ./venv Activate virtual envi

2 Dec 06, 2021
A function decorator for enforcing function signatures

A function decorator for enforcing function signatures

Emmanuel I. Obi 0 Dec 08, 2021
C++ Environment InitiatorVisual Studio Code C / C++ Environment Initiator

Visual Studio Code C / C++ Environment Initiator Latest Version : v 1.0.1(2021/11/08) .exe link here About : Visual Studio Code에서 C/C++환경을 MinGW GCC/G

Junho Yoon 2 Dec 19, 2021
because rico hates uuid's

terrible-uuid-lambda because rico hates uuid's sub 200ms response times! Try it out here: https://api.mathisvaneetvelde.com/uuid https://api.mathisvan

Mathis Van Eetvelde 2 Feb 15, 2022
Simplest way to find Appointments in Bürgeramt Berlin, Not over engineered.

Simplest way to find Appointments in Bürgeramt Berlin, Not over engineered. Der einfachste Weg, Termine im Bürgeramt Berlin zu finden, ohne viel Schnickschnack.

Jannis 8 Nov 25, 2022
Probably the best way to simulate block scopes in Python

This is a package, as it says on the tin, to emulate block scoping in Python, the lack of which being a clever design choice yet sometimes a trouble.

88 Oct 26, 2022
Automatically deletes Capital One Eno virtual cards for when you've made a couple too many.

eno-delete Automatically deletes Capital One Eno virtual cards for when you've made a couple too many. Warning: Program will delete ALL virtual cards

h3x 3 Sep 29, 2022
Hotpile: High Order Turing Machine Language Compiler

Hotpile: High Order Turing Machine Language Compiler Build and Run Requirements: Python 3.6+, bison, flex, and GCC installed. Needs to be run under UN

Jiang Weihao 4 Dec 29, 2021
Enjoy Discords Unlimited Storage

Discord Storage V.3.5 (Beta) Made by BoKa Enjoy Discords free and unlimited storage... Prepare: Clone this from Github, make sure there either a folde

0 Dec 16, 2021
A 3-line lisp implementation

Nanolisp The download page of many a language harbors deep senses of forboding, of evil lurking in its native lair. You feel that the language is not

5 Jun 17, 2022
A PowSyBl and Python integration based on GraalVM native image

PyPowSyBl The PyPowSyBl project gives access PowSyBl Java framework to Python developers. This Python integration relies on GraalVM to compile Java co

powsybl 23 Dec 14, 2022
A good Tool to comment on xmw

A good Tool to comment on xmw

1 Feb 10, 2022
WinBoost: Boost your windows system.

Winboost runs a complete checkup of your entire system locating junk files, speed-reducing issues and causes of any system or application glitches or crashes. Through a lot of research and testing, w

Smit Parmar 4 Oct 01, 2021
A modern Python build backend

trampolim A modern Python build backend. Features Task system, allowing to run arbitrary Python code during the build process (Planned) Easy to use CL

Filipe Laíns 39 Nov 08, 2022
Todos os exercícios do Curso de Python, do canal Curso em Vídeo, resolvidos em Python, Javascript, Java, C++, C# e mais...

Exercícios - CeV Oferecido por Linguagens utilizadas atualmente O que vai encontrar aqui? 👀 Esse repositório é dedicado a armazenar todos os enunciad

Coding in Community 43 Nov 10, 2022
Advanced IPv4 Subnet Calculator in Python3

Advanced IPv4 Subnet Calculator in Python3 Table of Contents Getting Started Installation How it works? SVI Configuration Template Previews Getting St

Osama Abbas 1 May 10, 2022
A program that lets you use your tablet's tilting to emulate an actual joystick on a Linux computer.

Tablet Tilt Joystick A program that lets you use your tablet's tilting to emulate an actual joystick on a Linux computer. It's called tablet tilt joys

1 Feb 07, 2022
CoreSE - basic of social Engineering tool

Core Social Engineering basic of social Engineering tool. just for fun :) About First of all, I must say that I wrote such a project because of my int

Hamed Mohammadvand 7 Jun 10, 2022
qecsim is a Python 3 package for simulating quantum error correction using stabilizer codes.

qecsim qecsim is a Python 3 package for simulating quantum error correction using stabilizer codes.

44 Dec 20, 2022
Neogex is a human readable parser standard, being implemented in Python

Neogex (New Expressions) Parsing Standard Much like Regex, Neogex allows for string parsing and validation based on a set of requirements. Unlike Rege

Seamus Donnellan 1 Dec 17, 2021