PyGeoFetch 1.0.7__tar.gz → 1.0.9__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.0.9/CHANGELOG.md +42 -0
- pygeofetch-1.0.9/MANIFEST.in +11 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/PKG-INFO +92 -92
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/README.md +91 -91
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/__init__.py +2 -2
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/main.py +2 -2
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/downloader.py +76 -37
- pygeofetch-1.0.9/pygeofetch/meta.yaml +62 -0
- pygeofetch-1.0.9/pygeofetch/processing/base.py +315 -0
- pygeofetch-1.0.9/pygeofetch/processing/indices.py +685 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/processing/preprocessor.py +23 -7
- pygeofetch-1.0.9/pygeofetch/processing/sar.py +336 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/PKG-INFO +92 -92
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/SOURCES.txt +3 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pyproject.toml +1 -1
- pygeofetch-1.0.7/pygeofetch/processing/base.py +0 -102
- pygeofetch-1.0.7/pygeofetch/processing/indices.py +0 -777
- pygeofetch-1.0.7/pygeofetch/processing/sar.py +0 -315
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/LICENSE +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/auth_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/config_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/download_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/index_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/pipeline_process_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/postprocess_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/preprocess_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/sar_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/cli/search_commands.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/config/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/config/defaults.yaml +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/config/settings.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/authenticator.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/cache_manager.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/engine.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/logging.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/orbits.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/scheduler.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/core/searcher.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/models/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/models/download_task.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/models/satellite_data.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/models/search_query.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/models/user_auth.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/processing/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/processing/batch.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/processing/pipeline.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/processing/postprocessor.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/airbus_oneatlas.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/alaska_satellite_facility.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/aws_earth.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/base.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/copernicus.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/digitalglobe.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/earth_explorer_additional.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/element84.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/esa_scihub.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/geoserver_generic.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/google_earth_engine.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/inpe_cbers.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/isro_bhuvan.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/jaxa_earth.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/maxar_gbdx.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/nasa_earthdata.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/nasa_earthdata_cloud.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/noaa_big_data.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/opentopography.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/planet.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/planetary_computer.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/sentinel_hub.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/terrabotics.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/providers/usgs.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/utils/__init__.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/utils/file_utils.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/utils/geo_utils.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/utils/logging_setup.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/utils/retry_handler.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch/utils/validators.py +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/dependency_links.txt +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/entry_points.txt +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/not-zip-safe +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/requires.txt +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/pygeofetch.egg-info/top_level.txt +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/setup.cfg +0 -0
- {pygeofetch-1.0.7 → pygeofetch-1.0.9}/tests/test_pgv_integration_contract.py +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to PyGeoFetch are documented here.
|
|
4
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.9/).
|
|
5
|
+
|
|
6
|
+
## [1.0.9] — 2026-07-12
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- Federated search across 22+ satellite data providers
|
|
10
|
+
- Sentinel-1C and Sentinel-1D constellation support (active since May/April 2026)
|
|
11
|
+
- SLC product type search with automatic provider routing
|
|
12
|
+
- Precise orbit file management (POEORB/RESORB) for InSAR workflows
|
|
13
|
+
- 17 spectral indices: NDVI, EVI, SAVI, NDWI, MNDWI, NDBI, NDSI, NDMI,
|
|
14
|
+
NBR, dNBR, TCT, PCA, Texture, LST, Albedo, Band Math, Stack
|
|
15
|
+
- SAR processing: despeckle, calibrate, flood mapping, coherence
|
|
16
|
+
- 41-step chainable processing pipeline builder
|
|
17
|
+
- YAML pipeline definitions with cron scheduling
|
|
18
|
+
- Cloud Optimized GeoTIFF output
|
|
19
|
+
- Clean search result tables with ANSI-aware column alignment
|
|
20
|
+
- Live download progress with Jupyter notebook HTML widget support
|
|
21
|
+
- Credential redaction in all log output
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- AuthManager.add_credentials() now accepts dict form (BUG 1)
|
|
25
|
+
- download() length/order contract guaranteed (BUG 2)
|
|
26
|
+
- Partial downloads detected via file validation (BUG 3)
|
|
27
|
+
- CRS identity transform detection after reprojection (BUG 4)
|
|
28
|
+
- resolve_band_keys missing import in aws_earth provider
|
|
29
|
+
- Band alias conflict between Sentinel-2 and Landsat naming conventions
|
|
30
|
+
- Copernicus product_type OData filter now correctly applied
|
|
31
|
+
- USGS M2M API authentication payload (authType, catalogId fields)
|
|
32
|
+
- ZIP archive validation no longer attempts rasterio open on archives
|
|
33
|
+
|
|
34
|
+
### Providers
|
|
35
|
+
- Copernicus Dataspace (Sentinel-1/2/3/5P, SLC + GRD)
|
|
36
|
+
- AWS Earth (Sentinel-2, Landsat via STAC)
|
|
37
|
+
- Planetary Computer (Sentinel-2, Landsat, MODIS)
|
|
38
|
+
- Element84 Earth Search (STAC)
|
|
39
|
+
- USGS Earth Explorer (Landsat 1-9, ASTER, SRTM)
|
|
40
|
+
- NASA Earthdata (MODIS, ICESat-2, GEDI)
|
|
41
|
+
- Alaska SAR Facility (Sentinel-1 SLC, ALOS PALSAR)
|
|
42
|
+
- Planet Labs, Sentinel Hub, Maxar, Airbus, OpenTopography and more
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
include README.md
|
|
2
|
+
include LICENSE
|
|
3
|
+
include CHANGELOG.md
|
|
4
|
+
include pyproject.toml
|
|
5
|
+
recursive-include pygeofetch *.py *.yaml *.typed
|
|
6
|
+
recursive-exclude * __pycache__
|
|
7
|
+
recursive-exclude * *.pyc
|
|
8
|
+
recursive-exclude * *.pyo
|
|
9
|
+
exclude tests
|
|
10
|
+
exclude notebooks
|
|
11
|
+
exclude docs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygeofetch
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.9
|
|
4
4
|
Summary: Universal satellite data pipeline — unified access to 22+ providers
|
|
5
5
|
Author: PyGeoFetch Contributors
|
|
6
6
|
License: MIT License
|
|
@@ -85,9 +85,9 @@ Dynamic: license-file
|
|
|
85
85
|
|
|
86
86
|
<div align="center">
|
|
87
87
|
|
|
88
|
-
<!-- <img src="https://appiahkubis14.github.io/portfolio/logo/samuel_logo_dark.svg" alt="
|
|
88
|
+
<!-- <img src="https://appiahkubis14.github.io/portfolio/logo/samuel_logo_dark.svg" alt="pygeofetch Logo" width="200"/> -->
|
|
89
89
|
|
|
90
|
-
#
|
|
90
|
+
# pygeofetch 🛰️
|
|
91
91
|
|
|
92
92
|
[](https://pypi.org/project/pygeofetch/)
|
|
93
93
|
[](https://pypi.org/project/pygeofetch/)
|
|
@@ -103,9 +103,9 @@ Dynamic: license-file
|
|
|
103
103
|
|
|
104
104
|
## 📖 Introduction
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
pygeofetch is a **production-ready satellite data acquisition and processing framework** that provides unified, authenticated access to 22+ Earth observation repositories — including Sentinel, Landsat, Planet, Maxar, Airbus, Copernicus, USGS, NASA, JAXA, and more — through a single consistent CLI and Python API.
|
|
107
107
|
|
|
108
|
-
The package abstracts away the authentication complexity, API fragmentation, and format inconsistencies of individual satellite providers, and adds a complete geospatial processing engine on top.
|
|
108
|
+
The package abstracts away the authentication complexity, API fragmentation, and format inconsistencies of individual satellite providers, and adds a complete geospatial processing engine on top. pygeofetch provides six core capabilities:
|
|
109
109
|
|
|
110
110
|
1. **Authenticated access** to 22+ providers, with secure credential storage via system keyring (macOS Keychain, Windows Credential Manager, Linux Secret Service).
|
|
111
111
|
2. **Unified federated search** across all providers, returning standardized STAC 1.0 GeoJSON, GeoParquet, or CSV results sortable by cloud cover, date, or relevance score.
|
|
@@ -122,7 +122,7 @@ Accessing satellite data at scale is surprisingly fragmented. Each provider —
|
|
|
122
122
|
|
|
123
123
|
Existing tools address parts of this problem: EODAG supports several providers but lacks pipeline orchestration and commercial coverage; `pystac-client` handles STAC-compliant endpoints only; `sentinelsat` is Sentinel-specific. No single tool covers the full breadth of providers, processing, and automation needed for operational geospatial workflows.
|
|
124
124
|
|
|
125
|
-
| Feature |
|
|
125
|
+
| Feature | pygeofetch | EODAG | pystac-client | satpy | sentinelsat |
|
|
126
126
|
|---|---|---|---|---|---|
|
|
127
127
|
| **Providers** | **22+** | 10+ | STAC only | Limited | Sentinel only |
|
|
128
128
|
| **Processing Engine** | ✅ Full | ❌ | ❌ | Partial | ❌ |
|
|
@@ -233,26 +233,26 @@ Existing tools address parts of this problem: EODAG supports several providers b
|
|
|
233
233
|
|
|
234
234
|
```bash
|
|
235
235
|
# Core — free providers work immediately, no extras needed
|
|
236
|
-
pip install
|
|
236
|
+
pip install pygeofetch
|
|
237
237
|
|
|
238
238
|
# + Raster/vector processing (rasterio, geopandas, shapely)
|
|
239
|
-
pip install "
|
|
239
|
+
pip install "pygeofetch[geo]"
|
|
240
240
|
|
|
241
241
|
# + Cloud provider S3 access
|
|
242
|
-
pip install "
|
|
242
|
+
pip install "pygeofetch[cloud]"
|
|
243
243
|
|
|
244
244
|
# + Cron scheduling
|
|
245
|
-
pip install "
|
|
245
|
+
pip install "pygeofetch[schedule]"
|
|
246
246
|
|
|
247
247
|
# Everything
|
|
248
|
-
pip install "
|
|
248
|
+
pip install "pygeofetch[all]"
|
|
249
249
|
```
|
|
250
250
|
|
|
251
251
|
**Requirements:** Python 3.9+
|
|
252
252
|
|
|
253
253
|
Verify your installation:
|
|
254
254
|
```bash
|
|
255
|
-
|
|
255
|
+
pygeofetch doctor
|
|
256
256
|
# ✓ Python 3.11 ✓ httpx ✓ pydantic ✓ rich
|
|
257
257
|
# ✓ AWS Earth Search: HTTP 200
|
|
258
258
|
# ✓ Planetary Computer: HTTP 200
|
|
@@ -267,12 +267,12 @@ PyGeoFetch doctor
|
|
|
267
267
|
|
|
268
268
|
```bash
|
|
269
269
|
# Add credentials (free providers need no credentials at all)
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
270
|
+
pygeofetch auth add usgs --username USER --password PASS
|
|
271
|
+
pygeofetch auth add copernicus --username email@example.com --password PASS
|
|
272
|
+
pygeofetch auth add planet --api-key YOUR_KEY
|
|
273
273
|
|
|
274
274
|
# Search (free — no login)
|
|
275
|
-
|
|
275
|
+
pygeofetch search run \
|
|
276
276
|
--bbox "-74.1,40.6,-73.7,40.9" \
|
|
277
277
|
--start-date 2024-01-01 \
|
|
278
278
|
--cloud-cover 0-15 \
|
|
@@ -281,7 +281,7 @@ PyGeoFetch search run \
|
|
|
281
281
|
--output results.geojson
|
|
282
282
|
|
|
283
283
|
# Download with band selection
|
|
284
|
-
|
|
284
|
+
pygeofetch download run \
|
|
285
285
|
--from-search results.geojson \
|
|
286
286
|
--output ./data/ \
|
|
287
287
|
--parallel 4 \
|
|
@@ -289,7 +289,7 @@ PyGeoFetch download run \
|
|
|
289
289
|
--max-items 3
|
|
290
290
|
|
|
291
291
|
# Download with full post-processing chain
|
|
292
|
-
|
|
292
|
+
pygeofetch download run \
|
|
293
293
|
--from-search results.geojson \
|
|
294
294
|
--output ./data/ \
|
|
295
295
|
--parallel 4 \
|
|
@@ -301,11 +301,11 @@ PyGeoFetch download run \
|
|
|
301
301
|
|
|
302
302
|
```python
|
|
303
303
|
from pathlib import Path
|
|
304
|
-
from pygeofetch import
|
|
304
|
+
from pygeofetch import pygeofetch
|
|
305
305
|
from pygeofetch.models.search_query import SearchQuery, BoundingBox
|
|
306
306
|
from pygeofetch.models.download_task import DownloadOptions
|
|
307
307
|
|
|
308
|
-
client =
|
|
308
|
+
client = pygeofetch()
|
|
309
309
|
|
|
310
310
|
# Credentials
|
|
311
311
|
client.add_credentials("usgs", username="user", password="pass")
|
|
@@ -400,18 +400,18 @@ steps:
|
|
|
400
400
|
|
|
401
401
|
```bash
|
|
402
402
|
# Validate without running
|
|
403
|
-
|
|
403
|
+
pygeofetch proc-pipeline validate weekly-sentinel2.yaml
|
|
404
404
|
|
|
405
405
|
# Run once
|
|
406
|
-
|
|
406
|
+
pygeofetch proc-pipeline run weekly-sentinel2.yaml --input scene.tif
|
|
407
407
|
|
|
408
408
|
# Schedule (recurring)
|
|
409
|
-
|
|
409
|
+
pygeofetch pipeline schedule weekly-sentinel2.yaml --name "ndvi-weekly"
|
|
410
410
|
|
|
411
411
|
# Generate a starter template
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
412
|
+
pygeofetch proc-pipeline template ndvi
|
|
413
|
+
pygeofetch proc-pipeline template flood_map
|
|
414
|
+
pygeofetch proc-pipeline template change_detection
|
|
415
415
|
```
|
|
416
416
|
|
|
417
417
|
---
|
|
@@ -420,25 +420,25 @@ PyGeoFetch proc-pipeline template change_detection
|
|
|
420
420
|
|
|
421
421
|
```
|
|
422
422
|
SYSTEM
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
423
|
+
pygeofetch doctor diagnose installation + connectivity
|
|
424
|
+
pygeofetch status [--json] provider and cache overview
|
|
425
|
+
pygeofetch version
|
|
426
426
|
|
|
427
427
|
AUTH
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
428
|
+
pygeofetch auth add PROVIDER [--username U] [--password P] [--api-key K]
|
|
429
|
+
pygeofetch auth login PROVIDER interactive prompt
|
|
430
|
+
pygeofetch auth list [--json]
|
|
431
|
+
pygeofetch auth test PROVIDER
|
|
432
|
+
pygeofetch auth remove PROVIDER [--yes]
|
|
433
|
+
pygeofetch auth export [--output FILE]
|
|
434
434
|
|
|
435
435
|
PROVIDERS
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
436
|
+
pygeofetch providers list [--auth|--no-auth] [--capabilities sar] [--json]
|
|
437
|
+
pygeofetch providers info PROVIDER
|
|
438
|
+
pygeofetch providers search "TERM"
|
|
439
439
|
|
|
440
440
|
SEARCH
|
|
441
|
-
|
|
441
|
+
pygeofetch search run \
|
|
442
442
|
--bbox "minlon,minlat,maxlon,maxlat" or --geometry-file area.geojson
|
|
443
443
|
--start-date YYYY-MM-DD --end-date YYYY-MM-DD
|
|
444
444
|
--cloud-cover 0-20
|
|
@@ -452,7 +452,7 @@ SEARCH
|
|
|
452
452
|
--no-cache --timeout 60
|
|
453
453
|
|
|
454
454
|
DOWNLOAD
|
|
455
|
-
|
|
455
|
+
pygeofetch download run \
|
|
456
456
|
--from-search results.geojson
|
|
457
457
|
--output ./data/
|
|
458
458
|
--parallel 4 --retry 5
|
|
@@ -466,72 +466,72 @@ DOWNLOAD
|
|
|
466
466
|
--json
|
|
467
467
|
|
|
468
468
|
PREPROCESSING
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
469
|
+
pygeofetch preprocess atmos scene.tif --method dos1|sen2cor|flaash|6s
|
|
470
|
+
pygeofetch preprocess cloud-mask scene.tif --method scl|fmask|threshold
|
|
471
|
+
pygeofetch preprocess cloud-fill cloudy.tif t1.tif t2.tif
|
|
472
|
+
pygeofetch preprocess topo-correct scene.tif dem.tif --method cosine
|
|
473
|
+
pygeofetch preprocess clip scene.tif --bbox "..." | --geometry file.geojson
|
|
474
|
+
pygeofetch preprocess reproject scene.tif --crs EPSG:4326
|
|
475
|
+
pygeofetch preprocess resample scene.tif --resolution 30
|
|
476
|
+
pygeofetch preprocess pansharpen pan.tif ms.tif --method brovey
|
|
477
|
+
pygeofetch preprocess mosaic s1.tif s2.tif --method first|last|min|max
|
|
478
|
+
pygeofetch preprocess composite *.tif --method median|mean|max|best_pixel
|
|
479
|
+
pygeofetch preprocess tile scene.tif --tile-size 512 --overlap 64
|
|
480
480
|
|
|
481
481
|
SPECTRAL INDICES
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
482
|
+
pygeofetch index ndvi --red B04.tif --nir B08.tif
|
|
483
|
+
pygeofetch index evi --blue B02.tif --red B04.tif --nir B08.tif
|
|
484
|
+
pygeofetch index savi --red B04.tif --nir B08.tif --soil-l 0.5
|
|
485
|
+
pygeofetch index ndwi --green B03.tif --nir B08.tif
|
|
486
|
+
pygeofetch index mndwi --green B03.tif --swir1 B11.tif
|
|
487
|
+
pygeofetch index ndbi --nir B08.tif --swir1 B11.tif
|
|
488
|
+
pygeofetch index ndsi --green B03.tif --swir1 B11.tif
|
|
489
|
+
pygeofetch index ndmi --nir B08.tif --swir1 B11.tif
|
|
490
|
+
pygeofetch index nbr --nir B08.tif --swir2 B12.tif
|
|
491
|
+
pygeofetch index dnbr --pre-nir B08.tif --pre-swir2 B12.tif \
|
|
492
492
|
--post-nir B08_post.tif --post-swir2 B12_post.tif
|
|
493
|
-
|
|
493
|
+
pygeofetch index tct --blue B02.tif --green B03.tif --red B04.tif \
|
|
494
494
|
--nir B08.tif --swir1 B11.tif --swir2 B12.tif
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
495
|
+
pygeofetch index pca B02.tif B03.tif B04.tif B08.tif --components 3
|
|
496
|
+
pygeofetch index texture B08.tif --window 7 --features contrast,homogeneity
|
|
497
|
+
pygeofetch index lst B10.tif --emissivity 0.97 --sensor landsat8
|
|
498
|
+
pygeofetch index albedo B02.tif B03.tif B04.tif B08.tif B11.tif B12.tif
|
|
499
|
+
pygeofetch index band-math B04.tif B08.tif --expr "(B[1]-B[0])/(B[1]+B[0]+1e-6)"
|
|
500
|
+
pygeofetch index stack B02.tif B03.tif B04.tif
|
|
501
501
|
|
|
502
502
|
POST-PROCESSING
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
503
|
+
pygeofetch post vectorize ndvi.tif --threshold 0.3 --format geojson
|
|
504
|
+
pygeofetch post smooth polygons.geojson --tolerance 0.5
|
|
505
|
+
pygeofetch post regularize buildings.geojson
|
|
506
|
+
pygeofetch post zonal-stats ndvi.tif parcels.geojson --output stats.csv
|
|
507
|
+
pygeofetch post buffer roads.geojson --distance 15
|
|
508
|
+
pygeofetch post centroids polygons.geojson
|
|
509
|
+
pygeofetch post geometry-metrics polygons.geojson
|
|
510
|
+
pygeofetch post compress scene.tif --method lzw|deflate|zstd
|
|
511
|
+
pygeofetch post cog scene.tif --compress deflate --blocksize 512
|
|
512
512
|
|
|
513
513
|
SAR PROCESSING
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
514
|
+
pygeofetch sar despeckle sar.tif --filter lee|enhanced_lee|frost|gamma --window 7
|
|
515
|
+
pygeofetch sar calibrate sar.tif --output-type sigma0|gamma0|beta0 --db
|
|
516
|
+
pygeofetch sar flood-map post.tif --threshold -15 [--reference pre.tif]
|
|
517
|
+
pygeofetch sar coherence slc1.tif slc2.tif --window 7
|
|
518
518
|
|
|
519
519
|
PROCESSING PIPELINES
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
520
|
+
pygeofetch proc-pipeline template ndvi|change_detection|flood_map|urban_mapping|...
|
|
521
|
+
pygeofetch proc-pipeline validate FILE
|
|
522
|
+
pygeofetch proc-pipeline run FILE [--input scene.tif] [--output-dir ./out/]
|
|
523
523
|
|
|
524
524
|
DATA PIPELINES (search + download)
|
|
525
|
-
|
|
525
|
+
pygeofetch pipeline run|validate|schedule|list-scheduled|unschedule|history
|
|
526
526
|
|
|
527
527
|
CACHE
|
|
528
|
-
|
|
528
|
+
pygeofetch cache stats|clear|ttl [show|set N]|location|prune --max-size 1GB
|
|
529
529
|
|
|
530
530
|
CONFIG
|
|
531
|
-
|
|
531
|
+
pygeofetch config show|get KEY|set KEY VALUE|path|reset
|
|
532
532
|
|
|
533
533
|
COMPLETION
|
|
534
|
-
|
|
534
|
+
pygeofetch --install-completion bash|zsh|fish
|
|
535
535
|
```
|
|
536
536
|
|
|
537
537
|
---
|
|
@@ -600,8 +600,8 @@ Contributions of all kinds are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) f
|
|
|
600
600
|
Good first issues include implementing stub providers to full API integrations, improving test coverage, and adding new post-processing actions.
|
|
601
601
|
|
|
602
602
|
```bash
|
|
603
|
-
git clone https://github.com/appiahkubis14/
|
|
604
|
-
cd
|
|
603
|
+
git clone https://github.com/appiahkubis14/pygeofetch
|
|
604
|
+
cd pygeofetch
|
|
605
605
|
pip install -e ".[dev,all]"
|
|
606
606
|
pytest tests/unit/ -v
|
|
607
607
|
```
|
|
@@ -610,6 +610,6 @@ pytest tests/unit/ -v
|
|
|
610
610
|
|
|
611
611
|
## 📄 License
|
|
612
612
|
|
|
613
|
-
|
|
613
|
+
pygeofetch is free and open source software, licensed under the [MIT License](LICENSE).
|
|
614
614
|
|
|
615
|
-
© 2025
|
|
615
|
+
© 2025 pygeofetch Contributors. Part of the **PyGeoVision** platform — [pygeofetch](https://github.com/appiahkubis14/pygeofetch) (data + processing) + [GeoAI](https://opengeoai.org) (AI) = complete Earth observation pipeline.
|