PyGeoFetch 1.9.2__tar.gz → 1.9.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pygeofetch-1.9.4/CHANGELOG.md +195 -0
- {pygeofetch-1.9.2/pygeofetch.egg-info → pygeofetch-1.9.4}/PKG-INFO +279 -85
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/README.md +268 -75
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/__init__.py +1 -1
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/downloader.py +80 -25
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/__init__.py +37 -2
- pygeofetch-1.9.4/pygeofetch/insar/annotation.py +461 -0
- pygeofetch-1.9.4/pygeofetch/insar/atmosphere.py +555 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/coregister.py +105 -32
- pygeofetch-1.9.4/pygeofetch/insar/deburst.py +191 -0
- pygeofetch-1.9.4/pygeofetch/insar/esd.py +282 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/extraction.py +124 -1
- pygeofetch-1.9.4/pygeofetch/insar/flatearth.py +243 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/interferogram.py +544 -7
- pygeofetch-1.9.4/pygeofetch/insar/ionosphere.py +675 -0
- pygeofetch-1.9.4/pygeofetch/insar/splitspectrum_diagnostic.py +171 -0
- pygeofetch-1.9.4/pygeofetch/insar/synthetic.py +391 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/timeseries.py +73 -46
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/unwrap.py +249 -0
- pygeofetch-1.9.4/pygeofetch/insar/workflow.py +282 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/meta.yaml +1 -1
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/airbus_oneatlas.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/alaska_satellite_facility.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/aws_earth.py +5 -2
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/copernicus.py +30 -10
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/digitalglobe.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/earth_explorer_additional.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/element84.py +13 -2
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/eodag_provider.py +26 -3
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/esa_scihub.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/geoserver_generic.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/google_earth_engine.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/inpe_cbers.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/isro_bhuvan.py +12 -2
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/jaxa_earth.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/maxar_gbdx.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/nasa_earthdata.py +36 -1
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/nasa_earthdata_cloud.py +3 -2
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/noaa_big_data.py +10 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/planet.py +1 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/planetary_computer.py +5 -2
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/sentinel_hub.py +5 -4
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/terrabotics.py +8 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/usgs.py +2 -1
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/viz/map.py +101 -2
- {pygeofetch-1.9.2 → pygeofetch-1.9.4/pygeofetch.egg-info}/PKG-INFO +279 -85
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/SOURCES.txt +22 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/requires.txt +7 -5
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pyproject.toml +32 -12
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/setup.cfg +1 -1
- pygeofetch-1.9.4/tests/test_atmospheric_circular_regression.py +104 -0
- pygeofetch-1.9.4/tests/test_burst_metadata.py +116 -0
- pygeofetch-1.9.4/tests/test_burst_processing_integration.py +166 -0
- pygeofetch-1.9.4/tests/test_era5_atmospheric_correction.py +92 -0
- pygeofetch-1.9.4/tests/test_flat_earth_phase.py +162 -0
- pygeofetch-1.9.4/tests/test_gcp_reprojection.py +129 -0
- pygeofetch-1.9.4/tests/test_ionosphere.py +387 -0
- pygeofetch-1.9.4/tests/test_models.py +146 -0
- pygeofetch-1.9.4/tests/test_provider_geometry_audit (1).py +200 -0
- pygeofetch-1.9.4/tests/test_provider_geometry_audit.py +177 -0
- pygeofetch-1.9.4/tests/test_provider_scene_disambiguation.py +115 -0
- pygeofetch-1.9.4/tests/test_providers.py +88 -0
- pygeofetch-1.9.4/tests/test_search_download.py +126 -0
- pygeofetch-1.9.4/tests/test_splitspectrum_diagnostic.py +106 -0
- pygeofetch-1.9.4/tests/test_utils.py +186 -0
- pygeofetch-1.9.2/CHANGELOG.md +0 -42
- pygeofetch-1.9.2/pygeofetch/insar/annotation.py +0 -184
- pygeofetch-1.9.2/pygeofetch/insar/atmosphere.py +0 -308
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/LICENSE +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/MANIFEST.in +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/auth_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/download_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/index_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/main.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/postprocess_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/sar_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/search_commands.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/authenticator.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/cache_manager.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/engine.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/logging.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/orbits.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/scheduler.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/searcher.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/geolocation.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/gpu.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/validate.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/visualize.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/download_task.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/satellite_data.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/search_query.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/user_auth.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/base.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/batch.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/indices.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/postprocessor.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/preprocessor.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/sar.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/indices.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/landsat.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/loader.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/stacker.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/timeseries.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/base.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/opentopography.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/_native.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/_ost.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/_sarxarray.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/extraction.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/processor.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/gcp_recovery.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/geo_utils.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/viz/__init__.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/viz/plot.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/not-zip-safe +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/top_level.txt +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_extraction.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_insar.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_pgv_integration_contract.py +0 -0
- {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_viz_plot.py +0 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to PyGeoFetch are documented here.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.9.4/).
|
|
5
|
+
|
|
6
|
+
## [1.9.4] — 2026-07-29
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- Major SNAPHU unwrapping improvements for urban InSAR applications
|
|
10
|
+
- 8x4 multilooking strategy for dense urban fringe reduction (32x noise reduction)
|
|
11
|
+
- Goldstein phase filter (alpha=0.5) for noise suppression
|
|
12
|
+
- Tile handling for large scenes (>1500x1500 pixels) with configurable overlap
|
|
13
|
+
- Per-panel colormap and range control in `plot_comparison`
|
|
14
|
+
- Multi-panel comparison for mixed continuous/categorical data
|
|
15
|
+
- Common grid resampling for SBAS time series with varying swath widths
|
|
16
|
+
- Coherence threshold masking (0.3) for reliable pixel filtering
|
|
17
|
+
- Auto-selection of reference pixel based on mean coherence
|
|
18
|
+
- LOS to vertical displacement conversion with configurable incidence angle
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- **SNAPHU `nlooks`**: increased from 2.0 to 25.0–100.0 (12.5x phase variance reduction)
|
|
22
|
+
- **`coherence_window`**: now defaults to 5 for urban areas (was 11)
|
|
23
|
+
- **`min_conncomp_frac`**: lowered to 0.0001 for urban disconnected patches
|
|
24
|
+
- **`min_region_size`**: reduced to 20 for smaller reliable components
|
|
25
|
+
- **SNAPHU cost mode**: added `smooth` mode support for dense fringes
|
|
26
|
+
- **SNAPHU `init_method`**: optimized MCF with tile parameters
|
|
27
|
+
|
|
28
|
+
### Deprecated
|
|
29
|
+
- ESD with arbitrary scaling (0.01) — use proper Doppler centroid implementation instead
|
|
30
|
+
- `nlooks=2.0` default — use 25.0–100.0 for urban areas
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
- **CRITICAL**: SNAPHU 100% unreliable-pixels issue, even with coherence 0.3–0.4
|
|
34
|
+
- Phase variance reduced from 6.38 to 0.51 rad² (12.5x improvement)
|
|
35
|
+
- Shape mismatch errors in SBAS network inversion
|
|
36
|
+
- Missing tile parameters causing memory errors for large scenes
|
|
37
|
+
- ESD phase discontinuities from incorrect scaling factor
|
|
38
|
+
- Double plotting issue in Jupyter notebooks
|
|
39
|
+
- Coherence dtype handling for SNAPHU (float32 vs uint16)
|
|
40
|
+
|
|
41
|
+
### Performance
|
|
42
|
+
- 87.1% reliable pixels achieved on urban InSAR data (was 0%)
|
|
43
|
+
- 16x faster processing with optimized tile parameters
|
|
44
|
+
- Reduced memory footprint for large scenes with tiling
|
|
45
|
+
|
|
46
|
+
### Results (Mexico City Test Case)
|
|
47
|
+
- Best pair (2024-12-26 → 2025-01-07): 87.1% reliable
|
|
48
|
+
- Coherence range improved: 0.13–0.16 → 0.266–0.417
|
|
49
|
+
- Vertical velocity: −40 to +10 cm/year (Mexico City subsidence)
|
|
50
|
+
- Mean coherence: 0.302 across all pairs
|
|
51
|
+
|
|
52
|
+
### Migration Guide
|
|
53
|
+
```python
|
|
54
|
+
# Before (v1.9.4)
|
|
55
|
+
unwrapper = PhaseUnwrapper(cost_mode="defo", init_method="mcf")
|
|
56
|
+
unwrapped = unwrapper.unwrap(phase, coherence, nlooks=2.0)
|
|
57
|
+
|
|
58
|
+
# After (v1.10.0)
|
|
59
|
+
from pygeofetch.insar.unwrap import multilook
|
|
60
|
+
|
|
61
|
+
phase_ml = multilook(phase, 8, 4, wrapped_phase=True)
|
|
62
|
+
coh_ml = multilook(coherence, 8, 4, wrapped_phase=False)
|
|
63
|
+
|
|
64
|
+
unwrapper = PhaseUnwrapper(cost_mode="smooth", init_method="mcf")
|
|
65
|
+
unwrapped = unwrapper.unwrap(
|
|
66
|
+
phase_ml, coh_ml,
|
|
67
|
+
nlooks=100.0,
|
|
68
|
+
min_conncomp_frac=0.0001,
|
|
69
|
+
min_region_size=20
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## [1.9.4] — 2026-07-12
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- Federated search across 22+ satellite data providers
|
|
79
|
+
- Sentinel-1C and Sentinel-1D constellation support (active since May/April 2026)
|
|
80
|
+
- SLC product type search with automatic provider routing
|
|
81
|
+
- Precise orbit file management (POEORB/RESORB) for InSAR workflows
|
|
82
|
+
- 17 spectral indices: NDVI, EVI, SAVI, NDWI, MNDWI, NDBI, NDSI, NDMI, NBR, dNBR, TCT, PCA, Texture, LST, Albedo, Band Math, Stack
|
|
83
|
+
- SAR processing: despeckle, calibrate, flood mapping, coherence
|
|
84
|
+
- 41-step chainable processing pipeline builder
|
|
85
|
+
- YAML pipeline definitions with cron scheduling
|
|
86
|
+
- Cloud Optimized GeoTIFF output
|
|
87
|
+
- Clean search result tables with ANSI-aware column alignment
|
|
88
|
+
- Live download progress with Jupyter notebook HTML widget support
|
|
89
|
+
- Credential redaction in all log output
|
|
90
|
+
|
|
91
|
+
### Fixed
|
|
92
|
+
- `AuthManager.add_credentials()` now accepts dict form (BUG 1)
|
|
93
|
+
- `download()` length/order contract guaranteed (BUG 2)
|
|
94
|
+
- Partial downloads detected via file validation (BUG 3)
|
|
95
|
+
- CRS identity transform detection after reprojection (BUG 4)
|
|
96
|
+
- `resolve_band_keys` missing import in `aws_earth` provider
|
|
97
|
+
- Band alias conflict between Sentinel-2 and Landsat naming conventions
|
|
98
|
+
- Copernicus `product_type` OData filter now correctly applied
|
|
99
|
+
- USGS M2M API authentication payload (`authType`, `catalogId` fields)
|
|
100
|
+
- ZIP archive validation no longer attempts rasterio open on archives
|
|
101
|
+
|
|
102
|
+
### Providers
|
|
103
|
+
- Copernicus Dataspace (Sentinel-1/2/3/5P, SLC + GRD)
|
|
104
|
+
- AWS Earth (Sentinel-2, Landsat via STAC)
|
|
105
|
+
- Planetary Computer (Sentinel-2, Landsat, MODIS)
|
|
106
|
+
- Element84 Earth Search (STAC)
|
|
107
|
+
- USGS Earth Explorer (Landsat 1–9, ASTER, SRTM)
|
|
108
|
+
- NASA Earthdata (MODIS, ICESat-2, GEDI)
|
|
109
|
+
- Alaska SAR Facility (Sentinel-1 SLC, ALOS PALSAR)
|
|
110
|
+
- Planet Labs, Sentinel Hub, Maxar, Airbus, OpenTopography, and more
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## [1.9.2] — 2026-06-15
|
|
115
|
+
|
|
116
|
+
### Added
|
|
117
|
+
- Batch processing support for multiple scenes
|
|
118
|
+
- Parallel download with configurable thread count
|
|
119
|
+
- Progress tracking with ETA estimation
|
|
120
|
+
- Automatic retry on network failures (3 attempts)
|
|
121
|
+
- Checksum verification for downloaded files
|
|
122
|
+
|
|
123
|
+
### Fixed
|
|
124
|
+
- Memory leak in large STAC search results
|
|
125
|
+
- Timeout issues with slow API responses
|
|
126
|
+
- Incorrect band ordering in Sentinel-2 L2A products
|
|
127
|
+
- CRS transformation for MODIS sinusoidal projection
|
|
128
|
+
|
|
129
|
+
### Performance
|
|
130
|
+
- 40% faster STAC searches with pagination optimization
|
|
131
|
+
- 60% faster download with parallel connections
|
|
132
|
+
- Reduced memory usage for large raster processing
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## [1.9.1] — 2026-05-20
|
|
137
|
+
|
|
138
|
+
### Added
|
|
139
|
+
- Interactive 3D terrain visualization with PyVista
|
|
140
|
+
- Time series plotting for SBAS results
|
|
141
|
+
- Phase unwrapping with SNAPHU integration
|
|
142
|
+
- Coherence estimation with variable window sizes
|
|
143
|
+
- Automatic DEM download and clipping
|
|
144
|
+
|
|
145
|
+
### Fixed
|
|
146
|
+
- GeoJSON parsing for irregular geometries
|
|
147
|
+
- Reprojection issues with rotated coordinate systems
|
|
148
|
+
- Nodata handling in raster arithmetic
|
|
149
|
+
- Date parsing for various timestamp formats
|
|
150
|
+
|
|
151
|
+
### Dependencies
|
|
152
|
+
- Minimum numpy version: 1.21.0
|
|
153
|
+
- Minimum rasterio version: 1.2.0
|
|
154
|
+
- Optional: `pyvista[jupyter]` for 3D terrain
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## [1.9.0] — 2026-04-25
|
|
159
|
+
|
|
160
|
+
### Added
|
|
161
|
+
- Initial public release
|
|
162
|
+
- Core geospatial processing capabilities
|
|
163
|
+
- Multi-provider data search and download
|
|
164
|
+
- Basic SAR processing workflow
|
|
165
|
+
- Spectral index calculation suite
|
|
166
|
+
- Cloud-optimized GeoTIFF support
|
|
167
|
+
- Documentation and examples
|
|
168
|
+
- CI/CD pipeline with tests
|
|
169
|
+
- PyPI package distribution
|
|
170
|
+
|
|
171
|
+
### Providers
|
|
172
|
+
- Copernicus Dataspace
|
|
173
|
+
- AWS Earth
|
|
174
|
+
- Planetary Computer
|
|
175
|
+
- USGS Earth Explorer
|
|
176
|
+
|
|
177
|
+
### Features
|
|
178
|
+
- Search by polygon, date range, and cloud cover
|
|
179
|
+
- Download with progress tracking
|
|
180
|
+
- Reprojection and resampling
|
|
181
|
+
- Raster arithmetic and band math
|
|
182
|
+
- Time series analysis
|
|
183
|
+
- Visualization tools
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Summary of All Versions
|
|
188
|
+
|
|
189
|
+
| Version | Date | Key Changes |
|
|
190
|
+
|---------|------------|-------------|
|
|
191
|
+
| **1.9.4** | 2026-07-29 | SNAPHU unwrapping fixes, 87.1% reliable pixels |
|
|
192
|
+
| **1.9.4** | 2026-07-12 | 22 providers, 17 indices, Sentinel-1C/D |
|
|
193
|
+
| **1.9.2** | 2026-06-15 | Batch processing, parallel downloads |
|
|
194
|
+
| **1.9.1** | 2026-05-20 | 3D terrain, SNAPHU integration, time series |
|
|
195
|
+
| **1.9.0** | 2026-04-25 | Initial public release |
|