Reproducible case study · Kaohsiung, Taiwan
Sentinel-2 surface reflectance, government solar-parcel records, and five pre-treatment-matched control sites, packaged so that a reviewer can verify the whole archived chain offline — no Earth Engine account required.
The research question is narrow and deliberately descriptive: does SC0002 show a large post-2022 spectral vegetation decline that is spatially and temporally consistent with documented clearing and subsequent solar construction, and is that decline substantially larger than in pre-treatment-matched controls?
Throughout, the terms used are spectral vegetation loss / decline, never tree loss, and the matched-control contrast is not presented as a causal treatment-effect estimate.
Sentinel-2 SR Harmonized, March–July annual P70 NDVI/NDMI composites on a fixed UTM Zone 51N grid.
2022 baseline spectral vegetation
58.24ha
2022→2026 spectral loss
16.80ha
Fraction of 2022 baseline
28.84%
Reconstructed AOI (EPSG:3826)
63.30ha
The five controls — C162, C172, C176,
C222, C129 — were frozen before any 2023–2026
NDVI/NDMI outcome was calculated. Each panel below shares one linear scale, so the
size of the gap is the finding.
| Year | SC0002 | Control mean | Highest control | Difference |
|---|---|---|---|---|
| 2023 | 25.67% | 0.73% | 1.52% | +24.93 pp |
| 2024 | 18.96% | 0.52% | 1.45% | +18.44 pp |
| 2025 | 36.99% | 0.71% | 1.18% | +36.28 pp |
| 2026 | 28.84% | 1.30% | 2.25% | +27.54 pp |
The separation survives every archived sensitivity check: control mean, median and trimmed mean; comparison against the highest-loss single control; leave-one-control-out analysis; and a valid-data coverage guardrail.
Collection: COPERNICUS/S2_SR_HARMONIZED
Annual window: March 1 - July 31
Annual statistic: per-pixel P70
CRS: EPSG:32651
Pixel grid: 10 m
SCL excluded: 0, 1, 3, 7, 8, 9, 10, 11
NDVI = (B8 - B4) / (B8 + B4)
NDMI = (B8 - B11) / (B8 + B11)
NDVI_P70 >= 0.55 AND NDMI_P70 >= 0.10
2022 baseline vegetation
AND (NDVI_2022 - NDVI_target) >= 0.20
AND (NDMI_2022 - NDMI_target) >= 0.10
Formal areas use ee.Image.pixelArea() inside the AOI. Raster
pixel-count area is retained as a QA quantity only.
Candidates come from a deterministic UTM grid in a 2–12 km ring around SC0002, and the ranking uses pre-treatment information exclusively.
432 deterministic candidates
-> 60 hard-pass candidates
-> Top 20 by ascending pre-treatment match_score
-> 5 final controls
The match_score is a normalised squared-distance score over exactly
nine variables: P70 NDVI and NDMI for 2020, 2021 and 2022 (six terms), the 2022
baseline vegetation fraction, SRTM elevation, and SRTM slope. Valid-observation
density is a hard screen rather than a score term, and geographic distance only
defines the candidate-search ring. No 2023–2026 outcome value enters the
ranking, and the verifier recomputes all 432 scores from the archived inputs to
prove it.
The final rule applied to the screened Top 20:
screen_pass = YES
-> ascending pre-treatment match_score
-> greedy centre separation >= 2 km
-> maximum 5 controls
Clone the repository and run the offline verifier. It checks SHA-256 hashes, the AOI geometry and its embedding in all seven Earth Engine scripts, the Step 2 spectral results and raster QA, the raw Step 3A / 3A.1 exports, the full candidate chain, the twenty RGB review contact sheets, the control-selection rule and its invariance, and a byte-identical offline rebuild of the derived tables.
git clone https://github.com/lcat2000/sc0002-solar-vegetation-repro.git
cd sc0002-solar-vegetation-repro
python3 -m venv .venv && . .venv/bin/activate
python -m pip install -r requirements-verify.txt
python src/verify/verify_all.py
On Windows run .\verify.ps1; on macOS or Linux run
./verify.sh. The run should end in ALL PASS.
What the archive supports:
What it does not establish on its own:
Two caveats are worth reading before citing any number. For the 2026 comparison the combined rule is numerically close to NDVI-only (28.84% against 29.33%), so NDMI acts as an additional conservative condition rather than independent corroboration; NDMI-only also produces a 43.02% pre-development 2020→2021 null. And monthly comparisons are highly unstable in low-observation months, so no exact clearing onset date is claimed. Both are set out in full in LIMITATIONS.md.