2  Data Sources

2.1 PlanetScope SuperDove

The primary imagery source is PlanetScope SuperDove at 3 m resolution. Ten epochs spanning two years bracket the full seasonal cycle for West Java: two dry-season and two wet-season composites per year, plus transition dates.

Label Date DOY Season
march 21 Mar 2024 81 Late wet
june 30 Jun 2024 182 Early dry
aug 5 Aug 2024 218 Dry
sept 16 Sep 2024 260 Dry
jan25 10 Jan 2025 10 Wet
may25 5 May 2025 125 Early dry
aug25 15 Aug 2025 227 Dry
sep25 7 Sep 2025 250 Dry
nov25 24 Nov 2025 328 Early wet
mar26 17 Mar 2026 76 Late wet

SuperDove provides 8 spectral bands:

Band Name
1 Coastal Blue
2 Blue
3 Green I
4 Green
5 Yellow
6 Red
7 Red Edge
8 NIR

The red edge (band 7) is the key addition over older PlanetScope sensors — it enables vegetation indices such as NDRE and CIre that are more sensitive to canopy chlorophyll content than NDVI alone.

2.2 Sentinel-1 SAR

Sentinel-1 GRD imagery from ESA Copernicus, accessed via Earth Engine:

  • Collection: COPERNICUS/S1_GRD
  • Mode: Interferometric Wide (IW), descending orbit
  • Polarizations: VV and VH
  • Window: 2024-03-01 to 2026-03-31 (brackets the PlanetScope stack)
  • Scale: exported at 30 m

Raw images are in linear sigma0 units. Non-positive values (common for VH in dense canopy and water) are clamped to 1e-10 before the log10 conversion so that all exported pixels are finite:

img.max(1e-10).log10().multiply(10)

Without this clamp, the EE mean() reducer propagates nodata masks and the exported GeoTIFF can be almost entirely empty (observed: 0.2% finite VH pixels before the fix).

2.2.1 S1 feature bands (19 total)

Band Description
VV_mean, VH_mean Temporal mean (dB)
VV_stdDev, VH_stdDev Temporal standard deviation
VV_min, VH_min Temporal minimum
VV_max, VH_max Temporal maximum
VV_CV, VH_CV Coefficient of variation
VV_wet, VH_wet Wet-season mean (Nov–Mar)
VV_dry, VH_dry Dry-season mean (Apr–Oct)
VV_seasonal_diff, VH_seasonal_diff Wet minus dry
VV_VH_ratio VV − VH (dB)
RVI_S1 Radar Vegetation Index
DPSVI_S1 Dual-Polarization SAR Vegetation Index

2.3 PALSAR-2

ALOS-2 PALSAR-2 L-band yearly mosaic from JAXA, accessed via Earth Engine:

  • Asset: JAXA/ALOS/PALSAR/YEARLY/SAR
  • Bands: HH and HV (DN, uint16)
  • Year: auto-probed 2024 → 2017; 2020 selected for this AOI (most recent published year as of 2026-05)
  • Scale: exported at 30 m

DN is converted to sigma0 (dB): 20 × log10(DN) − 83.

2.3.1 PALSAR feature bands (5 total)

Band Description
HH_db HH backscatter (dB)
HV_db HV backscatter (dB)
HH_HV_ratio HH − HV (dB)
RVI_PALSAR Radar Vegetation Index
DPSVI_PALSAR Dual-Polarization SAR Vegetation Index

HV_db ranked #5 in overall feature importance — L-band penetrates dense canopy and carries structural information (biomass, canopy height) that C-band cannot resolve.

2.4 Canopy height

2.4.1 ETH 2020 (10 m)

Global canopy height from Lang et al. 2022, distributed via Earth Engine (users/nlang/ETH_GlobalCanopyHeight_2020_10m_v1). Provides tree_height_mean and tree_height_std within a 30 m focal window — two features in the pixel cache.

2.4.2 Meta Data-for-Good v2 (~28 m source, 3 m output)

Higher-level aggregated canopy statistics from Meta’s Data-for-Good program, streamed anonymously from S3 (dataforgood-fb-data). Downloaded by download_meta_canopy_v2.py and reprojected to EPSG:32748 at 3 m.

Statistic Units Description
avg metres Mean canopy height
stdev metres Height standard deviation
p95 metres 95th-percentile height (emergents)
cover fraction Canopy cover fraction

These 4 layers → 8 segment features (mean + std each). They ranked highest per-feature importance in the full 599-feature stack — beating every spectral, temporal, and SAR feature individually. meta_canopy_p95__mean and meta_canopy_avg__mean are the top two overall features.

Source encoding: raw uint16 values use centimetres (heights) and per-mille (cover); 65535 is the nodata sentinel. download_meta_canopy_v2.py masks and rescales to natural units before writing.

2.5 Training samples

samples.gpkg contains point features digitised by photo-interpretation over PlanetScope imagery and cross-checked with QGIS Wayback:

Column Values Used by
class 1–7 (integer) L1 classifier
class_l2 Natural, Production, Agroforest (string) L2 classifier

Points with class = 5 (Dense Vegetation) and a non-null class_l2 serve double duty: they train L1 as Dense Vegetation and train L2 for the forest subtype split.

2.5.1 L2 sample targets

Aim for ≥30 photo-interpretable polygons per L2 subclass. Interpretive cues:

Subtype Canopy height Height stdev Other cues
Natural Forest >20 m, patchy emergents High Irregular crown texture, no rows, on slopes
Production Forest 15–25 m, uniform Low Rectilinear blocks, visible roads, occasional clearfells in time series
Agroforest 8–18 m, mixed Medium Near settlements, more NDVI variation across epochs