earthchange
Multipurpose satellite environmental monitoring and change detection, in pure Python. 29 scenarios from free public archives: fire danger (Canadian FWI on BMKG thresholds), smoke exposure in person-days, air-parcel trajectories (HYSPLIT), drought, paddy-field drought per plot (planting delay from Sentinel-1, water adequacy, a 7-day outlook), land-surface heat, floods, deforestation, mining, urbanisation and surface-water change — via Google Earth Engine or Microsoft Planetary Computer (no account needed). Export georeferenced GeoTIFFs, quick-look PNGs, statistics, print-ready A4 maps, citable Markdown records, and a one-file brief that assembles a whole assessment. Every output carries its own limits.
- 📖 Full hands-on tutorial (English & Bahasa Indonesia): https://firmanhadi21.github.io/rs-change-detection/
- 💻 Source, examples & case study: https://github.com/firmanhadi21/rs-change-detection
Install
Heavy dependencies are optional extras, so the install stays lean:
pip install 'earthchange[gee]' # Google Earth Engine backend (free account)
pip install 'earthchange[mpc,maps]' # Planetary Computer + maps (no account)
pip install 'earthchange[all]' # everything
Quick start
# Deforestation around a coordinate, with a finished map
earthchange -s deforestation --lat -3.333 --lon 122.25 --radius 6 --map
# Flood extent from Sentinel-1 SAR — no Earth Engine account needed
earthchange -s flood --lat 27.2 --lon 68.3 \
--pre 2022-07-01:2022-07-25 --post 2022-08-20:2022-09-10 --backend mpc
# Urban growth timing across 2010/2015/2020 (Landsat 5/8/9)
earthchange -s urban-trend --lat -6.30 --lon 107.15 --map
# List everything
earthchange --list
Each run writes a self-contained output/<run-id>/ folder containing the PNG,
GeoTIFF, statistics JSON, metadata, and any maps.
Scenarios
| Scenario | Method | Sensor |
|---|---|---|
deforestation |
NDVI loss | Sentinel-2 |
urbanization |
Built-up gain — NDBI (default), UI, BU, IBI, or thermal NDISI/EBBI via --method |
Sentinel-2 / Landsat |
water |
NDWI change | Sentinel-2 |
burn |
dNBR severity | Sentinel-2 |
mining |
SIRAD radar temporal + NDVI loss | Sentinel-1 + S2 |
flood |
SAR water extent (event vs baseline) | Sentinel-1 |
urban-trend |
NDBI at 3 epochs → RGB growth-timing map | Landsat 5/8/9 |
coastline |
Sea boundary + shoreline change (erosion/accretion) + retreat rate m/yr | S1 / S2 / Landsat |
transit-access |
% population with access to public transport (SDG 11.2.1) | WorldPop + OSM |
island-heat |
SST + LST + wet-bulb (humid heat) trends for small islands | OISST / Landsat / ERA5 |
urban-heat |
Urban heat island (SUHII) + hot-spot map + decadal trend | GHSL + Landsat + MODIS |
forest-history |
Multi-epoch deforestation: year-of-loss map + forest-area trajectory | S2 / Landsat NDVI |
population-change |
Two-epoch population change: Miloš-style spike poster + map + optional true GPU 3D via forge3d | GHSL GHS_POP |
haze |
Smoke & air quality during fires: PM2.5 (ISPU), aerosol index, hotspots | CAMS + Sentinel-5P + FIRMS |
fire-history |
Multi-year fire record: burned area per year (peat vs mineral), recurrence map, fire season | MODIS MCD64A1 + FIRMS |
Two backends
--backend |
Data source | Account? |
|---|---|---|
gee (default) |
Google Earth Engine | free account + earthengine authenticate |
mpc |
Microsoft Planetary Computer (STAC) | none — streams COGs, processes locally |
Optical scenarios build cloud-masked median composites; radar scenarios auto-select the Sentinel-1 orbit with coverage. The AOI is a square centred on your coordinate. Landsat 7 is skipped (SLC-off gaps).
Make maps from a finished run
earthmap output/<run-id> # render A4 map sheets offline (no GEE)
Map sheets include an OpenStreetMap basemap, the change layer, legend, a statistics panel, a location inset, coordinate grid, scale bar and north arrow.
License
MIT © Firman Hadi. Data: Copernicus Sentinel (ESA) and Landsat (USGS/NASA), via Google Earth Engine or Microsoft Planetary Computer.
Metadata
Release files for earthchange 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| earthchange-0.2.0.tar.gz | 421.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| earthchange-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 848.5 kB
Release files / earthchange-0.2.0.tar.gz
| Download URL | earthchange-0.2.0.tar.gz |
|---|---|
| Size | 421.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e790fd21dfb7237499c9ecfe51c46d8886d3b7f606f5de7996ffbd359f9b9c81
|
|
BLAKE2b-256 checksum How to use checksums |
a3d5c8f61d65fcef3cf2c3e12463975293645fa9a8e121885c5b703b7f63d91a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logRelease files / earthchange-0.2.0-py3-none-any.whl
| Download URL | earthchange-0.2.0-py3-none-any.whl |
|---|---|
| Size | 426.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7d178b4871b7701ad3612e09c02899b55e4430d97a0a3a0e4da1892b462a9a75
|
|
BLAKE2b-256 checksum How to use checksums |
40adc5b05fdd551bf3a4c3e8645f72eee8828cc87856af6d56813931d317ff58
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logSecurity for earthchange 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for earthchange-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.