geodaten
geodaten downloads spatial and temporal subsets of global geospatial datasets through one Python API, CLI, Textual TUI, or QtPy GUI.
The package streams source assets, stages one logical raster slice at a time, and writes only these final formats:
tif: one single-band Cloud Optimized GeoTIFF for each requested variable/time combination, mosaicked over the complete requested extent.netcdf: exactly one compressed NetCDF4 file for the complete request, written block by block and markedCF-1.13.
Credentials are always supplied by the user through environment variables, an SDK's own configuration, the Python request, or a masked UI prompt. They are never written to filenames, logs, or manifests.
Supported datasets
| ID | Dataset family | Access |
|---|---|---|
soilgrids |
ISRIC SoilGrids | Public |
srtm |
NASA SRTMGL1 v3 | NASA Earthdata account |
glc_fcs30d |
GLC_FCS30D v2 land cover | Public Zenodo archive |
gimms_lai4g |
GIMMS LAI4g v1.2 | Public Zenodo archive |
modis_lai |
MODIS LAI/FPAR C6.1 | NASA Earthdata account |
copernicus_lai |
Copernicus Global Land LAI 300 m v2 | Copernicus Data Space account |
nex_gddp_cmip6 |
NASA NEX-GDDP-CMIP6 | Public cloud archive |
ifs_fesom |
DestinE IFS-FESOM climate simulations | DestinE account |
Run geodaten info DATASET for its variables, provider options, credential environment names, source, citation, and license.
Installation
Python 3.12 or newer and the GDAL command-line programs (gdalinfo, gdal_translate, gdalbuildvrt, and gdalwarp) are required. Install the core package from this checkout with:
python -m pip install -e .
Install only the adapters and interfaces you use:
python -m pip install -e ".[zenodo]" # GLC_FCS30D and GIMMS
python -m pip install -e ".[earthdata]" # SRTM and MODIS
python -m pip install -e ".[cdse]" # Copernicus LAI
python -m pip install -e ".[destine]" # IFS-FESOM
python -m pip install -e ".[tui]"
python -m pip install -e ".[gui-pyside6]"
For every optional adapter and interface, use python -m pip install -e ".[all,gui-pyside6]". Check the current machine with geodaten doctor.
CLI
Discover a dataset before starting a large request:
geodaten datasets
geodaten info srtm
geodaten plan srtm --bbox 5 47 15 55 -v elevation --format tif
Then run the same request as a download:
geodaten download srtm \
--bbox 5 47 15 55 \
-v elevation \
--format tif \
--output ./data
Temporal datasets additionally accept inclusive --start and --end values. Repeat -v for multiple variables and pass adapter-specific settings as -O KEY=VALUE; comma-separate values for a multi-value option. WEST > EAST represents an antimeridian-crossing bounding box where the selected source supports such a crop; plan reports a clear error otherwise.
Credentials are normally read from the environment or the source SDK's user configuration. Add --prompt-credentials to enter missing values without echoing secrets:
geodaten download modis_lai \
--bbox 5 47 15 55 \
--start 2024-01-01 --end 2024-01-31 \
-v lai --prompt-credentials
Use --allow-partial only when an incomplete source coverage is acceptable. Existing validated outputs are reused unless --overwrite is set. A temporal request containing literal latest deliberately refreshes discovery and outputs; use explicit dates for reproducible resume. --workers is a provider concurrency hint, currently used mainly to size connection pools; a provider may still run safely in sequence.
Python API
from pathlib import Path
from geodaten import BBox, DownloadRequest, DownloadService, OutputFormat
request = DownloadRequest(
dataset="srtm",
bbox=BBox(west=5, south=47, east=15, north=55),
variables=("elevation",),
output_format=OutputFormat.TIF,
output_dir=Path("data"),
)
service = DownloadService()
plan = service.plan(request)
result = service.download(request)
print(result.outputs, result.manifest)
For a credentialed adapter, pass only your own values in credentials={...}. The accepted keys are listed by geodaten info DATASET. The exported CancellationToken and ProgressCallback can be supplied to download() by long-running applications.
TUI and GUI
geodaten-tui
geodaten-gui
Both interfaces collect the dataset, variables, WGS84 extent, dates, output format/directory, a provider worker hint, provider options, and user credentials. The hint does not guarantee parallel execution. The GUI controller uses QtPy and loads the packaged Qt Designer file at geodaten/gui/download.ui; the gui-pyside6 extra supplies the default Qt binding.
Output layout and large requests
Each request is stored below OUTPUT/DATASET/FINGERPRINT/ with a credential-free manifest.json. The fingerprint makes retries deterministic while excluding credentials, worker hints, cache locations, and output paths. Files are first written to a temporary path and atomically moved into place only after validation.
Raster transfers and conversions use streaming I/O and GDAL virtual rasters. NetCDF data are compressed and appended in bounded raster windows, so memory use is based on a processing block rather than the complete spatial/temporal cube. --cache selects a staging location; adapters such as MODIS reuse validated source assets, while request scratch data and incomplete NetCDF files are deliberately removed. A retry reuses an exact, validated complete TIFF set without restaging provider data. Without --overwrite, a partial TIFF retry may repeat provider staging but never overwrites already validated completed slices. Source services may still impose request-size, rate, date-range, or account limits, so use plan before large jobs.
Development
python -m pytest -q
python -m build
Tests mock remote catalogs and authentication. Live downloads are intentionally not required, because users must provide and authorize their own service accounts.
Release files for geodaten 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| geodaten-0.1.0.tar.gz | 105.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geodaten-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 205.1 kB
Release files / geodaten-0.1.0.tar.gz
| Download URL | geodaten-0.1.0.tar.gz |
|---|---|
| Size | 105.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cbfb1e3ab00aa8751cd6cf23d5d4ccaa5609857384888a9fca8c0f4276304086
|
|
BLAKE2b-256 checksum How to use checksums |
ea8e745530a0ea8a8654953911472ead766ec8cb982e0a70f7ae8198f1f177c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / geodaten-0.1.0-py3-none-any.whl
| Download URL | geodaten-0.1.0-py3-none-any.whl |
|---|---|
| Size | 100.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b5abcdb9bf891b0c855e4c86138d34a909902c8fc13c7266c93923593a6f05d6
|
|
BLAKE2b-256 checksum How to use checksums |
3b0b79a9993f678eec44c26688f720369563bf18e79fead03334afd532449376
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|