Reproducible case study · Kaohsiung, Taiwan

SC0002 solar development and spectral vegetation change

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.

Archived result

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

Treatment versus matched controls

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.

SC0002 Control mean (n = 5)
2023
25.67%0.73%
2024
18.96%0.52%
2025
36.99%0.71%
2026
28.84%1.30%
Share of the 2022 baseline spectral vegetation classified as lost, by target year. Bars are drawn to a common scale whose maximum is the 2025 treatment value (36.99%).
Exact values, including the single highest-loss control each year.
Year SC0002 Control mean Highest control Difference
202325.67%0.73%1.52%+24.93 pp
202418.96%0.52%1.45%+18.44 pp
202536.99%0.71%1.18%+36.28 pp
202628.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.

Analysis definition

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)

2022 baseline spectral vegetation

NDVI_P70 >= 0.55 AND NDMI_P70 >= 0.10

Standard loss rule

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.

Control selection

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
On the visual screen. Treatment status was screened using 2023–2026 true-colour imagery, which in principle could bias the control distribution downward. Forcing the two visually excluded candidates — or all twenty — to pass leaves the same five controls, because both excluded candidates ranked below them. The design risk remains documented even though it does not change this result.

Verify it yourself

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.

Interpretation boundary

What the archive supports:

SC0002 exhibits a large and persistent post-2022 spectral vegetation decline that is spatially and temporally consistent with independently reviewed clearing and subsequent solar construction. The decline is substantially larger than in five pre-treatment-matched, outcome-blindly ranked controls, and remains robust under the archived sensitivity checks.

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.