Precision-viticulture pipeline modeling vine canopy health across Washington State wine country at 10 m resolution — nine years of Sentinel-2 imagery, terrain, soil, and climate fused into a gradient-boosted model, then pushed through three different tools to see what each one is actually built for.
Vineyard blocks digitized from KML are retiled into 32,978 equal-area hexagonal cells (~10 m across, one Sentinel-2 pixel each). Each cell gets a terrain profile from the USGS 1 m DEM (elevation, slope, aspect, curvature), soil properties from USGS gSSURGO, daily weather from gridMET, and nine years of Sentinel-2 NDVI pulled through Google Earth Engine — then a stacked gradient-boosted model (PySpark MLlib) predicts each cell's harvest-window NDVI anomaly from terrain, soil, and climate alone.
FeatureCollection blew past GEE's 10 MB
request cap. Fixed by uploading the tile centroids as a GEE asset
once, then referencing that asset ID in every export task instead
of re-sending geometry each time.
filterBounds() against the uploaded asset returned
zero images — GEE didn't recognize a spatial extent on an asset
built from bare points. Fixed by computing an explicit
ee.Geometry.BBox from the centroid CSV's own
lon/lat min/max instead of trusting the asset's implicit bounds.
reduceRegion() returned null.
sampleRegions() against the polygon set, not a
buffered point, was the fix.
Full run order and every notebook: RegressionRidge/spark_pipeline/.
The same 32,978-cell grid that crashed a browser BI tool's map
chart (see below) is exactly what a desktop GIS tool is built for.
export_qgis.py joins the real hex polygon geometry to
terrain and a 9-year NDVI trend and writes one GeoPackage —
no aggregation, no row-count wall.
These are the matplotlib fallback — not QGIS output, but the same underlying grid rendered at full density, which is the point: neither of these figures aggregates or samples down from 32,978 cells.
Power BI Service rejected personal-email signup outright, and its "free" workaround wanted a phone number and a subscription plan. Looker Studio works with a plain Gmail account — but its map chart draws one marker per row client-side and crashed the browser tab past a few thousand points, which this grid clears by a wide margin. The star-schema CSVs below are the real fix: same data, same tool, joined by hand in Looker Studio's Blend editor instead of trying to force 32,978 markers onto one map.
dim_cells.csv dim_years.csv fact_ndvi_yearly.csv Loading + blend walkthrough