Add weighted zonal stats support to ZonalEngineExactExtract
Summary
Implement weighted_zonal_stats() in ZonalEngineExactExtract using exactextract's built-in coverage fraction weighting, replacing the current NotImplementedError.
Context
exactextract handles large datasets natively with bounded memory (feature-sequential and raster-sequential strategies, max_cells_in_memory parameter). Its coverage fraction weighting is sufficient for our use cases, making the custom vector-based weighted stats in ZonalEngineSerial, ZonalEngineParallel, and ZonalEngineDask unnecessary.
This is part of a phased deprecation:
- Deprecation warnings added to legacy zonal engines (done in prior MR)
- This issue: implement weighted stats in exactextract
- Future: remove legacy zonal engines entirely
Acceptance Criteria
-
ZonalEngineExactExtract.weighted_zonal_stats()returns results using exactextract's coverage fraction weighting - Output format matches existing weighted zonal stats output (GeoDataFrame with same columns)
- Tests covering continuous and categorical weighted zonal stats
- Update deprecation warning message to confirm weighted stats are available in exactextract engine
References
- exactextract documentation
-
src/gdptools/agg/zonal_engines.py—ZonalEngineExactExtractclass