OxiGDAL Temporal
Multi-temporal raster analysis for OxiGDAL - Pure Rust implementation for time series analysis, change detection, and phenology.
Features
- Time Series Raster Collections: Time-indexed raster management with lazy loading
- Temporal Compositing: Maximum value composite (MVC), median, mean, quality-weighted
- Temporal Interpolation: Linear, cubic spline, seasonal, gap filling
- Temporal Aggregation: Daily, weekly, monthly, yearly, and rolling window aggregations
- Change Detection: BFAST, LandTrendr, CCDC, simple differencing, CUSUM
- Trend Analysis: Linear trends, Mann-Kendall test, Sen's slope estimator
- Phenology Analysis: Growing season detection, peak timing, amplitude calculation
- Data Cube Operations: Multi-dimensional (x, y, time, bands) operations with Zarr integration
Installation
Add to your Cargo.toml:
[]
= "0.1"
# Enable specific features
= { = "0.1", = ["all_temporal"] }
Usage Examples
Creating a Time Series
use ;
use ;
use Array3;
let mut ts = new;
let dt = from_timestamp?;
let date = from_ymd_opt?;
let metadata = new
.with_cloud_cover
.with_quality_score;
let data = zeros;
ts.add_raster?;
Temporal Compositing
use ;
let config = CompositingConfig ;
let composite = composite?;
println!;
Change Detection
use ;
let config = ChangeDetectionConfig ;
let changes = detect?;
println!;
Temporal Aggregation
use ;
let config = AggregationConfig ;
let result = aggregate?;
let monthly_mean = result.get.unwrap;
Trend Analysis
use ;
let trend = analyze?;
println!;
println!;
Phenology Extraction
use ;
let config = default;
let metrics = extract?;
println!;
println!;
println!;
Data Cube Operations
use DataCube;
let cube = from_stack?;
// Subset operations
let temporal_subset = cube.select_time_range?;
let band_subset = cube.select_bands?;
let spatial_subset = cube.spatial_subset?;
// Apply temporal function
let mean = cube.apply_temporal?;
Features
Enable specific features as needed:
timeseries- Time series raster collectionscompositing- Temporal compositinginterpolation- Temporal interpolationaggregation- Temporal aggregationchange_detection- Change detectiontrend_analysis- Trend analysisphenology- Phenology extractiondatacube- Data cube operationszarr- Zarr storage integrationparallel- Parallel processing with rayonall_temporal- Enable all temporal features
Performance
- Zero-copy operations where possible
- Lazy loading for large time series
- Optional parallel processing with rayon
- SIMD optimizations for statistical operations
- Efficient memory management with ndarray
COOLJAPAN Policies
This crate follows COOLJAPAN standards:
- Pure Rust implementation (no C/Fortran dependencies by default)
- No
unwrap()orpanic!in production code - Comprehensive error handling with
thiserror - Uses SciRS2-Core for scientific computing
- Integration with oxigdal-zarr for cloud-native storage
- Files kept under 2000 lines for maintainability
License
Apache-2.0
Contributing
Contributions welcome! This crate is part of the OxiGDAL ecosystem.
Authors
COOLJAPAN OU (Team Kitasan)