easysnowdata 0.2.0__tar.gz → 0.3.2__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.
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/CHANGELOG.md +64 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/CITATION.cff +2 -2
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/PKG-INFO +108 -67
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/POTENTIAL_DATA_PRODUCTS_SOURCES_AND_EXAMPLES.md +1 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/README.md +105 -65
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/REVAMP_PLAN.md +170 -7
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/__init__.py +13 -23
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/_version.py +2 -2
- easysnowdata-0.3.2/easysnowdata/auth/earthdata.py +324 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/catalog/__init__.py +11 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/catalog/_models.py +28 -3
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/catalog/_registry.py +3 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/catalog/health.py +7 -2
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/catalog/pages.py +85 -38
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/hydro/basins.py +2 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/optical/hls.py +3 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/optical/planetscope.py +70 -14
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/optical/sentinel2.py +1 -1
- easysnowdata-0.3.2/easysnowdata/plotting/__init__.py +974 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/__init__.py +3 -23
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/contract.py +2 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/optical.py +13 -188
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/sar.py +9 -7
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/snow.py +8 -60
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/planet.py +31 -3
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/raster_http.py +29 -2
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/stac.py +4 -1
- easysnowdata-0.3.2/easysnowdata/sar/sentinel1.py +1312 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/modis.py +16 -4
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/snow_classification.py +16 -9
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/viirs.py +6 -5
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/_adapter.py +52 -5
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/_catalog.py +31 -21
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/archive.py +341 -64
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/_common.py +57 -49
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/awdb/awdb_client.py +227 -88
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/cdec/cdec_client.py +193 -130
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/databc/databc_client.py +160 -165
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/nve/nve_client.py +79 -63
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/yukon/yukon_client.py +124 -116
- easysnowdata-0.3.2/easysnowdata/terrain/__init__.py +28 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/terrain/chili.py +2 -2
- easysnowdata-0.3.2/easysnowdata/terrain/dem.py +930 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/pyproject.toml +11 -26
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/scripts/make_montage.py +5 -12
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/scripts/update_readme_status.py +55 -15
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_hydro_basins.py +0 -18
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_land_forest_cover.py +0 -11
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_land_nlcd.py +0 -11
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_snow_classification.py +3 -17
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_snow_mountain_snow_mask.py +0 -13
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_terrain_chili.py +0 -11
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_terrain_dem.py +100 -8
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_theme_common.py +0 -30
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/conftest.py +1 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/fixtures/make_fixtures.py +69 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_adapter.py +2 -2
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_adapter_offline.py +68 -8
- easysnowdata-0.3.2/tests/stations/test_archive.py +482 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_clients_offline.py +45 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_nve_client.py +5 -2
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_auth.py +119 -15
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_catalog.py +10 -3
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_credentials.py +9 -1
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_docs_pages.py +40 -17
- easysnowdata-0.3.2/tests/test_easysnowdata.py +73 -0
- easysnowdata-0.3.2/tests/test_plotting.py +440 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_processing.py +0 -69
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_providers.py +45 -2
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_era5.py +0 -28
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_hls.py +10 -31
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_koppen_geiger.py +0 -27
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_modis.py +3 -67
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_planetscope.py +86 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_sentinel1.py +375 -60
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_sentinel2.py +7 -35
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_snodas.py +0 -30
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_ucla_sr.py +0 -36
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_viirs.py +2 -13
- easysnowdata-0.2.0/easysnowdata/_deprecation.py +0 -152
- easysnowdata-0.2.0/easysnowdata/auth/earthdata.py +0 -191
- easysnowdata-0.2.0/easysnowdata/automatic_weather_stations.py +0 -467
- easysnowdata-0.2.0/easysnowdata/hydroclimatology.py +0 -430
- easysnowdata-0.2.0/easysnowdata/plotting/__init__.py +0 -125
- easysnowdata-0.2.0/easysnowdata/remote_sensing.py +0 -593
- easysnowdata-0.2.0/easysnowdata/sar/sentinel1.py +0 -746
- easysnowdata-0.2.0/easysnowdata/terrain/__init__.py +0 -23
- easysnowdata-0.2.0/easysnowdata/terrain/dem.py +0 -246
- easysnowdata-0.2.0/easysnowdata/topography.py +0 -135
- easysnowdata-0.2.0/easysnowdata/utils.py +0 -454
- easysnowdata-0.2.0/tests/stations/test_archive.py +0 -247
- easysnowdata-0.2.0/tests/stations/test_legacy_shim.py +0 -261
- easysnowdata-0.2.0/tests/test_automatic_weather_stations.py +0 -136
- easysnowdata-0.2.0/tests/test_deprecation.py +0 -100
- easysnowdata-0.2.0/tests/test_easysnowdata.py +0 -51
- easysnowdata-0.2.0/tests/test_hydroclimatology.py +0 -330
- easysnowdata-0.2.0/tests/test_plotting.py +0 -94
- easysnowdata-0.2.0/tests/test_remote_sensing.py +0 -307
- easysnowdata-0.2.0/tests/test_topography.py +0 -138
- easysnowdata-0.2.0/tests/test_utils.py +0 -263
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/.editorconfig +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/.gitignore +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/.pre-commit-config.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/LICENSE +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/WATCHLIST.toml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/_gdal.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/aoi.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/auth/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/auth/_base.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/auth/earthengine.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/auth/nve.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/auth/planet.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/auth/planetary_computer.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/catalog/_access.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/climate/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/climate/era5.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/climate/koppen_geiger.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/config.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/hydro/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/land/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/land/forest_cover.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/land/landcover.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/land/nlcd.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/optical/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/categorical.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/masks.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/processing/wateryear.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/earthdata.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/gee.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/vector_http.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/providers/zarr_cloud.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/sar/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/mountain_snow_mask.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/snodas.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/snow/ucla_sr.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/_frames.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/README.md +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/awdb/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/cdec/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/databc/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/nve/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/clients/yukon/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/stations/networks.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/easysnowdata/temporal.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/scripts/check_data_sources.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/scripts/feedstock_requirements.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/scripts/report_health.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/scripts/watch.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/cassettes/test_recorded/test_cmr_lpcloud_hls_search_is_open.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/cassettes/test_recorded/test_earth_search_sentinel2_search_with_time.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/cassettes/test_recorded/test_health_first_byte_probe_replays.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/cassettes/test_recorded/test_health_stac_probe_replays.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/cassettes/test_recorded/test_planetary_computer_dem_search.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/conftest.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/fixtures/make_fixtures.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/cassettes/test_land_landcover/TestSearchRecorded.test_search_filters_by_version.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/cassettes/test_terrain_dem/TestSearchRecorded.test_search_on_earth_search.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/cassettes/test_terrain_dem/TestSearchRecorded.test_search_returns_tiles.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/conftest.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/make_fixtures.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/static/test_land_landcover.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_awdb_client.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_cdec_client.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_databc_client.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/stations/test_yukon_client.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_aoi.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_config.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_edges.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_feedstock_requirements.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_health_reporting.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_montage.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_recorded.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_temporal.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/test_watch.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/__init__.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/cassettes/test_hls/test_search_cmr_lpcloud_is_open_and_labels_products.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/cassettes/test_hls/test_search_planetary_computer_mirror.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/cassettes/test_sentinel1/test_search_opera_rtc_is_open.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/cassettes/test_sentinel1/test_search_planetary_computer.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/cassettes/test_sentinel2/test_search_earth_search_collection_1.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/cassettes/test_sentinel2/test_search_planetary_computer.yaml +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/conftest.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/fixtures/make_fixtures.py +0 -0
- {easysnowdata-0.2.0 → easysnowdata-0.3.2}/tests/timeseries/test_contract.py +0 -0
|
@@ -6,6 +6,70 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
<!-- insertion marker -->
|
|
9
|
+
## [v0.3.1](https://github.com/egagli/easysnowdata/releases/tag/v0.3.1) - 2026-09-22
|
|
10
|
+
|
|
11
|
+
<small>[Compare with v0.2.0](https://github.com/egagli/easysnowdata/compare/v0.2.0...v0.3.1)</small>
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- fix(planetscope): make a real order work end to end; gallery renders a real scene ([bd25c45](https://github.com/egagli/easysnowdata/commit/bd25c45c4212db5b1a5e212dec2fe295a9f1f5d6) by egagli).
|
|
16
|
+
- fix(archive): open a scheme-less store path as a local store ([d71b0ee](https://github.com/egagli/easysnowdata/commit/d71b0ee753cef56ec9fdc0dc248b85fda202b5b5) by Eric Gagliano).
|
|
17
|
+
- fix(sar): never fuse Sentinel-1 geometries — one raster per relative orbit ([c9fbe53](https://github.com/egagli/easysnowdata/commit/c9fbe53433a9ed8a36edadca1f72cafe67b387d8) by egagli).
|
|
18
|
+
- fix(hls): a failed band read raises instead of filling the Dataset with nodata ([101d97f](https://github.com/egagli/easysnowdata/commit/101d97f5aa482ed74c4185486dbc8a3710c4fb26) by egagli).
|
|
19
|
+
- fix(auth): log in at URS with the netrc for GDAL reads whenever a password exists ([1b7a1a1](https://github.com/egagli/easysnowdata/commit/1b7a1a13a66f3e71288967e41dcc61723dac5922) by egagli).
|
|
20
|
+
- fix(sar): drop the nominal Sentinel-1 heading and the constant 39° incidence angle ([736499e](https://github.com/egagli/easysnowdata/commit/736499e0fcfdef3c1f4bfdc9ea33c5417198806a) by egagli).
|
|
21
|
+
- fix(snow): Terra-only MODIS mosaics from Planetary Computer; real NSIDC-0768 file names ([8bbbdbd](https://github.com/egagli/easysnowdata/commit/8bbbdbdbe6d6c11411c867b07f5d578a672233ec) by egagli).
|
|
22
|
+
- fix(sar): incidence angle from each track's geometry, with the right sign; OPERA reads work ([d12dc9f](https://github.com/egagli/easysnowdata/commit/d12dc9f37684c9dfb73287c08e0c2472f11254f3) by egagli).
|
|
23
|
+
- fix(health): probe Planet through the SDK, send a User-Agent on first-byte probes ([e5aeb82](https://github.com/egagli/easysnowdata/commit/e5aeb82fc28802f3539aaea69c93e3d185b32553) by egagli).
|
|
24
|
+
- fix(stations): finish the transfer — format the clients, relabel the probes, refresh the archive ([fb1bf3e](https://github.com/egagli/easysnowdata/commit/fb1bf3e191e27ee7453e23830a99bd6c85731016) by egagli).
|
|
25
|
+
- fix(deprecation): the shims promised removal in the release they shipped in ([24e93b5](https://github.com/egagli/easysnowdata/commit/24e93b549e928cb6cfabd103b8ae40f9d1581b07) by egagli).
|
|
26
|
+
|
|
27
|
+
## [v0.2.0](https://github.com/egagli/easysnowdata/releases/tag/v0.2.0) - 2026-09-17
|
|
28
|
+
|
|
29
|
+
<small>[Compare with v0.0.26](https://github.com/egagli/easysnowdata/compare/v0.0.26...v0.2.0)</small>
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- fix(live): three real bugs behind the failing live tests, one marker for the fourth ([0cbfafb](https://github.com/egagli/easysnowdata/commit/0cbfafb7821980be9ed7101e1dae5f7d839f8387) by egagli).
|
|
34
|
+
- fix(providers): spell a local zip as /vsizip/ so Windows can open it ([599a296](https://github.com/egagli/easysnowdata/commit/599a296e0d8f6f95bdfa093f0cc8e642233658f3) by egagli).
|
|
35
|
+
- fix(ci): generate the autosummary stubs on a first build, and stop writing COGs in fixtures ([7c3952c](https://github.com/egagli/easysnowdata/commit/7c3952c02f69a88dd978470d54306cd6f2671b95) by egagli).
|
|
36
|
+
- fix(docs): drop the minigallery directive, and keep doctrees out of the site ([e051058](https://github.com/egagli/easysnowdata/commit/e051058dc47f1edf474c3a343c5f30d243dc0173) by egagli).
|
|
37
|
+
- fix(docs): document a re-exported object once, not per module ([10a9b94](https://github.com/egagli/easysnowdata/commit/10a9b94b75ce151c190725c26f2e2de080c35c1a) by egagli).
|
|
38
|
+
- fix(yukon): snowfall is its own type, not precipitation in centimetres ([e89ed0e](https://github.com/egagli/easysnowdata/commit/e89ed0ed3b376b216fd41ab9505f2be0242ae706) by egagli).
|
|
39
|
+
- fix(stations): never rescale a depth of snowfall into a depth of water ([37e8aa8](https://github.com/egagli/easysnowdata/commit/37e8aa84c363935677837cf79a83be51ff2a931a) by egagli).
|
|
40
|
+
- fix(clients): conform get_metadata for one station, emit hPa from Yukon ([defc053](https://github.com/egagli/easysnowdata/commit/defc05342fb1630206cc226aeedb1967b9071a8b) by egagli).
|
|
41
|
+
- fix(awdb): serve TAVG, and prefer it over TOBS for the `temp` type ([87c8ea2](https://github.com/egagli/easysnowdata/commit/87c8ea2d23a9b883cf1997a2ac7903b4d754413f) by egagli).
|
|
42
|
+
- fix(stations): three contract gaps the live tier found ([00560f6](https://github.com/egagli/easysnowdata/commit/00560f6106cf4f6d89722174029a4c379ddb1f1e) by egagli).
|
|
43
|
+
- fix(snow): stream the NSIDC download with iter_content ([ad1473e](https://github.com/egagli/easysnowdata/commit/ad1473e34d45491390e74075d61bc036cf89a670) by Claude).
|
|
44
|
+
- fix(earthaccess): do not treat a half-initialised login as logged in; retry once ([fa5f309](https://github.com/egagli/easysnowdata/commit/fa5f3094dc4c3866a02a14fcbadd4d47e1a6bda1) by egagli).
|
|
45
|
+
- fix(modis): fail fast when GDAL has no HDF4 driver (MOD10A1F) ([f506c13](https://github.com/egagli/easysnowdata/commit/f506c1341943ec1d0bb059d8fae89028baf2adc7) by egagli).
|
|
46
|
+
- fix(yukon): raise on unknown variables and unsupported intervals ([513bc0c](https://github.com/egagli/easysnowdata/commit/513bc0ca93498e16512e52199b1246726211b1e2) by egagli).
|
|
47
|
+
- fix(nve): datetime on hourly records, no silent fallbacks, correct stale docstrings ([c7d499c](https://github.com/egagli/easysnowdata/commit/c7d499c3a4b2d30337e03311b0fe002e7b036551) by egagli).
|
|
48
|
+
- fix(awdb): convert all variables to metric, add datetime to hourly records, validate inputs ([bdcda3c](https://github.com/egagli/easysnowdata/commit/bdcda3c257a315b1839366f533af9304a4e2ec4f) by egagli).
|
|
49
|
+
- fix(cdec): preserve hourly timestamps, clean SWE priority logic, validate inputs ([8a75dbb](https://github.com/egagli/easysnowdata/commit/8a75dbb50c089a50434103000202de17475ef25a) by egagli).
|
|
50
|
+
- fix(databc): wire hourly through get_data, scope negative-value filter, validate interval ([01a1a16](https://github.com/egagli/easysnowdata/commit/01a1a16e10c4f14d3911b43d6b03d5e753d2044f) by egagli).
|
|
51
|
+
- fix: correct Nepal station coordinates via detect-and-override, not exclusion ([e6a3e0b](https://github.com/egagli/easysnowdata/commit/e6a3e0bd10c88bfcba6ab3542004d2e165640d56) by egagli).
|
|
52
|
+
- fix: correct NVE parameter IDs, response parsing, flags — verified live ([fe202a9](https://github.com/egagli/easysnowdata/commit/fe202a97b6065dd96fd7b43ed8a64035101112e6) by egagli).
|
|
53
|
+
- fix: NVE fetch self-diagnoses when /Series matches nothing ([71220bf](https://github.com/egagli/easysnowdata/commit/71220bfcd8a9a0a0ec03f58da9279ac0de84035c) by egagli).
|
|
54
|
+
- fix: NVE Observations 404s — request only series that exist, chunked ([ff0f318](https://github.com/egagli/easysnowdata/commit/ff0f318d8ed3742b77947764392f853c65f4b8f3) by egagli).
|
|
55
|
+
- fix: NVE Observations uses ReferenceTime not StartDate/EndDate ([c4f8aee](https://github.com/egagli/easysnowdata/commit/c4f8aeee52650259aca0f41162cf6433b652487c) by egagli).
|
|
56
|
+
- fix: use correct NVE Observations query param name ([c6b44f5](https://github.com/egagli/easysnowdata/commit/c6b44f5178b8c0de79063f4c69aef30a0a9a386d) by egagli).
|
|
57
|
+
- fix: NVE Observations 400 (date format), 429 (rate limit), begin_date ([18d0a51](https://github.com/egagli/easysnowdata/commit/18d0a515769703c651e4f0a2ca8ae29fe465f856) by egagli).
|
|
58
|
+
- fix: NVE parameters missing when filtering by ParameterId, CI missing API key ([5deee41](https://github.com/egagli/easysnowdata/commit/5deee415a5793ff175f368ca900b3729af3f338d) by egagli).
|
|
59
|
+
- fix: NVE API key auth, Pages permissions, detached HEAD push ([fbbc4d7](https://github.com/egagli/easysnowdata/commit/fbbc4d7a6826ef23c34d8a81357ca1b2c7daeb5b) by egagli).
|
|
60
|
+
- fix awdb metadata adaptive batching ([367639a](https://github.com/egagli/easysnowdata/commit/367639a61ecadd583ff2ed28c41c4b082245820f) by egagli).
|
|
61
|
+
- fix: restore variables_daily for CDEC/DataBC; update README field docs ([8a256ff](https://github.com/egagli/easysnowdata/commit/8a256ff8431be7bde33d346024762c06d55bec4a) by egagli).
|
|
62
|
+
|
|
63
|
+
## [v0.0.26](https://github.com/egagli/easysnowdata/releases/tag/v0.0.26) - 2026-09-15
|
|
64
|
+
|
|
65
|
+
<small>[Compare with v0.0.25](https://github.com/egagli/easysnowdata/compare/v0.0.25...v0.0.26)</small>
|
|
66
|
+
|
|
67
|
+
### Fixed
|
|
68
|
+
|
|
69
|
+
- fix(hydro): read Köppen-Geiger file 61012822 via ndownloader.figshare.com ([e78aece](https://github.com/egagli/easysnowdata/commit/e78aeceb347fb56e625f347fe9f848c8c5739521) by egagli).
|
|
70
|
+
- fix(earthaccess): explicit login, cloud-hosted MOD10A1F, cache dir, UCLA stats index ([a8c2d3e](https://github.com/egagli/easysnowdata/commit/a8c2d3e73a5929a627eac826b750f80f8305223f) by egagli).
|
|
71
|
+
- fix(hydro): fetch GRDC WMO basins with GET into a cache; GET-first health probe ([69ab0e0](https://github.com/egagli/easysnowdata/commit/69ab0e0a49275fdcc7737f53a2ca39f0569af6e6) by egagli).
|
|
72
|
+
|
|
9
73
|
## [v0.0.25](https://github.com/egagli/easysnowdata/releases/tag/v0.0.25) - 2026-08-25
|
|
10
74
|
|
|
11
75
|
<small>[Compare with v0.0.24](https://github.com/egagli/easysnowdata/compare/v0.0.24...v0.0.25)</small>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: easysnowdata
|
|
3
|
-
Version: 0.2
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: A Python package to easily retrieve data relevant to snow science
|
|
5
5
|
Project-URL: Homepage, https://github.com/egagli/easysnowdata
|
|
6
6
|
Project-URL: Documentation, https://egagli.github.io/easysnowdata
|
|
@@ -20,6 +20,7 @@ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
|
|
|
20
20
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
21
21
|
Requires-Python: >=3.12
|
|
22
22
|
Requires-Dist: beautifulsoup4
|
|
23
|
+
Requires-Dist: contextily
|
|
23
24
|
Requires-Dist: dask
|
|
24
25
|
Requires-Dist: earthaccess>=0.17
|
|
25
26
|
Requires-Dist: earthengine-api
|
|
@@ -30,6 +31,7 @@ Requires-Dist: h5netcdf
|
|
|
30
31
|
Requires-Dist: h5py
|
|
31
32
|
Requires-Dist: lxml
|
|
32
33
|
Requires-Dist: matplotlib
|
|
34
|
+
Requires-Dist: matplotlib-scalebar
|
|
33
35
|
Requires-Dist: numpy
|
|
34
36
|
Requires-Dist: odc-geo>=0.5
|
|
35
37
|
Requires-Dist: odc-stac>=0.5
|
|
@@ -47,7 +49,6 @@ Requires-Dist: rasterio>=1.5
|
|
|
47
49
|
Requires-Dist: requests
|
|
48
50
|
Requires-Dist: rioxarray>=0.22
|
|
49
51
|
Requires-Dist: s3fs
|
|
50
|
-
Requires-Dist: scikit-image
|
|
51
52
|
Requires-Dist: shapely>=2
|
|
52
53
|
Requires-Dist: tqdm
|
|
53
54
|
Requires-Dist: xarray>=2026.2
|
|
@@ -90,59 +91,96 @@ and a recovery closes it; latency and DMR++ readiness are on the
|
|
|
90
91
|
[status page](https://egagli.github.io/easysnowdata/status.html).
|
|
91
92
|
|
|
92
93
|
<!-- DATA_STATUS_START -->
|
|
93
|
-
_Last updated: 2026-09-
|
|
94
|
+
_Last updated: 2026-09-22 01:46 UTC_
|
|
94
95
|
_⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the [status page](https://egagli.github.io/easysnowdata/status.html)._
|
|
95
96
|
|
|
96
|
-
|
|
97
|
+
### Stations (`esd.stations`)
|
|
98
|
+
|
|
99
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
97
100
|
| :---------- | :------: | :------: | :------: | :------: |
|
|
98
|
-
| AWDB stations (NRCS REST API) | ✅ |
|
|
99
|
-
| CDEC stations (JSON data servlet) | ✅ |
|
|
100
|
-
| BC snow stations (DataBC WFS) | ✅ |
|
|
101
|
-
| NVE stations (HydAPI) |
|
|
102
|
-
| Yukon stations (AquaCache API) | ✅ |
|
|
103
|
-
|
|
|
104
|
-
| Snow station archive tarball (global_snow_networks) | ✅ |
|
|
105
|
-
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
| HydroBASINS (GEE/HydroATLAS) | ✅ | — | — | — |
|
|
114
|
-
| GRDC major river basins (World Bank) | ✅ | ✅ | ✅ | ✅ |
|
|
115
|
-
| GRDC WMO basins | <abbr title="ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection r">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> |
|
|
116
|
-
| MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | — | — | — |
|
|
117
|
-
| MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | — | — | — |
|
|
101
|
+
| AWDB stations (NRCS REST API) | ✅ | ✅ | — | — |
|
|
102
|
+
| CDEC stations (JSON data servlet) | ✅ | ✅ | — | — |
|
|
103
|
+
| BC snow stations (DataBC WFS) | ✅ | ✅ | — | — |
|
|
104
|
+
| NVE stations (HydAPI) | <abbr title="RuntimeError: Unreachable: HTTP 401">❌</abbr> | ⚠️ | — | — |
|
|
105
|
+
| Yukon stations (AquaCache API) | ✅ | ✅ | — | — |
|
|
106
|
+
| Snow station inventory (global_snow_networks) | ✅ | ✅ | ✅ | ✅ |
|
|
107
|
+
| Snow station archive tarball (global_snow_networks) | ✅ | ✅ | — | — |
|
|
108
|
+
| Snow station CSV (global_snow_networks) | ✅ | ✅ | ✅ | ✅ |
|
|
109
|
+
|
|
110
|
+
### Snow (`esd.snow`)
|
|
111
|
+
|
|
112
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
113
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
114
|
+
| MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | ✅ | — | — |
|
|
115
|
+
| MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | ✅ | — | — |
|
|
118
116
|
| Mountain snow mask (Zenodo) | ✅ | ✅ | ✅ | ✅ |
|
|
119
|
-
| SNODAS (NSIDC G02158) | ✅ |
|
|
117
|
+
| SNODAS (NSIDC G02158) | ✅ | ✅ | — | — |
|
|
120
118
|
| SNODAS (GEE/Climate Engine) | ✅ | ✅ | ✅ | ✅ |
|
|
121
|
-
| Sturm & Liston snow classification (NSIDC-0768) | ✅ |
|
|
119
|
+
| Sturm & Liston snow classification (NSIDC-0768) | ✅ | ✅ | — | — |
|
|
122
120
|
| Sturm & Liston snow classification (Azure) | ✅ | ✅ | ✅ | ✅ |
|
|
123
|
-
| UCLA Snow Reanalysis (NASA NSIDC) | ✅ |
|
|
124
|
-
| HMA Snow Reanalysis (NASA NSIDC) | ✅ |
|
|
125
|
-
| VIIRS snow cover VNP10A1F (NASA NSIDC) | ✅ |
|
|
121
|
+
| UCLA Snow Reanalysis (NASA NSIDC) | ✅ | ✅ | ⚠️ | ⚠️ |
|
|
122
|
+
| HMA Snow Reanalysis (NASA NSIDC) | ✅ | ✅ | — | — |
|
|
123
|
+
| VIIRS snow cover VNP10A1F (NASA NSIDC) | ✅ | ✅ | — | — |
|
|
124
|
+
|
|
125
|
+
### SAR (`esd.sar`)
|
|
126
|
+
|
|
127
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
128
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
129
|
+
| Sentinel-1 RTC (Planetary Computer) | ✅ | ✅ | — | — |
|
|
130
|
+
| Sentinel-1 RTC OPERA (CMR-STAC ASF) | ✅ | ✅ | — | — |
|
|
131
|
+
| Sentinel-1 RTC OPERA (Earth Engine) | ✅ | ✅ | — | — |
|
|
132
|
+
| Sentinel-1 static layers (CMR-STAC ASF) | ✅ | ✅ | — | — |
|
|
133
|
+
| Copernicus DEM for the incidence angle (Planetary Computer) | ✅ | ✅ | — | — |
|
|
134
|
+
| Sentinel-1 GRD angle band (Earth Engine) | ✅ | ✅ | — | — |
|
|
135
|
+
|
|
136
|
+
### Optical imagery (`esd.optical`)
|
|
137
|
+
|
|
138
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
139
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
140
|
+
| HLS L30 (CMR-STAC LPCLOUD) | ✅ | ✅ | — | — |
|
|
141
|
+
| HLS S30 (Planetary Computer) | ✅ | ✅ | — | — |
|
|
142
|
+
| PlanetScope (Planet Data API) | <abbr title="DeprecationWarning: Auth.value has been deprecated.">❌</abbr> | ⚠️ | — | — |
|
|
143
|
+
| Sentinel-2 L2A (Planetary Computer) | ✅ | ✅ | — | — |
|
|
144
|
+
| Sentinel-2 L2A (Earth Search) | ✅ | ✅ | — | — |
|
|
145
|
+
|
|
146
|
+
### Terrain (`esd.terrain`)
|
|
147
|
+
|
|
148
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
149
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
150
|
+
| CHILI (GEE/CSP ERGo) | ✅ | ✅ | ✅ | ✅ |
|
|
151
|
+
| Copernicus DEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
|
|
152
|
+
| Copernicus DEM (Earth Search) | ✅ | ✅ | — | — |
|
|
153
|
+
|
|
154
|
+
### Land cover (`esd.land`)
|
|
155
|
+
|
|
156
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
157
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
126
158
|
| Forest cover fraction (Zenodo) | ✅ | ✅ | ✅ | ✅ |
|
|
127
|
-
| Forest cover fraction (GEE/CGLS-LC100) | ✅ |
|
|
159
|
+
| Forest cover fraction (GEE/CGLS-LC100) | ✅ | ✅ | — | — |
|
|
128
160
|
| ESA WorldCover (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
|
|
129
|
-
| ESA WorldCover (AWS bucket) | ✅ |
|
|
130
|
-
| Annual NLCD (GEE community asset) | ✅ |
|
|
161
|
+
| ESA WorldCover (AWS bucket) | ✅ | ✅ | — | — |
|
|
162
|
+
| Annual NLCD (GEE community asset) | ✅ | ✅ | — | — |
|
|
131
163
|
| NLCD (GEE/USGS) | ✅ | ✅ | ✅ | ✅ |
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
145
|
-
|
|
164
|
+
|
|
165
|
+
### Hydrography (`esd.hydro`)
|
|
166
|
+
|
|
167
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
168
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
169
|
+
| HUC geometries (USGS WBD REST) | ✅ | ✅ | — | — |
|
|
170
|
+
| HUC geometries (GEE/USGS WBD) | ✅ | ✅ | ✅ | ✅ |
|
|
171
|
+
| HydroATLAS basins (figshare) | ✅ | ✅ | ✅ | ✅ |
|
|
172
|
+
| HydroBASINS (HydroSHEDS regional zip) | <abbr title="RuntimeError: Unreachable: HTTP 403">❌</abbr> | ✅ | — | — |
|
|
173
|
+
| HydroBASINS (GEE/HydroATLAS) | ✅ | ✅ | — | — |
|
|
174
|
+
| GRDC major river basins (World Bank) | ✅ | ✅ | ✅ | ✅ |
|
|
175
|
+
| GRDC WMO basins | ✅ | <abbr title="ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection r">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> |
|
|
176
|
+
|
|
177
|
+
### Climate (`esd.climate`)
|
|
178
|
+
|
|
179
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
180
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
181
|
+
| ARCO-ERA5 (GCS anonymous) | ✅ | ✅ | ✅ | ✅ |
|
|
182
|
+
| ERA5 (Google Earth Engine) | ✅ | ✅ | ✅ | ✅ |
|
|
183
|
+
| Köppen-Geiger classification (figshare) | ✅ | ✅ | ✅ | ✅ |
|
|
146
184
|
<!-- DATA_STATUS_END -->
|
|
147
185
|
|
|
148
186
|
## Installation
|
|
@@ -162,10 +200,10 @@ mamba install -c conda-forge easysnowdata
|
|
|
162
200
|
```bash
|
|
163
201
|
git clone https://github.com/egagli/easysnowdata.git
|
|
164
202
|
cd easysnowdata
|
|
165
|
-
pixi install
|
|
166
|
-
pixi run test-unit
|
|
167
|
-
pixi run test-live
|
|
168
|
-
pixi run docs-serve
|
|
203
|
+
pixi install # sets up the environments
|
|
204
|
+
pixi run -e test-py313 test-unit # offline tests (no network, no credentials)
|
|
205
|
+
pixi run -e test-py313 test-live # live tests against the data providers (credentialed ones skip without secrets)
|
|
206
|
+
pixi run -e docs docs-serve # preview the docs locally
|
|
169
207
|
```
|
|
170
208
|
|
|
171
209
|
### Services that require account setup
|
|
@@ -182,18 +220,18 @@ Planetary Computer and anonymous GCS access require no credentials.
|
|
|
182
220
|
## What is in it
|
|
183
221
|
|
|
184
222
|
<!-- CATALOG_START -->
|
|
185
|
-
|
|
223
|
+
32 products across 8 themes, each with one or more access routes:
|
|
186
224
|
|
|
187
225
|
| theme | products | open without an account |
|
|
188
226
|
| --- | --- | --- |
|
|
189
|
-
| **climate** | [`era5`](https://egagli.github.io/easysnowdata/catalog/era5.html), [`koppen-geiger`](https://egagli.github.io/easysnowdata/catalog/koppen-geiger.html) | 2 of 2 |
|
|
190
|
-
| **hydro** | [`grdc-major-river-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-major-river-basins.html), [`grdc-wmo-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-wmo-basins.html), [`huc`](https://egagli.github.io/easysnowdata/catalog/huc.html), [`hydrobasins`](https://egagli.github.io/easysnowdata/catalog/hydrobasins.html) | 4 of 4 |
|
|
191
|
-
| **land** | [`esa-worldcover`](https://egagli.github.io/easysnowdata/catalog/esa-worldcover.html), [`forest-cover-fraction`](https://egagli.github.io/easysnowdata/catalog/forest-cover-fraction.html), [`nlcd`](https://egagli.github.io/easysnowdata/catalog/nlcd.html) | 2 of 3 |
|
|
192
|
-
| **optical** | [`hls`](https://egagli.github.io/easysnowdata/catalog/hls.html), [`planetscope`](https://egagli.github.io/easysnowdata/catalog/planetscope.html), [`sentinel-2-l2a`](https://egagli.github.io/easysnowdata/catalog/sentinel-2-l2a.html) | 2 of 3 |
|
|
193
|
-
| **sar** | [`sentinel-1-local-incidence-angle`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-local-incidence-angle.html), [`sentinel-1-rtc`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-rtc.html) | 2 of 2 |
|
|
194
|
-
| **snow** | [`modis-snow`](https://egagli.github.io/easysnowdata/catalog/modis-snow.html), [`mountain-snow-mask`](https://egagli.github.io/easysnowdata/catalog/mountain-snow-mask.html), [`snodas`](https://egagli.github.io/easysnowdata/catalog/snodas.html), [`snow-classification`](https://egagli.github.io/easysnowdata/catalog/snow-classification.html), [`ucla-snow-reanalysis`](https://egagli.github.io/easysnowdata/catalog/ucla-snow-reanalysis.html), [`viirs-snow`](https://egagli.github.io/easysnowdata/catalog/viirs-snow.html) | 4 of 6 |
|
|
195
227
|
| **stations** | [`awdb-stations`](https://egagli.github.io/easysnowdata/catalog/awdb-stations.html), [`cdec-stations`](https://egagli.github.io/easysnowdata/catalog/cdec-stations.html), [`databc-stations`](https://egagli.github.io/easysnowdata/catalog/databc-stations.html), [`nve-stations`](https://egagli.github.io/easysnowdata/catalog/nve-stations.html), [`snow-station-archive`](https://egagli.github.io/easysnowdata/catalog/snow-station-archive.html), [`yukon-stations`](https://egagli.github.io/easysnowdata/catalog/yukon-stations.html) | 5 of 6 |
|
|
196
|
-
| **
|
|
228
|
+
| **snow** | [`modis-snow`](https://egagli.github.io/easysnowdata/catalog/modis-snow.html), [`mountain-snow-mask`](https://egagli.github.io/easysnowdata/catalog/mountain-snow-mask.html), [`snodas`](https://egagli.github.io/easysnowdata/catalog/snodas.html), [`snow-classification`](https://egagli.github.io/easysnowdata/catalog/snow-classification.html), [`ucla-snow-reanalysis`](https://egagli.github.io/easysnowdata/catalog/ucla-snow-reanalysis.html), [`viirs-snow`](https://egagli.github.io/easysnowdata/catalog/viirs-snow.html) | 4 of 6 |
|
|
229
|
+
| **sar** | [`sentinel-1-local-incidence-angle`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-local-incidence-angle.html), [`sentinel-1-rtc`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-rtc.html) | 2 of 2 |
|
|
230
|
+
| **optical** | [`hls`](https://egagli.github.io/easysnowdata/catalog/hls.html), [`planetscope`](https://egagli.github.io/easysnowdata/catalog/planetscope.html), [`sentinel-2-l2a`](https://egagli.github.io/easysnowdata/catalog/sentinel-2-l2a.html) | 2 of 3 |
|
|
231
|
+
| **terrain** | [`3dep`](https://egagli.github.io/easysnowdata/catalog/3dep.html), [`alos-dem`](https://egagli.github.io/easysnowdata/catalog/alos-dem.html), [`chili`](https://egagli.github.io/easysnowdata/catalog/chili.html), [`copernicus-dem`](https://egagli.github.io/easysnowdata/catalog/copernicus-dem.html), [`nasadem`](https://egagli.github.io/easysnowdata/catalog/nasadem.html), [`srtm`](https://egagli.github.io/easysnowdata/catalog/srtm.html) | 4 of 6 |
|
|
232
|
+
| **land** | [`esa-worldcover`](https://egagli.github.io/easysnowdata/catalog/esa-worldcover.html), [`forest-cover-fraction`](https://egagli.github.io/easysnowdata/catalog/forest-cover-fraction.html), [`nlcd`](https://egagli.github.io/easysnowdata/catalog/nlcd.html) | 2 of 3 |
|
|
233
|
+
| **hydro** | [`grdc-major-river-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-major-river-basins.html), [`grdc-wmo-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-wmo-basins.html), [`huc`](https://egagli.github.io/easysnowdata/catalog/huc.html), [`hydrobasins`](https://egagli.github.io/easysnowdata/catalog/hydrobasins.html) | 4 of 4 |
|
|
234
|
+
| **climate** | [`era5`](https://egagli.github.io/easysnowdata/catalog/era5.html), [`koppen-geiger`](https://egagli.github.io/easysnowdata/catalog/koppen-geiger.html) | 2 of 2 |
|
|
197
235
|
<!-- CATALOG_END -->
|
|
198
236
|
|
|
199
237
|
Every product's routes, resolution, credentials, licence and health are on its
|
|
@@ -211,16 +249,19 @@ inv = esd.stations.inventory(aoi, daily_only=True)
|
|
|
211
249
|
obs = esd.stations.load(inv, variables=["swe", "snwd"], time="2023-10/2024-09")
|
|
212
250
|
|
|
213
251
|
# Terrain, SAR and snow water equivalent — lazy, Dask-backed, CRS attached
|
|
214
|
-
dem = esd.terrain.dem.load(aoi) # Copernicus GLO-30
|
|
252
|
+
dem = esd.terrain.dem.load(aoi) # Copernicus GLO-30 (default)
|
|
253
|
+
dem = esd.terrain.dem.load(aoi, product="3dep") # or NASADEM, SRTM, 3DEP, ALOS
|
|
215
254
|
s1 = esd.sar.sentinel1.load(aoi, "2024-03", units="dB") # Sentinel-1 RTC
|
|
216
255
|
swe = esd.snow.snodas.load(aoi, "2024-03") # SNODAS, no account
|
|
217
256
|
|
|
218
|
-
# Optical, masked and
|
|
257
|
+
# Optical, masked, and a snow index written out rather than hidden in a helper
|
|
219
258
|
s2 = esd.optical.sentinel2.load(aoi, "2024-03", mask="scl-default")
|
|
220
|
-
ndsi =
|
|
259
|
+
ndsi = (s2["green"] - s2["swir16"]) / (s2["green"] + s2["swir16"])
|
|
221
260
|
|
|
222
|
-
#
|
|
261
|
+
# Maps with equal aspect, a scale bar and a graticule; legends from CF flags
|
|
262
|
+
esd.plotting.map(dem, cmap="terrain")
|
|
223
263
|
esd.plotting.categorical(esd.land.landcover.load(aoi))
|
|
264
|
+
esd.plotting.timeseries(obs["swe"]) # calendar dates, units in [ ]
|
|
224
265
|
|
|
225
266
|
# What is available, and what it needs
|
|
226
267
|
esd.catalog.search("swe")
|
|
@@ -228,14 +269,14 @@ esd.catalog.describe("snodas")
|
|
|
228
269
|
esd.auth.status()
|
|
229
270
|
```
|
|
230
271
|
|
|
231
|
-
|
|
232
|
-
`automatic_weather_stations.StationCollection`, …)
|
|
233
|
-
|
|
234
|
-
|
|
272
|
+
Coming from 0.0.x? The old module API (`remote_sensing.get_*`,
|
|
273
|
+
`automatic_weather_stations.StationCollection`, …) was deprecated in 0.2 and
|
|
274
|
+
removed in 0.3; the [migration guide](https://egagli.github.io/easysnowdata/migration.html)
|
|
275
|
+
maps every old name to its replacement.
|
|
235
276
|
|
|
236
277
|
## Documentation
|
|
237
278
|
|
|
238
|
-
|
|
279
|
+
Executed example gallery, data catalog and API reference: <https://egagli.github.io/easysnowdata>
|
|
239
280
|
|
|
240
281
|
## Contributing
|
|
241
282
|
|
|
@@ -276,7 +276,7 @@ re-implement · **reference** = not a product; kept in §E as an access pattern
|
|
|
276
276
|
| ICESat-2 ATL06/ATL08 | laser altimetry heights | snow depth by differencing | NSIDC · HDF5 · EDL | medium; `icepyx`/`sliderule` exist | **wrap** |
|
|
277
277
|
| S2/HLS snow cover (#9) | NDSI-threshold and let-it-snow style snow maps | turns imagery into a snow product; the most-asked feature | computed | medium | **follow-on** (NDSI first; algorithm links in E.3) |
|
|
278
278
|
| 3DEP 1/3″ and lidar | US 10 m DEM, point clouds | finer terrain for small basins; `py3dep` already a dependency | S3/PC · COG/EPT · none | low | **follow-on** |
|
|
279
|
-
| NASADEM | 30 m void-filled SRTM | alternative DEM where GLO-30 has artefacts |
|
|
279
|
+
| NASADEM | 30 m void-filled SRTM | alternative DEM where GLO-30 has artefacts | PC/GEE | low | **shipped 0.3** as `product="nasadem"`, with SRTM GL1 (`"srtm"`, GEE) and ALOS World 3D (`"alos-dem"`) beside it |
|
|
280
280
|
| Insolation proxies (CHILI, heat load) | topographic radiation indices | aspect control on melt timing (P4's CHILI classes) | GEE; or computed from a DEM with McCune & Keon 2002 | low | **rewrite** (CHILI exists) + **follow-on** (local computation) |
|
|
281
281
|
| Dynamic World | 10 m near-real-time land cover | current-year land cover for masking | GEE | low | **follow-on** |
|
|
282
282
|
| Hansen GFC 2025 | tree cover and loss year | forest change affects snow interception | GEE | low | **follow-on** |
|
|
@@ -33,59 +33,96 @@ and a recovery closes it; latency and DMR++ readiness are on the
|
|
|
33
33
|
[status page](https://egagli.github.io/easysnowdata/status.html).
|
|
34
34
|
|
|
35
35
|
<!-- DATA_STATUS_START -->
|
|
36
|
-
_Last updated: 2026-09-
|
|
36
|
+
_Last updated: 2026-09-22 01:46 UTC_
|
|
37
37
|
_⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the [status page](https://egagli.github.io/easysnowdata/status.html)._
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
### Stations (`esd.stations`)
|
|
40
|
+
|
|
41
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
40
42
|
| :---------- | :------: | :------: | :------: | :------: |
|
|
41
|
-
| AWDB stations (NRCS REST API) | ✅ |
|
|
42
|
-
| CDEC stations (JSON data servlet) | ✅ |
|
|
43
|
-
| BC snow stations (DataBC WFS) | ✅ |
|
|
44
|
-
| NVE stations (HydAPI) |
|
|
45
|
-
| Yukon stations (AquaCache API) | ✅ |
|
|
46
|
-
|
|
|
47
|
-
| Snow station archive tarball (global_snow_networks) | ✅ |
|
|
48
|
-
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
| HydroBASINS (GEE/HydroATLAS) | ✅ | — | — | — |
|
|
57
|
-
| GRDC major river basins (World Bank) | ✅ | ✅ | ✅ | ✅ |
|
|
58
|
-
| GRDC WMO basins | <abbr title="ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection r">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> |
|
|
59
|
-
| MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | — | — | — |
|
|
60
|
-
| MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | — | — | — |
|
|
43
|
+
| AWDB stations (NRCS REST API) | ✅ | ✅ | — | — |
|
|
44
|
+
| CDEC stations (JSON data servlet) | ✅ | ✅ | — | — |
|
|
45
|
+
| BC snow stations (DataBC WFS) | ✅ | ✅ | — | — |
|
|
46
|
+
| NVE stations (HydAPI) | <abbr title="RuntimeError: Unreachable: HTTP 401">❌</abbr> | ⚠️ | — | — |
|
|
47
|
+
| Yukon stations (AquaCache API) | ✅ | ✅ | — | — |
|
|
48
|
+
| Snow station inventory (global_snow_networks) | ✅ | ✅ | ✅ | ✅ |
|
|
49
|
+
| Snow station archive tarball (global_snow_networks) | ✅ | ✅ | — | — |
|
|
50
|
+
| Snow station CSV (global_snow_networks) | ✅ | ✅ | ✅ | ✅ |
|
|
51
|
+
|
|
52
|
+
### Snow (`esd.snow`)
|
|
53
|
+
|
|
54
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
55
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
56
|
+
| MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | ✅ | — | — |
|
|
57
|
+
| MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | ✅ | — | — |
|
|
61
58
|
| Mountain snow mask (Zenodo) | ✅ | ✅ | ✅ | ✅ |
|
|
62
|
-
| SNODAS (NSIDC G02158) | ✅ |
|
|
59
|
+
| SNODAS (NSIDC G02158) | ✅ | ✅ | — | — |
|
|
63
60
|
| SNODAS (GEE/Climate Engine) | ✅ | ✅ | ✅ | ✅ |
|
|
64
|
-
| Sturm & Liston snow classification (NSIDC-0768) | ✅ |
|
|
61
|
+
| Sturm & Liston snow classification (NSIDC-0768) | ✅ | ✅ | — | — |
|
|
65
62
|
| Sturm & Liston snow classification (Azure) | ✅ | ✅ | ✅ | ✅ |
|
|
66
|
-
| UCLA Snow Reanalysis (NASA NSIDC) | ✅ |
|
|
67
|
-
| HMA Snow Reanalysis (NASA NSIDC) | ✅ |
|
|
68
|
-
| VIIRS snow cover VNP10A1F (NASA NSIDC) | ✅ |
|
|
63
|
+
| UCLA Snow Reanalysis (NASA NSIDC) | ✅ | ✅ | ⚠️ | ⚠️ |
|
|
64
|
+
| HMA Snow Reanalysis (NASA NSIDC) | ✅ | ✅ | — | — |
|
|
65
|
+
| VIIRS snow cover VNP10A1F (NASA NSIDC) | ✅ | ✅ | — | — |
|
|
66
|
+
|
|
67
|
+
### SAR (`esd.sar`)
|
|
68
|
+
|
|
69
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
70
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
71
|
+
| Sentinel-1 RTC (Planetary Computer) | ✅ | ✅ | — | — |
|
|
72
|
+
| Sentinel-1 RTC OPERA (CMR-STAC ASF) | ✅ | ✅ | — | — |
|
|
73
|
+
| Sentinel-1 RTC OPERA (Earth Engine) | ✅ | ✅ | — | — |
|
|
74
|
+
| Sentinel-1 static layers (CMR-STAC ASF) | ✅ | ✅ | — | — |
|
|
75
|
+
| Copernicus DEM for the incidence angle (Planetary Computer) | ✅ | ✅ | — | — |
|
|
76
|
+
| Sentinel-1 GRD angle band (Earth Engine) | ✅ | ✅ | — | — |
|
|
77
|
+
|
|
78
|
+
### Optical imagery (`esd.optical`)
|
|
79
|
+
|
|
80
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
81
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
82
|
+
| HLS L30 (CMR-STAC LPCLOUD) | ✅ | ✅ | — | — |
|
|
83
|
+
| HLS S30 (Planetary Computer) | ✅ | ✅ | — | — |
|
|
84
|
+
| PlanetScope (Planet Data API) | <abbr title="DeprecationWarning: Auth.value has been deprecated.">❌</abbr> | ⚠️ | — | — |
|
|
85
|
+
| Sentinel-2 L2A (Planetary Computer) | ✅ | ✅ | — | — |
|
|
86
|
+
| Sentinel-2 L2A (Earth Search) | ✅ | ✅ | — | — |
|
|
87
|
+
|
|
88
|
+
### Terrain (`esd.terrain`)
|
|
89
|
+
|
|
90
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
91
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
92
|
+
| CHILI (GEE/CSP ERGo) | ✅ | ✅ | ✅ | ✅ |
|
|
93
|
+
| Copernicus DEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
|
|
94
|
+
| Copernicus DEM (Earth Search) | ✅ | ✅ | — | — |
|
|
95
|
+
|
|
96
|
+
### Land cover (`esd.land`)
|
|
97
|
+
|
|
98
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
99
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
69
100
|
| Forest cover fraction (Zenodo) | ✅ | ✅ | ✅ | ✅ |
|
|
70
|
-
| Forest cover fraction (GEE/CGLS-LC100) | ✅ |
|
|
101
|
+
| Forest cover fraction (GEE/CGLS-LC100) | ✅ | ✅ | — | — |
|
|
71
102
|
| ESA WorldCover (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
|
|
72
|
-
| ESA WorldCover (AWS bucket) | ✅ |
|
|
73
|
-
| Annual NLCD (GEE community asset) | ✅ |
|
|
103
|
+
| ESA WorldCover (AWS bucket) | ✅ | ✅ | — | — |
|
|
104
|
+
| Annual NLCD (GEE community asset) | ✅ | ✅ | — | — |
|
|
74
105
|
| NLCD (GEE/USGS) | ✅ | ✅ | ✅ | ✅ |
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
83
|
-
|
|
|
84
|
-
|
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
88
|
-
|
|
106
|
+
|
|
107
|
+
### Hydrography (`esd.hydro`)
|
|
108
|
+
|
|
109
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
110
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
111
|
+
| HUC geometries (USGS WBD REST) | ✅ | ✅ | — | — |
|
|
112
|
+
| HUC geometries (GEE/USGS WBD) | ✅ | ✅ | ✅ | ✅ |
|
|
113
|
+
| HydroATLAS basins (figshare) | ✅ | ✅ | ✅ | ✅ |
|
|
114
|
+
| HydroBASINS (HydroSHEDS regional zip) | <abbr title="RuntimeError: Unreachable: HTTP 403">❌</abbr> | ✅ | — | — |
|
|
115
|
+
| HydroBASINS (GEE/HydroATLAS) | ✅ | ✅ | — | — |
|
|
116
|
+
| GRDC major river basins (World Bank) | ✅ | ✅ | ✅ | ✅ |
|
|
117
|
+
| GRDC WMO basins | ✅ | <abbr title="ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection r">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> | <abbr title="RuntimeError: Unreachable: HTTP 404">❌</abbr> |
|
|
118
|
+
|
|
119
|
+
### Climate (`esd.climate`)
|
|
120
|
+
|
|
121
|
+
| Data Source | Latest (Sep 21) | Sep 17 | Sep 14 | Sep 7 |
|
|
122
|
+
| :---------- | :------: | :------: | :------: | :------: |
|
|
123
|
+
| ARCO-ERA5 (GCS anonymous) | ✅ | ✅ | ✅ | ✅ |
|
|
124
|
+
| ERA5 (Google Earth Engine) | ✅ | ✅ | ✅ | ✅ |
|
|
125
|
+
| Köppen-Geiger classification (figshare) | ✅ | ✅ | ✅ | ✅ |
|
|
89
126
|
<!-- DATA_STATUS_END -->
|
|
90
127
|
|
|
91
128
|
## Installation
|
|
@@ -105,10 +142,10 @@ mamba install -c conda-forge easysnowdata
|
|
|
105
142
|
```bash
|
|
106
143
|
git clone https://github.com/egagli/easysnowdata.git
|
|
107
144
|
cd easysnowdata
|
|
108
|
-
pixi install
|
|
109
|
-
pixi run test-unit
|
|
110
|
-
pixi run test-live
|
|
111
|
-
pixi run docs-serve
|
|
145
|
+
pixi install # sets up the environments
|
|
146
|
+
pixi run -e test-py313 test-unit # offline tests (no network, no credentials)
|
|
147
|
+
pixi run -e test-py313 test-live # live tests against the data providers (credentialed ones skip without secrets)
|
|
148
|
+
pixi run -e docs docs-serve # preview the docs locally
|
|
112
149
|
```
|
|
113
150
|
|
|
114
151
|
### Services that require account setup
|
|
@@ -125,18 +162,18 @@ Planetary Computer and anonymous GCS access require no credentials.
|
|
|
125
162
|
## What is in it
|
|
126
163
|
|
|
127
164
|
<!-- CATALOG_START -->
|
|
128
|
-
|
|
165
|
+
32 products across 8 themes, each with one or more access routes:
|
|
129
166
|
|
|
130
167
|
| theme | products | open without an account |
|
|
131
168
|
| --- | --- | --- |
|
|
132
|
-
| **climate** | [`era5`](https://egagli.github.io/easysnowdata/catalog/era5.html), [`koppen-geiger`](https://egagli.github.io/easysnowdata/catalog/koppen-geiger.html) | 2 of 2 |
|
|
133
|
-
| **hydro** | [`grdc-major-river-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-major-river-basins.html), [`grdc-wmo-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-wmo-basins.html), [`huc`](https://egagli.github.io/easysnowdata/catalog/huc.html), [`hydrobasins`](https://egagli.github.io/easysnowdata/catalog/hydrobasins.html) | 4 of 4 |
|
|
134
|
-
| **land** | [`esa-worldcover`](https://egagli.github.io/easysnowdata/catalog/esa-worldcover.html), [`forest-cover-fraction`](https://egagli.github.io/easysnowdata/catalog/forest-cover-fraction.html), [`nlcd`](https://egagli.github.io/easysnowdata/catalog/nlcd.html) | 2 of 3 |
|
|
135
|
-
| **optical** | [`hls`](https://egagli.github.io/easysnowdata/catalog/hls.html), [`planetscope`](https://egagli.github.io/easysnowdata/catalog/planetscope.html), [`sentinel-2-l2a`](https://egagli.github.io/easysnowdata/catalog/sentinel-2-l2a.html) | 2 of 3 |
|
|
136
|
-
| **sar** | [`sentinel-1-local-incidence-angle`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-local-incidence-angle.html), [`sentinel-1-rtc`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-rtc.html) | 2 of 2 |
|
|
137
|
-
| **snow** | [`modis-snow`](https://egagli.github.io/easysnowdata/catalog/modis-snow.html), [`mountain-snow-mask`](https://egagli.github.io/easysnowdata/catalog/mountain-snow-mask.html), [`snodas`](https://egagli.github.io/easysnowdata/catalog/snodas.html), [`snow-classification`](https://egagli.github.io/easysnowdata/catalog/snow-classification.html), [`ucla-snow-reanalysis`](https://egagli.github.io/easysnowdata/catalog/ucla-snow-reanalysis.html), [`viirs-snow`](https://egagli.github.io/easysnowdata/catalog/viirs-snow.html) | 4 of 6 |
|
|
138
169
|
| **stations** | [`awdb-stations`](https://egagli.github.io/easysnowdata/catalog/awdb-stations.html), [`cdec-stations`](https://egagli.github.io/easysnowdata/catalog/cdec-stations.html), [`databc-stations`](https://egagli.github.io/easysnowdata/catalog/databc-stations.html), [`nve-stations`](https://egagli.github.io/easysnowdata/catalog/nve-stations.html), [`snow-station-archive`](https://egagli.github.io/easysnowdata/catalog/snow-station-archive.html), [`yukon-stations`](https://egagli.github.io/easysnowdata/catalog/yukon-stations.html) | 5 of 6 |
|
|
139
|
-
| **
|
|
170
|
+
| **snow** | [`modis-snow`](https://egagli.github.io/easysnowdata/catalog/modis-snow.html), [`mountain-snow-mask`](https://egagli.github.io/easysnowdata/catalog/mountain-snow-mask.html), [`snodas`](https://egagli.github.io/easysnowdata/catalog/snodas.html), [`snow-classification`](https://egagli.github.io/easysnowdata/catalog/snow-classification.html), [`ucla-snow-reanalysis`](https://egagli.github.io/easysnowdata/catalog/ucla-snow-reanalysis.html), [`viirs-snow`](https://egagli.github.io/easysnowdata/catalog/viirs-snow.html) | 4 of 6 |
|
|
171
|
+
| **sar** | [`sentinel-1-local-incidence-angle`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-local-incidence-angle.html), [`sentinel-1-rtc`](https://egagli.github.io/easysnowdata/catalog/sentinel-1-rtc.html) | 2 of 2 |
|
|
172
|
+
| **optical** | [`hls`](https://egagli.github.io/easysnowdata/catalog/hls.html), [`planetscope`](https://egagli.github.io/easysnowdata/catalog/planetscope.html), [`sentinel-2-l2a`](https://egagli.github.io/easysnowdata/catalog/sentinel-2-l2a.html) | 2 of 3 |
|
|
173
|
+
| **terrain** | [`3dep`](https://egagli.github.io/easysnowdata/catalog/3dep.html), [`alos-dem`](https://egagli.github.io/easysnowdata/catalog/alos-dem.html), [`chili`](https://egagli.github.io/easysnowdata/catalog/chili.html), [`copernicus-dem`](https://egagli.github.io/easysnowdata/catalog/copernicus-dem.html), [`nasadem`](https://egagli.github.io/easysnowdata/catalog/nasadem.html), [`srtm`](https://egagli.github.io/easysnowdata/catalog/srtm.html) | 4 of 6 |
|
|
174
|
+
| **land** | [`esa-worldcover`](https://egagli.github.io/easysnowdata/catalog/esa-worldcover.html), [`forest-cover-fraction`](https://egagli.github.io/easysnowdata/catalog/forest-cover-fraction.html), [`nlcd`](https://egagli.github.io/easysnowdata/catalog/nlcd.html) | 2 of 3 |
|
|
175
|
+
| **hydro** | [`grdc-major-river-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-major-river-basins.html), [`grdc-wmo-basins`](https://egagli.github.io/easysnowdata/catalog/grdc-wmo-basins.html), [`huc`](https://egagli.github.io/easysnowdata/catalog/huc.html), [`hydrobasins`](https://egagli.github.io/easysnowdata/catalog/hydrobasins.html) | 4 of 4 |
|
|
176
|
+
| **climate** | [`era5`](https://egagli.github.io/easysnowdata/catalog/era5.html), [`koppen-geiger`](https://egagli.github.io/easysnowdata/catalog/koppen-geiger.html) | 2 of 2 |
|
|
140
177
|
<!-- CATALOG_END -->
|
|
141
178
|
|
|
142
179
|
Every product's routes, resolution, credentials, licence and health are on its
|
|
@@ -154,16 +191,19 @@ inv = esd.stations.inventory(aoi, daily_only=True)
|
|
|
154
191
|
obs = esd.stations.load(inv, variables=["swe", "snwd"], time="2023-10/2024-09")
|
|
155
192
|
|
|
156
193
|
# Terrain, SAR and snow water equivalent — lazy, Dask-backed, CRS attached
|
|
157
|
-
dem = esd.terrain.dem.load(aoi) # Copernicus GLO-30
|
|
194
|
+
dem = esd.terrain.dem.load(aoi) # Copernicus GLO-30 (default)
|
|
195
|
+
dem = esd.terrain.dem.load(aoi, product="3dep") # or NASADEM, SRTM, 3DEP, ALOS
|
|
158
196
|
s1 = esd.sar.sentinel1.load(aoi, "2024-03", units="dB") # Sentinel-1 RTC
|
|
159
197
|
swe = esd.snow.snodas.load(aoi, "2024-03") # SNODAS, no account
|
|
160
198
|
|
|
161
|
-
# Optical, masked and
|
|
199
|
+
# Optical, masked, and a snow index written out rather than hidden in a helper
|
|
162
200
|
s2 = esd.optical.sentinel2.load(aoi, "2024-03", mask="scl-default")
|
|
163
|
-
ndsi =
|
|
201
|
+
ndsi = (s2["green"] - s2["swir16"]) / (s2["green"] + s2["swir16"])
|
|
164
202
|
|
|
165
|
-
#
|
|
203
|
+
# Maps with equal aspect, a scale bar and a graticule; legends from CF flags
|
|
204
|
+
esd.plotting.map(dem, cmap="terrain")
|
|
166
205
|
esd.plotting.categorical(esd.land.landcover.load(aoi))
|
|
206
|
+
esd.plotting.timeseries(obs["swe"]) # calendar dates, units in [ ]
|
|
167
207
|
|
|
168
208
|
# What is available, and what it needs
|
|
169
209
|
esd.catalog.search("swe")
|
|
@@ -171,14 +211,14 @@ esd.catalog.describe("snodas")
|
|
|
171
211
|
esd.auth.status()
|
|
172
212
|
```
|
|
173
213
|
|
|
174
|
-
|
|
175
|
-
`automatic_weather_stations.StationCollection`, …)
|
|
176
|
-
|
|
177
|
-
|
|
214
|
+
Coming from 0.0.x? The old module API (`remote_sensing.get_*`,
|
|
215
|
+
`automatic_weather_stations.StationCollection`, …) was deprecated in 0.2 and
|
|
216
|
+
removed in 0.3; the [migration guide](https://egagli.github.io/easysnowdata/migration.html)
|
|
217
|
+
maps every old name to its replacement.
|
|
178
218
|
|
|
179
219
|
## Documentation
|
|
180
220
|
|
|
181
|
-
|
|
221
|
+
Executed example gallery, data catalog and API reference: <https://egagli.github.io/easysnowdata>
|
|
182
222
|
|
|
183
223
|
## Contributing
|
|
184
224
|
|