geedim
geedim copied to clipboard
Search, composite, and download Google Earth Engine imagery.
|Tests| |codecov| |PyPI version| |conda-forge version| |docs| |License|
geedim
.. short_descr_start
Search, composite, and download Google Earth Engine <https://earthengine.google.com/>
__ imagery, without size limits.
.. short_descr_end
.. description_start
Description
geedim
provides a command line interface and API for searching, compositing and downloading satellite imagery
from Google Earth Engine (EE). It optionally performs cloud/shadow masking, and cloud/shadow-free compositing on
supported collections. Images and composites can be downloaded; or exported to Google Drive, Earth Engine asset or
Google Cloud Storage. Images larger than the
EE size limit <https://developers.google.com/earth-engine/apidocs/ee-image-getdownloadurl>
_ are split and downloaded
as separate tiles, then re-assembled into a single GeoTIFF.
.. description_end
See the documentation site for more detail: https://geedim.readthedocs.io/.
.. supp_im_start
Cloud/shadow support
Any EE imagery can be searched, composited and downloaded by ``geedim``. Cloud/shadow masking, and cloud/shadow-free
compositing are supported on the following collections:
.. supp_im_end
+------------------------------------------+-------------------------------------------------------+
| EE name | Description |
+==========================================+=======================================================+
| `LANDSAT/LT04/C02/T1_L2 | Landsat 4, collection 2, tier 1, level 2 surface |
| <https://developers.google.com/earth-eng | reflectance. |
| ine/datasets/catalog/LANDSAT_LT04_C02_T1 | |
| _L2>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `LANDSAT/LT05/C02/T1_L2 | Landsat 5, collection 2, tier 1, level 2 surface |
| <https://developers.google.com/earth-eng | reflectance. |
| ine/datasets/catalog/LANDSAT_LT05_C02_T1 | |
| _L2>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `LANDSAT/LE07/C02/T1_L2 | Landsat 7, collection 2, tier 1, level 2 surface |
| <https://developers.google.com/earth-eng | reflectance. |
| ine/datasets/catalog/LANDSAT_LE07_C02_T1 | |
| _L2>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `LANDSAT/LC08/C02/T1_L2 | Landsat 8, collection 2, tier 1, level 2 surface |
| <https://developers.google.com/earth-eng | reflectance. |
| ine/datasets/catalog/LANDSAT_LC08_C02_T1 | |
| _L2>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `LANDSAT/LC09/C02/T1_L2 | Landsat 9, collection 2, tier 1, level 2 surface |
| <https://developers.google.com/earth-eng | reflectance. |
| ine/datasets/catalog/LANDSAT_LC09_C02_T1 | |
| _L2>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `COPERNICUS/S2 | Sentinel-2, level 1C, top of atmosphere reflectance. |
| <https://developers.google.com/earth- | |
| engine/datasets/catalog/COPERNICUS_S2>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `COPERNICUS/S2_SR | Sentinel-2, level 2A, surface reflectance. |
| <https://developers.google.com/earth-eng | |
| ine/datasets/catalog/COPERNICUS_S2_SR>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `COPERNICUS/S2_HARMONIZED | Harmonised Sentinel-2, level 1C, top of atmosphere |
| <https://developers.google.com/earth-eng | reflectance. |
| ine/datasets/catalog/COPERNICUS_S2_HARMO | |
| NIZED>`_ | |
+------------------------------------------+-------------------------------------------------------+
| `COPERNICUS/S2_SR_HARMONIZED | Harmonised Sentinel-2, level 2A, surface reflectance. |
| <https://developers.google.com/earth-eng | |
| ine/datasets/catalog/COPERNICUS_S2_SR_HA | |
| RMONIZED>`_ | |
+------------------------------------------+-------------------------------------------------------+
.. install_start
Installation
------------
Requirements
~~~~~~~~~~~~
``geedim`` is a python 3 package, and requires users to be registered with `Google Earth
Engine <https://signup.earthengine.google.com>`__.
conda
~~~~~
Under Windows, using ``conda`` is the easiest way to resolve binary dependencies. The
`Miniconda <https://docs.conda.io/en/latest/miniconda.html>`__ installation provides a minimal ``conda``.
.. code:: shell
conda install -c conda-forge geedim
pip
~~~
.. code:: shell
pip install geedim
Authentication
~~~~~~~~~~~~~~
Following installation, Earth Engine should be authenticated:
.. code:: shell
earthengine authenticate
.. install_end
Getting started
---------------
Command line interface
.. cli_start
geedim
command line functionality is accessed through the commands:
-
search
: Search for images. -
composite
: Create a composite image. -
download
: Download image(s). -
export
: Export image(s). -
config
: Configure cloud/shadow masking.
Get help on geedim
with:
.. code:: shell
geedim --help
and help on a geedim
command with:
.. code:: shell
geedim
Examples ^^^^^^^^
Search for Landsat-8 images, reporting cloudless portions.
.. code:: shell
geedim search -c l8-c2-l2 -s 2021-06-01 -e 2021-07-01 --bbox 24 -33 24.1 -33.1 --cloudless-portion
Download a Landsat-8 image with cloud/shadow mask applied.
.. code:: shell
geedim download -i LANDSAT/LC08/C02/T1_L2/LC08_172083_20210610 --bbox 24 -33 24.1 -33.1 --mask
Command pipelines
Multiple ``geedim`` commands can be chained together in a pipeline where image results from the previous command form
inputs to the current command. For example, if the ``composite`` command is chained with ``download`` command, the
created composite image will be downloaded, or if the ``search`` command is chained with the ``composite`` command, the
search result images will be composited.
Common command options are also piped between chained commands. For example, if the ``config`` command is chained with
other commands, the configuration specified with ``config`` will be applied to subsequent commands in the pipeline. Many
command combinations are possible.
.. _examples-1:
Examples
^^^^^^^^
Composite two Landsat-7 images and download the result:
.. code:: shell
geedim composite -i LANDSAT/LE07/C02/T1_L2/LE07_173083_20100203 -i LANDSAT/LE07/C02/T1_L2/LE07_173083_20100219 download --bbox 22 -33.1 22.1 -33 --crs EPSG:3857 --scale 30
Composite the results of a Landsat-8 search and download the result.
.. code:: shell
geedim search -c l8-c2-l2 -s 2019-02-01 -e 2019-03-01 --bbox 23 -33 23.2 -33.2 composite -cm q-mosaic download --scale 30 --crs EPSG:3857
Composite the results of a Landsat-8 search, export to Earth Engine asset, and download the asset image.
.. code:: shell
geedim search -c l8-c2-l2 -s 2019-02-01 -e 2019-03-01 --bbox 23 -33 23.2 -33.2 composite -cm q-mosaic export --type asset --folder <your cloud project> --scale 30 --crs EPSG:3857 download
Search for Sentinel-2 SR images with a cloudless portion of at least 60%, using the ``qa`` mask-method to identify
clouds:
.. code:: shell
geedim config --mask-method qa search -c s2-sr --cloudless-portion 60 -s 2022-01-01 -e 2022-01-14 --bbox 24 -34 24.5 -33.5
.. cli_end
API
~~~
Example
^^^^^^^
.. code:: python
import geedim as gd
gd.Initialize() # initialise earth engine
# geojson polygon to search / download
region = {
"type": "Polygon",
"coordinates": [[[24, -33.6], [24, -33.53], [23.93, -33.53], [23.93, -33.6], [24, -33.6]]]
}
# make collection and search, reporting cloudless portions
coll = gd.MaskedCollection.from_name('COPERNICUS/S2_SR')
coll = coll.search('2019-01-10', '2019-01-21', region, cloudless_portion=0)
print(coll.schema_table)
print(coll.properties_table)
# create and download an image
im = gd.MaskedImage.from_id('COPERNICUS/S2_SR/20190115T080251_20190115T082230_T35HKC')
im.download('s2_image.tif', region=region)
# composite search results and download
comp_im = coll.composite()
comp_im.download('s2_comp_image.tif', region=region, crs='EPSG:32735', scale=30)
License
-------
This project is licensed under the terms of the `Apache-2.0 License <LICENSE>`__.
Contributing
------------
See the `documentation <https://geedim.readthedocs.io/en/latest/contributing.html>`__ for details.
Credits
-------
- Tiled downloading was inspired by the work in `GEES2Downloader <https://github.com/cordmaur/GEES2Downloader>`__ under
terms of the `MIT license <https://github.com/cordmaur/GEES2Downloader/blob/main/LICENSE>`__.
- Medoid compositing was adapted from `gee_tools <https://github.com/gee-community/gee_tools>`__ under the terms of the
`MIT license <https://github.com/gee-community/gee_tools/blob/master/LICENSE>`__.
- Sentinel-2 cloud/shadow masking was adapted from `ee_extra <https://github.com/r-earthengine/ee_extra>`__ under
terms of the `Apache-2.0 license <https://github.com/r-earthengine/ee_extra/blob/master/LICENSE>`__
.. |Tests| image:: https://github.com/leftfield-geospatial/geedim/actions/workflows/run-unit-tests.yml/badge.svg
:target: https://github.com/leftfield-geospatial/geedim/actions/workflows/run-unit-tests.yml
.. |codecov| image:: https://codecov.io/gh/leftfield-geospatial/geedim/branch/main/graph/badge.svg?token=69GZNQ3TI3
:target: https://codecov.io/gh/leftfield-geospatial/geedim
.. |PyPI version| image:: https://img.shields.io/pypi/v/geedim.svg
:target: https://pypi.org/project/geedim/
.. |conda-forge version| image:: https://img.shields.io/conda/vn/conda-forge/geedim.svg
:alt: conda-forge
:target: https://anaconda.org/conda-forge/geedim
.. |docs| image:: https://readthedocs.org/projects/geedim/badge/?version=latest
:target: https://geedim.readthedocs.io/en/latest/?badge=latest
.. |License| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
:target: https://opensource.org/licenses/Apache-2.0