Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork14
On-Demand Earth System Data Cubes (ESDCs) in Python
License
ESDS-Leipzig/cubo
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
On-Demand Earth System Data Cubes (ESDCs) in Python
GitHub:https://github.com/davemlz/cubo
Documentation:https://cubo.readthedocs.io/
PyPI:https://pypi.org/project/cubo/
Conda-forge:https://anaconda.org/conda-forge/cubo
Tutorials:https://cubo.readthedocs.io/en/latest/tutorials.html
Paper:https://arxiv.org/abs/2404.13105
Important
⭐Pinned (2024-04-19): Ourcubo
paper (preprint) is out in arXiv! Check it here:Montero, D., Aybar, C., Ji, C., Kraemer, G., Sochting, M., Teber, K., & Mahecha, M.D. (2024). On-Demand Earth System Data Cubes.
SpatioTemporal Asset Catalogs (STAC) provide a standardized format that describesgeospatial information. Multiple platforms are using this standard to provide clients several datasets.Nice platforms such asPlanetary Computer use this standard.Additionally,Google Earth Engine (GEE)also provides a gigantic catalogue that users can harness for different tasks in Python.
cubo
is a Python package that provides users of STAC and GEE an easy way to create On-Demand Earth System Data Cubes (ESDCs). This is perfectly suitable for Deep Learning (DL) tasks. You can easily create a lot of ESDCs by just knowing a pair of coordinates and the edge size of the cube in pixels!
Check the simple usage ofcubo
with STAC here:
importcuboimportxarrayasxrda=cubo.create(lat=4.31,# Central latitude of the cubelon=-76.2,# Central longitude of the cubecollection="sentinel-2-l2a",# Name of the STAC collectionbands=["B02","B03","B04"],# Bands to retrievestart_date="2021-06-01",# Start date of the cubeend_date="2021-06-10",# End date of the cubeedge_size=64,# Edge size of the cube (px)resolution=10,# Pixel size of the cube (m))
This chunk of code just created anxr.DataArray
object given a pair of coordinates, the edge size of the cube (in pixels), and additional information to get the data from STAC (Planetary Computer by default, but you can use another provider!). Note that you can also use the resolution you want (in meters) and the bands that you require.
Now check the simple usage ofcubo
with GEE here:
importcuboimportxarrayasxrda=cubo.create(lat=51.079225,# Central latitude of the cubelon=10.452173,# Central longitude of the cubecollection="COPERNICUS/S2_SR_HARMONIZED",# Id of the GEE collectionbands=["B2","B3","B4"],# Bands to retrievestart_date="2016-06-01",# Start date of the cubeend_date="2017-07-01",# End date of the cubeedge_size=128,# Edge size of the cube (px)resolution=10,# Pixel size of the cube (m)gee=True# Use GEE instead of STAC)
This chunk of code is very similar to the STAC-based cubo code. Note that thecollection
is now the ID of the GEE collection to use, and note that thegee
argument must be set toTrue
.
The thing is super easy and simple.
- You have the coordinates of a point of interest. The cube will be created around these coordinates (i.e., these coordinates will be approximately the spatial center of the cube).
- Internally, the coordinates are transformed to the projected UTM coordinates [x,y] in meters (i.e., local UTM CRS). They are rounded to the closest pair of coordinates that are divisible by the resolution you requested.
- The edge size you provide is used to create a Bounding Box (BBox) for the cube in the local UTM CRS given the exact amount of pixels (Note that the edge size should be a multiple of 2, otherwise it will be rounded, usual edge sizes for ML are 64, 128, 256, 512, etc.).
- Additional information is used to retrieve the data from the STAC catalogue or from GEE: starts and end dates, name of the collection, endpoint of the catalogue (ignored for GEE), etc.
- Then, by using
stackstac
andpystac_client
the cube is retrieved as axr. DataArray
. In the case of GEE, the cube is retrievedviaxee
. - Success! That's what
cubo
is doing for you, and you just need to provide the coordinates, the edge size, and the additional info to get the cube.
Install the latest version from PyPI:
pip install cubo
Installcubo
with the required GEE dependencies from PyPI:
pip install cubo[ee]
Upgradecubo
by running:
pip install -U cubo
Install the latest version from conda-forge:
conda install -c conda-forge cubo
Install the latest dev version from GitHub by running:
pip install git+https://github.com/davemlz/cubo
cubo
is pretty straightforward, everything you need is in thecreate()
function:
da=cubo.create(lat=4.31,lon=-76.2,collection="sentinel-2-l2a",bands=["B02","B03","B04"],start_date="2021-06-01",end_date="2021-06-10",edge_size=64,resolution=10,)
By default, the units ofedge_size
are pixels. But you can modify this using theunits
argument:
da=cubo.create(lat=4.31,lon=-76.2,collection="sentinel-2-l2a",bands=["B02","B03","B04"],start_date="2021-06-01",end_date="2021-06-10",edge_size=1500,units="m",resolution=10,)
Tip
You can use "px" (pixels), "m" (meters), or any unit available inscipy.constants
.
da=cubo.create(lat=4.31,lon=-76.2,collection="sentinel-2-l2a",bands=["B02","B03","B04"],start_date="2021-06-01",end_date="2021-06-10",edge_size=1.5,units="kilo",resolution=10,)
By default,cubo
uses Planetary Computer. But you can use another STAC provider endpoint if you want:
da=cubo.create(lat=4.31,lon=-76.2,collection="sentinel-s2-l2a-cogs",bands=["B05","B06","B07"],start_date="2020-01-01",end_date="2020-06-01",edge_size=128,resolution=20,stac="https://earth-search.aws.element84.com/v0")
You can passkwargs
topystac_client.Client.search()
if required:
da=cubo.create(lat=4.31,lon=-76.2,collection="sentinel-2-l2a",bands=["B02","B03","B04"],start_date="2021-01-01",end_date="2021-06-10",edge_size=64,resolution=10,query={"eo:cloud_cover": {"lt":10}}# kwarg to pass)
The project is licensed under the MIT license.
If you use this work, please consider citing the following paper:
@article{montero2024cubo,doi ={10.48550/ARXIV.2404.13105},url ={https://arxiv.org/abs/2404.13105},author ={Montero, David and Aybar, César and Ji, Chaonan and Kraemer, Guido and S\"{o}chting, Maximilian and Teber, Khalil and Mahecha, Miguel D.},keywords ={Databases (cs.DB), Computer Vision and Pattern Recognition (cs.CV), Machine Learning (cs.LG), FOS: Computer and information sciences, FOS: Computer and information sciences},title ={On-Demand Earth System Data Cubes},publisher ={arXiv},year ={2024},copyright ={Creative Commons Attribution 4.0 International}}
The logo and images were created usingdice icons created by Freepik - Flaticon.
About
On-Demand Earth System Data Cubes (ESDCs) in Python
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.