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.
Files changed (141) hide show
  1. pygeofetch-1.9.4/CHANGELOG.md +195 -0
  2. {pygeofetch-1.9.2/pygeofetch.egg-info → pygeofetch-1.9.4}/PKG-INFO +279 -85
  3. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/README.md +268 -75
  4. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/__init__.py +1 -1
  5. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/downloader.py +80 -25
  6. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/__init__.py +37 -2
  7. pygeofetch-1.9.4/pygeofetch/insar/annotation.py +461 -0
  8. pygeofetch-1.9.4/pygeofetch/insar/atmosphere.py +555 -0
  9. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/coregister.py +105 -32
  10. pygeofetch-1.9.4/pygeofetch/insar/deburst.py +191 -0
  11. pygeofetch-1.9.4/pygeofetch/insar/esd.py +282 -0
  12. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/extraction.py +124 -1
  13. pygeofetch-1.9.4/pygeofetch/insar/flatearth.py +243 -0
  14. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/interferogram.py +544 -7
  15. pygeofetch-1.9.4/pygeofetch/insar/ionosphere.py +675 -0
  16. pygeofetch-1.9.4/pygeofetch/insar/splitspectrum_diagnostic.py +171 -0
  17. pygeofetch-1.9.4/pygeofetch/insar/synthetic.py +391 -0
  18. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/timeseries.py +73 -46
  19. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/unwrap.py +249 -0
  20. pygeofetch-1.9.4/pygeofetch/insar/workflow.py +282 -0
  21. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/meta.yaml +1 -1
  22. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/airbus_oneatlas.py +10 -0
  23. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/alaska_satellite_facility.py +10 -0
  24. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/aws_earth.py +5 -2
  25. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/copernicus.py +30 -10
  26. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/digitalglobe.py +10 -0
  27. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/earth_explorer_additional.py +10 -0
  28. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/element84.py +13 -2
  29. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/eodag_provider.py +26 -3
  30. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/esa_scihub.py +10 -0
  31. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/geoserver_generic.py +10 -0
  32. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/google_earth_engine.py +10 -0
  33. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/inpe_cbers.py +10 -0
  34. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/isro_bhuvan.py +12 -2
  35. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/jaxa_earth.py +10 -0
  36. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/maxar_gbdx.py +10 -0
  37. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/nasa_earthdata.py +36 -1
  38. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/nasa_earthdata_cloud.py +3 -2
  39. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/noaa_big_data.py +10 -0
  40. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/planet.py +1 -0
  41. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/planetary_computer.py +5 -2
  42. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/sentinel_hub.py +5 -4
  43. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/terrabotics.py +8 -0
  44. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/usgs.py +2 -1
  45. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/viz/map.py +101 -2
  46. {pygeofetch-1.9.2 → pygeofetch-1.9.4/pygeofetch.egg-info}/PKG-INFO +279 -85
  47. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/SOURCES.txt +22 -0
  48. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/requires.txt +7 -5
  49. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pyproject.toml +32 -12
  50. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/setup.cfg +1 -1
  51. pygeofetch-1.9.4/tests/test_atmospheric_circular_regression.py +104 -0
  52. pygeofetch-1.9.4/tests/test_burst_metadata.py +116 -0
  53. pygeofetch-1.9.4/tests/test_burst_processing_integration.py +166 -0
  54. pygeofetch-1.9.4/tests/test_era5_atmospheric_correction.py +92 -0
  55. pygeofetch-1.9.4/tests/test_flat_earth_phase.py +162 -0
  56. pygeofetch-1.9.4/tests/test_gcp_reprojection.py +129 -0
  57. pygeofetch-1.9.4/tests/test_ionosphere.py +387 -0
  58. pygeofetch-1.9.4/tests/test_models.py +146 -0
  59. pygeofetch-1.9.4/tests/test_provider_geometry_audit (1).py +200 -0
  60. pygeofetch-1.9.4/tests/test_provider_geometry_audit.py +177 -0
  61. pygeofetch-1.9.4/tests/test_provider_scene_disambiguation.py +115 -0
  62. pygeofetch-1.9.4/tests/test_providers.py +88 -0
  63. pygeofetch-1.9.4/tests/test_search_download.py +126 -0
  64. pygeofetch-1.9.4/tests/test_splitspectrum_diagnostic.py +106 -0
  65. pygeofetch-1.9.4/tests/test_utils.py +186 -0
  66. pygeofetch-1.9.2/CHANGELOG.md +0 -42
  67. pygeofetch-1.9.2/pygeofetch/insar/annotation.py +0 -184
  68. pygeofetch-1.9.2/pygeofetch/insar/atmosphere.py +0 -308
  69. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/LICENSE +0 -0
  70. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/MANIFEST.in +0 -0
  71. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/__init__.py +0 -0
  72. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/auth_commands.py +0 -0
  73. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/config_commands.py +0 -0
  74. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/download_commands.py +0 -0
  75. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/index_commands.py +0 -0
  76. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/main.py +0 -0
  77. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/pipeline_process_commands.py +0 -0
  78. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/postprocess_commands.py +0 -0
  79. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/preprocess_commands.py +0 -0
  80. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/sar_commands.py +0 -0
  81. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/cli/search_commands.py +0 -0
  82. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/config/__init__.py +0 -0
  83. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/config/defaults.yaml +0 -0
  84. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/config/settings.py +0 -0
  85. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/__init__.py +0 -0
  86. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/authenticator.py +0 -0
  87. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/cache_manager.py +0 -0
  88. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/engine.py +0 -0
  89. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/logging.py +0 -0
  90. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/orbits.py +0 -0
  91. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/scheduler.py +0 -0
  92. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/core/searcher.py +0 -0
  93. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/geolocation.py +0 -0
  94. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/gpu.py +0 -0
  95. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/validate.py +0 -0
  96. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/insar/visualize.py +0 -0
  97. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/__init__.py +0 -0
  98. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/download_task.py +0 -0
  99. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/satellite_data.py +0 -0
  100. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/search_query.py +0 -0
  101. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/models/user_auth.py +0 -0
  102. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/__init__.py +0 -0
  103. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/base.py +0 -0
  104. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/batch.py +0 -0
  105. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/indices.py +0 -0
  106. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/pipeline.py +0 -0
  107. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/postprocessor.py +0 -0
  108. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/preprocessor.py +0 -0
  109. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processing/sar.py +0 -0
  110. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/__init__.py +0 -0
  111. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/indices.py +0 -0
  112. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/landsat.py +0 -0
  113. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/loader.py +0 -0
  114. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/stacker.py +0 -0
  115. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/processor/timeseries.py +0 -0
  116. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/__init__.py +0 -0
  117. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/base.py +0 -0
  118. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/providers/opentopography.py +0 -0
  119. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/__init__.py +0 -0
  120. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/_native.py +0 -0
  121. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/_ost.py +0 -0
  122. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/_sarxarray.py +0 -0
  123. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/extraction.py +0 -0
  124. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/sar/processor.py +0 -0
  125. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/__init__.py +0 -0
  126. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/file_utils.py +0 -0
  127. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/gcp_recovery.py +0 -0
  128. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/geo_utils.py +0 -0
  129. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/logging_setup.py +0 -0
  130. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/retry_handler.py +0 -0
  131. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/utils/validators.py +0 -0
  132. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/viz/__init__.py +0 -0
  133. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch/viz/plot.py +0 -0
  134. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/dependency_links.txt +0 -0
  135. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/entry_points.txt +0 -0
  136. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/not-zip-safe +0 -0
  137. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/pygeofetch.egg-info/top_level.txt +0 -0
  138. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_extraction.py +0 -0
  139. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_insar.py +0 -0
  140. {pygeofetch-1.9.2 → pygeofetch-1.9.4}/tests/test_pgv_integration_contract.py +0 -0
  141. {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 |