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
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
A toolkit for developing and deploying serverless Python code in AWS Lambda.

Python-lambda is a toolset for developing and deploying serverless Python code in AWS Lambda. A call for contributors With python-lambda and pytube bo

Nick Ficano 1.4k Jan 03, 2023
Vector tile server for the Wildfire Predictive Services Unit

wps-tileserver Vector tile server for the Wildfire Predictive Services Unit Overview The intention of this project is to: provide tools to easily spin

Province of British Columbia 6 Dec 20, 2022
PyPIContents is an application that generates a Module Index from the Python Package Index (PyPI) and also from various versions of the Python Standard Library.

PyPIContents is an application that generates a Module Index from the Python Package Index (PyPI) and also from various versions of the Python Standar

Collage Labs 10 Nov 19, 2022
Script to use SysWhispers2 direct system calls from Cobalt Strike BOFs

SysWhispers2BOF Script to use SysWhispers2 direct system calls from Cobalt Strike BOFs. Introduction This script was initially created to fix specific

FalconForce 101 Dec 20, 2022
Run Windows Applications on Linux as if they are native, Use linux applications to launch files files located in windows vm without needing to install applications on vm. With easy to use configuration GUI

Run Windows Applications on Linux as if they are native, Use linux applications to launch files files located in windows vm without needing to install applications on vm. With easy to use configurati

Casu Al Snek 2k Jan 02, 2023
Source code for Learn Programming: Python

This repository contains the source code of the game engine behind Learn Programming: Python. The two key files are game.py (the main source of the ga

Niema Moshiri 25 Apr 24, 2022
A lighweight screen color picker tool

tkpick A lighweigt screen color picker tool Availability Only GNU/Linux 🐧 Installing Install via pip (No auto-update): [sudo] pip install tkpick Usa

Adil GΓΌrbΓΌz 7 Aug 30, 2021
Paintbot - Forward & Inverse Kinematics

PAINTBOT - FORWARD & INVERSE KINEMATICS: Overview: We built a simulation of a RRR robot shown in the figure below. The robot has 3 links and is connec

Alex Lin 1 Oct 21, 2021
A python program to detect rickrolls with just the youtube link.

rickroll_detector A python program to detect rickrolls with just the youtube link. Usage: clone this repo or download zip run the main.py file with py

Tricky 4 Nov 06, 2022
Web UI for your scripts with execution management

Script-server is a Web UI for scripts. As an administrator, you add your existing scripts into Script server and other users would be ab

Iaroslav Shepilov 1.1k Jan 09, 2023
In this repo i inherit the pos module and added QR code to pos receipt

odoo-pos-inherit In this repo i inherit the pos module and added QR code to pos receipt 1- Create new Odoo Module using command line $ python odoo-bin

5 Apr 09, 2022
Write a program that works out whether if a given year is a leap year

Leap Year πŸ’ͺ This is a Difficult Challenge πŸ’ͺ Instructions Write a program that works out whether if a given year is a leap year. A normal year has 36

Rodrigo Santos 0 Jun 22, 2022
This repository is an archive of emails that are sent by the awesome Quincy Larson every week.

Awesome Quincy Larson Email Archive This repository is an archive of emails that are sent by the awesome Quincy Larson every week. If you fi

Sourabh Joshi 912 Jan 05, 2023
Openfe - Alchemical free energy calculations for the masses

The Open Free Energy library Alchemical free energy calculations for the masses.

33 Dec 22, 2022
SECRET SANTA / KRIS KINGLE

SECRET SANTA / KRIS KINGLE Note: Before executing the script, make sure to turn

DEV_FINWIZ 10 Dec 06, 2022
YourCity is a platform to match people to their prefect city.

YourCity YourCity is a city matching App that matches users to their ideal city. It is a fullstack React App made with a Redux state manager and a bac

Nico G Pierson 6 Sep 25, 2021
Transpiles some Python into human-readable Golang.

pytago Transpiles some Python into human-readable Golang. Try out the web demo Installation and usage There are two "officially" supported ways to use

Michael Phelps 318 Jan 03, 2023
Write-ups for CTF Internacional MetaRed 2021 5th stage

MetaRed2021-5th-Writeups Write-ups for CTF Internacional MetaRed 2021 5th stage Easy (15) No Status Category Name Creator(s) 01 Done osint Cybersecuri

UA Cybersecurity 2 Dec 22, 2021
SpellingBeeSolver - This program generates solutions to NYT style spelling bee problems.

SpellingBeeSolver This program generates solutions to NYT style spelling bee problems. The initial version of this program is being written in Python

1 Jan 01, 2022