48 hours and moderate sleep later, ARGOS just processed its first Sentinel-2 pass over Kefalonia.
This is what that looks like.
What I was trying to do
I wanted a baseline vegetation map of the entire island. Not from a government PDF, not from a paid dataset- from the European Space Agency's Sentinel-2 satellite, freely available, updated every 5 days. The goal was simple: download the latest cloud-free acquisition, run it through a processing pipeline, and get an NDVI layer I could query against.
The stack
- Python +
rasterio+xarrayfor data handling - GDAL for reprojection (Sentinel-2 comes in UTM 34N, I need EPSG:4326 for the web map)
- A very patient laptop
The problem
Sentinel-2 data is "free" the same way a 500-piece puzzle is "free"- every piece is there, but no one warned you about step seven. The SAFE format, the multiple granules, the 10m vs 20m resolution bands, the cloud masking- none of it is hard individually, but the pipeline has about twelve steps and step seven fails silently if you forget to resample the 20m bands before stacking.
I forgot. Twice.
The fix
A very ugly Python script that I am not proud of but that works. It downloads the granule, filters clouds, calculates NDVI, reprojects to WGS84, and drops a GeoTIFF into a folder that PostGIS will eventually ingest. The script is 180 lines. 40 of them are error handling. That's the honest ratio.
The honest part
The NDVI map looks beautiful. Green valleys, dry ridges, the whole island in false colour. But "beautiful" and "useful" are different things. I spent hour 36 staring at a perfectly rendered map and realising I had no idea whether an NDVI of 0.3 meant "stressed vegetation" or "just rocks." The satellite sees what it sees. Context comes from knowing the island.
What's next
Layer 2: wildfire risk index. Slope + aspect + NDVI + fuel type. The model will be wrong. It already thinks Greek firs burn like pine. But that's Build Log #2.
Links
This is Build Log #1 of the ARGOS series. Build Log #2: Why the model thinks Greek firs burn like pine (and why it's wrong).
Top comments (0)