Multipurpose satellite change detection (deforestation, mining, urbanisation, floods, burns, water, urban growth) via Google Earth Engine or Microsoft Planetary Computer.
Project description
satchange
Multipurpose satellite change detection in pure Python. Map deforestation, mining, urbanisation, floods, burns, surface-water change and multi-epoch urban growth anywhere on Earth from free Sentinel-1/2 and Landsat data — via Google Earth Engine or Microsoft Planetary Computer (no account needed). Export georeferenced GeoTIFFs, quick-look PNGs, statistics, and print-ready A4 maps.
- 📖 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 'satchange[gee]' # Google Earth Engine backend (free account)
pip install 'satchange[mpc,maps]' # Planetary Computer + maps (no account)
pip install 'satchange[all]' # everything
Quick start
# Deforestation around a coordinate, with a finished map
satchange -s deforestation --lat -3.333 --lon 122.25 --radius 6 --map
# Flood extent from Sentinel-1 SAR — no Earth Engine account needed
satchange -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)
satchange -s urban-trend --lat -6.30 --lon 107.15 --map
# List everything
satchange --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 |
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
satmap 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.
Project details
Release history Release notifications | RSS feed
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 satchange-0.1.24.tar.gz.
File metadata
- Download URL: satchange-0.1.24.tar.gz
- Upload date:
- Size: 78.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc9d6d017a93f66bbdf592c54d1d601b107decd95b2be92b373c397f0b951c4d
|
|
| MD5 |
185abeba780fd311d97a8e7ff966f34f
|
|
| BLAKE2b-256 |
9c81d076eecbd585dc6b215b0960e332a76d4c2161aed176aad816a1ed376a9e
|
Provenance
The following attestation bundles were made for satchange-0.1.24.tar.gz:
Publisher:
publish.yml on firmanhadi21/rs-change-detection
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
satchange-0.1.24.tar.gz -
Subject digest:
fc9d6d017a93f66bbdf592c54d1d601b107decd95b2be92b373c397f0b951c4d - Sigstore transparency entry: 2210853747
- Sigstore integration time:
-
Permalink:
firmanhadi21/rs-change-detection@6250ea0806777e71eea1b414c97a25988974e5e0 -
Branch / Tag:
refs/tags/v0.1.24 - Owner: https://github.com/firmanhadi21
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6250ea0806777e71eea1b414c97a25988974e5e0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file satchange-0.1.24-py3-none-any.whl.
File metadata
- Download URL: satchange-0.1.24-py3-none-any.whl
- Upload date:
- Size: 74.4 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 |
62457ba613f6ca1114ecca2ecfe64a0c0d1a398a656b5163e490b2f9a1cfe786
|
|
| MD5 |
825392a72c45301c2b605d3341b337f8
|
|
| BLAKE2b-256 |
5300a0aa0d87fc0a6367f123e528043bc5f3779de195f59b65b4658950e79a71
|
Provenance
The following attestation bundles were made for satchange-0.1.24-py3-none-any.whl:
Publisher:
publish.yml on firmanhadi21/rs-change-detection
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
satchange-0.1.24-py3-none-any.whl -
Subject digest:
62457ba613f6ca1114ecca2ecfe64a0c0d1a398a656b5163e490b2f9a1cfe786 - Sigstore transparency entry: 2210853943
- Sigstore integration time:
-
Permalink:
firmanhadi21/rs-change-detection@6250ea0806777e71eea1b414c97a25988974e5e0 -
Branch / Tag:
refs/tags/v0.1.24 - Owner: https://github.com/firmanhadi21
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6250ea0806777e71eea1b414c97a25988974e5e0 -
Trigger Event:
release
-
Statement type: