Easy-EO
Easy-EO is a lightweight, extensible Python library for raster-based Earth Observation (EO) analysis which allows for chainable raster processing, algebra, and visualization. It provides high-level abstractions over libraries such as Rasterio, NumPy, and Matplotlib, enabling users to perform common earth-observation analyses and visualization tasks efficiently, without dealing with the underlying complexity.
Features
- Raster operations with spatial awareness
- Algebraic operations (
add,subtract,multiply,divide) - Spectral index library (
ndvi,ndwi,ndmi,ndbi,evi,savi) - Resampling, reprojection, and alignment
- Clip rasters using vectors or bounding boxes
- Normalization (min-max, percentile, z-score)
- Named bands - address bands by name anywhere an index is accepted
- STAC data access - search and load Sentinel-2/Landsat scenes, reading only the area of interest
- xarray interoperability (
to_xarray()/from_xarray()) - Hosted sample dataset, one call away (
eeo.datasets.load_sample_dataset()) - Visualization helpers (bands, composites, histograms)
- Backend-aware design (currently NumPy and Rasterio)
Installation
conda create -n env_name python=3.10
conda activate env_name
pip install easy-eo
Quick Example
from eeo import load_raster
ds_nir = load_raster("path/to/nir.tif")
ds_red = load_raster("path/to/red.tif")
# Chainable example: clip -> resample -> compute NDVI -> multiply
result = (
ds_nir.clip_raster_with_bbox((0, 0, 1000, 1000))
.resample(scale_factor=2)
.normalized_difference(ds_red)
.multiply(100)
)
Or try with a hosted sample data
from eeo.datasets import load_sample_dataset
from eeo import load_raster
sd = load_sample_dataset()
scene = load_raster(sd.sentinel2_cog_stacked) # red, green, blue, nir bands
ndvi = scene.ndvi(red="red", nir="nir")
ndvi.plot_raster()
Tutorials
Sixteen runnable notebooks live in examples/, from first
install through to complete analyses (flood mapping, drought stress, land cover,
terrain). Each one opens in Colab with no local setup — the first cell installs
Easy-EO when it detects Colab:
| Quickstart: NDVI — open a scene, compute an index, plot it | |
| Search and load from STAC — find real scenes, read them over HTTP | |
| Flood mapping with NDWI — Pakistan 2022, before/after, area affected |
The full index, including what each notebook covers, is in
examples/README.md and in the
tutorials page of the
documentation.
Supported Backends
| Backend | Description |
|---|---|
| NumPy | Fast, in-memory arrays without I/O |
| Rasterio | Full geospatial support (CRS, transform, resampling) |
Documentation
📚 Full documentation is available at:
Project Status
🚧 Active development The API is stabilizing but may change before v1.0.
Contributing
Contributions are welcome!
- Bug reports
- Feature requests
- Documentation improvements
Please open an issue or pull request on GitHub.
License
MIT License © 2025 Thomas Burns Botchwey
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file easy_eo-0.2.0.tar.gz.
File metadata
- Download URL: easy_eo-0.2.0.tar.gz
- Upload date:
- Size: 73.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
331c8bed961f61f75e421729c7a3a525ac5fc45bdb81f39e2536d0109216a933
|
|
| MD5 |
e824089fcffce7c1685dabb4fba5e049
|
|
| BLAKE2b-256 |
c5ff9786c29e33f09a929b1ddcd1af983c75e62211d0406654d1dc52e0f38021
|
Provenance
The following attestation bundles were made for easy_eo-0.2.0.tar.gz:
Publisher:
release.yml on Tommy-Burns/easy-eo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
easy_eo-0.2.0.tar.gz -
Subject digest:
331c8bed961f61f75e421729c7a3a525ac5fc45bdb81f39e2536d0109216a933 - Sigstore transparency entry: 2278489326
- Sigstore integration time:
-
Permalink:
Tommy-Burns/easy-eo@77a38fbf64630e6d5e974317c9ca8c9adf2327b2 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Tommy-Burns
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@77a38fbf64630e6d5e974317c9ca8c9adf2327b2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file easy_eo-0.2.0-py3-none-any.whl.
File metadata
- Download URL: easy_eo-0.2.0-py3-none-any.whl
- Upload date:
- Size: 88.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a82011d1b954217d64141cdb37d09c32851ba461bc071375c6b35f5daa42221
|
|
| MD5 |
77f20c0577e0be9ff06f9e62e5855dd0
|
|
| BLAKE2b-256 |
56f620885bfc9eb46e7889248a49f01e6b538b976748832ca0cdb21c25414ab6
|
Provenance
The following attestation bundles were made for easy_eo-0.2.0-py3-none-any.whl:
Publisher:
release.yml on Tommy-Burns/easy-eo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
easy_eo-0.2.0-py3-none-any.whl -
Subject digest:
8a82011d1b954217d64141cdb37d09c32851ba461bc071375c6b35f5daa42221 - Sigstore transparency entry: 2278489599
- Sigstore integration time:
-
Permalink:
Tommy-Burns/easy-eo@77a38fbf64630e6d5e974317c9ca8c9adf2327b2 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Tommy-Burns
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@77a38fbf64630e6d5e974317c9ca8c9adf2327b2 -
Trigger Event:
push
-
Statement type: