History#
0.19.0 (2025-01-17)#
Users are encouraged to using the new HyRiver package called Seamless3DEP which is a lightweight and efficient package providing access to both static DEMs and dynamic 3DEP services. This package is a part of the HyRiver software stack and is the recommended package for accessing 3DEP data. For more information please visit its documentation. For the time being, Py3DEP will be maintained for bug fixes and minor updates.
Breaking Changes#
The default CRS for
get_mapis nowEPSG:5070. This is due to an issue with the 3DEP service where the service returns invalid results when the requested CRS in not in a projected coordinate system.
0.18.0 (2024-10-05)#
Breaking Changes#
Drop support for Python 3.8 since its end-of-life date is October 2024.
Remove all exceptions from the main module and raise them from the
exceptionsmodule. This is to declutter the public API and make it easier to maintain.
0.17.1 (2024-09-14)#
Internal Changes#
A release without change to match the version of other HyRiver packages.
0.17.0 (2024-05-07)#
Internal Changes#
Add the
exceptionsmodule to the high-level API to declutter the main module. In the future, all exceptions will be raised from this module and not from the main module. For now, the exceptions are raised from both modules for backward compatibility.Switch to using the
srclayout instead of theflatlayout for the package structure. This is to make the package more maintainable and to avoid any potential conflicts with other packages.Add artifact attestations to the release workflow.
0.16.3 (2024-04-24)#
Bug Fixes#
In
check_3dep_availabilityfunction, fix a bug where the function fails to return a valid response when the web service is down.
0.16.2 (2024-02-12)#
Bug Fixes#
In
add_elvationfunction, fix a bug where the function fails to add elevation to axarray.Datasetwith x and y dims not beingxandy.
Internal Changes#
Refactor
fill_depressionsfunction by porting the code frompyflwdirand improve its performance and also now, it directly supportxarray.DataArray. Now,pyflwdiris not an optional dependency anymore. You can installnumbato improve the performance of the function.
Breaking Changes#
The AirMap service has been deprecated and removed from the package. The
elevation_bycoordsfunction now only supports the the National Map and the 3DEP services.
0.16.1 (2024-01-15)#
Bug Fixes#
In the
check_3dep_availabilityfunction when the web service is down the function raises aTypeErrorinstead of setting the value of the failed resolution toFailed. This is fixed now. (GH 66).
Internal Changes#
Simplify the logic of adding elevation to a Dataset in the
add_elevationfunction to avoid modifying CRS of the input Dataset.
0.16.0 (2024-01-03)#
New Features#
Add a new function called
get_map_vrtfor getting DEM within a bounding box and saving it as aVRTfile. This function has low memory usage and is useful for cases where the DEM is needed for a large area. Moreover, even for usual use cases it can be much faster thanget_demsince it loads the data lazily, at the cost of higher disk usage.In the
get_mapfunction, check if the input geometry is within the bounds of the 3DEP’s WMS service and if not, raise an exception.In the
fill_depressionsfunction add a new argument calledoutletsfor specifying outlet detection method: At the edge of all cells (edge) or only the minimum elevation edge cell (min; default).Significantly improve the performance of
check_3dep_availabilityfunction by minimizng the number of requests to the service and sending all requests asynchronously. Also, the returneddictnow usesFailedfor those resolutions where the service fails to return a valid response. It will remove the failed responses from the cache, so next time the function is called, it will try to get only the failed resolutions.Add four new options to
add_elevation:maskfor passing a mask andresolutionfor specifying the resolution of the source DEM, andx_dimandy_dimfor passing the names of spatial dimensions in the input dataset. Themaskoption is useful for cases where the inputxarray.DataArrayorxarray.Datasethas a mask and the user wants to use that mask for the elevation data as well. Theresolutionoption is useful for cases where the user wants to get the elevation data at a higher resolution that will be downsampled by bilinear interpolation to the resolution of the inputxarray.DataArrayorxarray.Dataset. The default isresolution=Nonewhich means the resolution of the inputxarray.DataArrayorxarray.Datasetwill be used. Thex_dimandy_dimoptions are useful for cases where the inputxarray.DataArrayorxarray.Datasethas different names for spatial dimensions thanxandy. The default isx_dim="x"andy_dim="y".
Breaking Changes#
In the
elevation_profilefunction remove theresargument and use 10-m resolution DEM from 3DEP. Also, add two new attributes to the outputxarray.Dataset:sourcefor the dataset to state the data source used andunitsfor thedistancevariable to state the units of the distance, which is meters.
Internal Changes#
Improve initial load time by moving
import pyflwdirto thefill_depressionsfunction.
Bug Fixes#
Decrease the number of pixels per request from 10e6 to 8e6 to reduce the request load (GH 65).
0.15.2 (2023-09-22)#
Internal Changes#
Remove dependency on
dask.
0.15.1 (2023-09-02)#
Bug Fixes#
Fix HyRiver libraries requirements by specifying a range instead of exact version so
conda-forgecan resolve the dependencies.
0.15.0 (2023-05-07)#
From release 0.15 onward, all minor versions of HyRiver packages
will be pinned. This ensures that previous minor versions of HyRiver
packages cannot be installed with later minor releases. For example,
if you have py3dep==0.14.x installed, you cannot install
pydaymet==0.15.x. This is to ensure that the API is
consistent across all minor versions.
New Features#
In
static_3dep_demuserioxarraydirectly instead ofrasteriosince it can handle VRT files.Improve performance and accuracy of
add_elevationby using the dynamic 3DEP service and setting the resolution based on the inputxarray.DataArrayorxarray.Dataset.Improve the performance of
elevation_profileby using the static 3DEP service when the input resolution is 10 m (which is the default for this function).For now, retain compatibility with
shapely<2while supportingshapley>=2.
Bug Fixes#
In
add_elevation, ensure that the resolution is in meters by reprojecting the input dataset to 5070 before extracting resolution and bound attributes.
0.14.0 (2023-03-05)#
New Features#
Add a new function called
add_elevationfor adding elevation data as a new variable to an inputxarray.DataArrayorxarray.Dataset.The
elevation_bycoordsfunction now accepts a single coordinate and returns a float in addition to a list of coordinates that returned a list of elevations.Modify the
elevation_bycoordsfunction to use the new elevation point query service (EPQS) web service. This only affects thesource="tnm"option.
Breaking Changes#
Bump the minimum required version of
shapelyto 2.0, and use its new API.
Internal Changes#
Sync all minor versions of HyRiver packages to 0.14.0.
0.13.12 (2023-02-01)#
New Features#
Use pyflwdir package for depression filling operation instead of
richdemsince it appears to be unmaintained. Note thatpyflwdiris an optional dependency. Also,pyflwdirdepends onnumbawhich is not available for Python 3.11 yet. You can follow the progress ofnumba’s support for Python 3.11 here.Add a new function called
get_demfor obtaining DEM that is a wrapper ofstatic_3dep_demandget_mapfunctions. Sincestatic_3dep_demis faster, if the requested resolution is 10 m, 30 m, or 60 m,static_3dep_demwill be used. Otherwise,get_mapwill be used.
Internal Changes#
Significantly improve the performance of
elevation_bycoordswhentepis used as the source by using the static DEM data instead of the dynamic DEM.Fully migrate
setup.cfgandsetup.pytopyproject.toml.Convert relative imports to absolute with
absolufy-imports.Sync all patch versions of HyRiver packages to x.x.12.
0.13.10 (2023-01-08)#
New Features#
Refactor the
show_versionsfunction to improve performance and print the output in a nicer table-like format.
Bug Fixes#
Fix a compatibility issue with the new
scipyversion inelevation_profilewhere led to failure of interpolation.
0.13.9 (2022-12-15)#
Bug Fixes#
Add the missing annotation import to the
cache_keysto ensure Python 3.8 and 3.9 work with Python 3.10 style type hinting.
0.13.8 (2022-12-09)#
New Features#
Add a new function called
static_3dep_demfor getting only DEM data at 10 m, 30, or 60 m resolution. This is useful for cases where only DEM data (i.e., not slope, aspect, or other terrain attributes that the Dynamic 3DEP service provides) is needed. This function is faster thanget_mapbut is less flexible.
Internal Changes#
Modify the codebase based on Refurb suggestions.
0.13.7 (2022-11-04)#
Internal Changes#
Use
pyupgradepackage to update the type hinting annotations to Python 3.10 style.Bump the minimum required version of HyRiver dependencies to the latest versions.
0.13.6 (2022-08-30)#
Internal Changes#
Add the missing PyPi classifiers for the supported Python versions.
0.13.5 (2022-08-29)#
Breaking Changes#
Append “Error” to all exception classes for conforming to PEP-8 naming conventions.
Internal Changes#
Increase the pixel limit for 3DEP’s WMS from 8M to 10M to reduce number of service calls and improve performance.
Bump the minimum versions of
pygeoogcandpygeoutilsto 0.13.5 and that ofasync-retrieverto 0.3.5.
0.13.3 (2022-06-25)#
Bug Fixes#
Fix a bug in
check_3dep_availabilitywhere due to changes inpygeoogcZeroMatchedexception is raised instead ofTypeErrorand as a resultcheck_3dep_availabilitywas not working as expected.
0.13.2 (2022-06-14)#
Breaking Changes#
Set the minimum supported version of Python to 3.8 since many of the dependencies such as
xarray,pandas,rioxarrayhave dropped support for Python 3.7.
Internal Changes#
Use micromamba for running tests and use nox for linting in CI.
0.13.1 (2022-06-11)#
New Features#
In
deg2mpmfunction look for_FillValueandnodatavalsin the attributes and if not found, fall back tonumpy.nan.
Internal Changes#
Ensure that the
deg2mpmfunction usesdaskif the input isdask-enabled.In the
elevation_profilefunction use a bounding box to get DEM and a linear interpolation to get the elevation along the profile.
0.13.0 (2022-04-03)#
New Features#
Add a new function called
query_3dep_sourcesfor querying bounds of 3DEP’s data sources within a bounding box. It returns a geo-dataframe that contains the bounding box of each data source and a columndem_residentifying the resolution of the raw topographic data within each geometry.Add a new function called
elevation_profilefor getting elevation profile along a line at a given spacing. This function converts the line to a B-spline and then calculates the elevation along the spline at a given uniform spacing.
Breaking Changes#
Remove caching-related arguments from all functions since now they can be set globally via three environmental variables:
HYRIVER_CACHE_NAME: Path to the caching SQLite database.HYRIVER_CACHE_EXPIRE: Expiration time for cached requests in seconds.HYRIVER_CACHE_DISABLE: Disable reading/writing from/to the cache file.
You can do this like so:
import os
os.environ["HYRIVER_CACHE_NAME"] = "path/to/file.sqlite"
os.environ["HYRIVER_CACHE_EXPIRE"] = "3600"
os.environ["HYRIVER_CACHE_DISABLE"] = "true"
0.12.2 (2022-01-15)#
New Features#
Add a new DEM source to
elevation_bycoordsto get elevation from the National Map’s 3DEP WMS service. This can replace thetnmsource sincetnmis not stable.Add a new function called
check_3dep_availabilityto check the availability of 3DEP’s native resolutions within an area of interest. It returns adictwith keys corresponding to the available resolutions and its values are boolean values indicating whether the resolution is available or not.Replace no data values of
slopeindeg2mmwithnp.nan, so they do not get converted to another value. The output of this function hasnp.float64type.
Internal Changes#
Refactor
ElevationByCoordsby using__post_init__for validating the input parameters rather thanpydantic’s validators.Refactor
elevation_bygridby usingget_mapto get DEM andrioxarrayfor re-projection.Add type checking with
typeguardand fixed typing issues raised bytypeguard.Refactor
show_versionsto ensure getting correct versions of all dependencies.
0.12.1 (2021-12-31)#
Internal Changes#
Use the three new
ar.retrieve_*functions instead of the oldar.retrievefunction to improve type hinting and to make the API more consistent.
0.12.0 (2021-12-27)#
Breaking Changes#
Set the request caching’s expiration time to never expire. Add two flags to all functions to control the caching:
expire_afteranddisable_caching.
Internal Changes#
Add all the missing types so
mypy --strictpasses.Improve performance of
elevation_bygridby ignoring unnecessary validation.
0.11.4 (2021-11-12)#
Internal Changes#
0.11.3 (2021-10-03)#
Breaking Changes#
Rewrite the command-line interface using
click.groupto improve UX. The command is nowpy3dep [command] [args] [options]. The two supported commands arecoordsfor getting elevations of a dataframe of coordinates inEPSG:4326CRS andgeometryfor getting the elevation of a geo-dataframe of geometries. Each sub-command now has a separate help message. The format of the input file for thecoordscommand is nowcsvand for thegeometrycommand is.shpor.gpkgand must have acrsattribute. Also, thegeometrycommand now accepts multiple layers via the--layers(-l) option. More information and examples can be in theREADME.rstfile.
New Features#
Make
fill_depressionsfunction public. This function conditions an input DEM by applying depression filling and flat area resolution operations.
Internal Changes#
The
get_mapfunction now checks for validation of the inputlayersargument before sending the actual request with a more helpful message.Improve docstrings.
Move
deg2mpm,fill_depressions, andreproject_gtifffunctions to a new file calledutils. Bothdeg2mpmandfill_depressionsfunctions are still accessible frompy3depdirectly.Increase the test coverage.
Use one of the
click’s internal functions,click..testing.CliRunner, to run the CLI tests.
0.11.2 (2021-09-17)#
Bug Fixes#
Fix a bug related to
elevation_bycoordswhere CRS validation fails if its type ispyrpoj.CRSby converting inputs with CRS types to string.
Internal Changes#
Fix a couple of typing issues and update the
get_transformAPI based on the recent changes inpygeoutilsv0.11.5.
0.11.1 (2021-07-31)#
The first highlight of this release is a major refactor of elevation_bycoords by
adding support for the Bulk Point Query Service and improving the overall performance
of the function. Another highlight is support for performing depression filling
in elevation_bygrid before sampling the underlying DEM.
New Features#
Refactor
elevation_bycoordsfunction to add support for getting elevations of a list of coordinates via The National Map’s Point Query Service. This service is more accurate than Airmap, but it’s limited to the US only. You can select the source via a new argument calledsource. You can set it tosource=tnmto use the TNM service. The default istnm.Refactor
elevation_bygridfunction to add a new capability viafill_depressionsargument for filling depressions in the obtained DEM before extracting elevation data for the input grid points. This is achieved via RichDEM that needs to be installed if this functionality is desired. You can install it viapiporconda(mamba).
Internal Changes#
Migrate to using
AsyncRetrieverfor handling communications with web services.Handle the interpolation step in
elevation_bygridfunction more efficiently usingxarray.
0.11.0 (2021-06-19)#
New Features#
Added command-line interface (GH 10).
All feature query functions use persistent caching that can significantly improve the performance.
Breaking Changes#
Drop support for Python 3.6 since many of the dependencies such as
xarrayandpandashave done so.The returned
xarrayobjects are in parallel mode, i.e., in some casescomputemethod should be used to get the results.Save the output as a
netcdfinstead ofrastersince conversion fromnctotiffcan be easily done withrioxarray.
0.10.1 (2021-03-27)#
Add announcement regarding the new name for the software stack, HyRiver.
Improve
pipinstallation and release workflow.
0.10.0 (2021-03-06)#
The first release after renaming hydrodata to PyGeoHydro.
Make
mypychecks more strict and fix all the errors and prevent possible bugs.Speed up CI testing by using
mambaand caching.
0.9.0 (2021-02-14)#
Bump version to the same version as PyGeoHydro.
Add support for saving maps as
geotifffile(s).Replace
Elevation Point Query Serviceservice withAirMapfor getting elevations for a list of coordinates in bulk sinceAirMapis much faster. The resolution ofAirMapis 30 m.Use
cytoolzfor some operations for improving performance.
0.2.0 (2020-12-06)#
Add support for multipolygon.
Remove the
fill_holeargument.Add a new function to get elevations for a list of coordinates called
elevation_bycoords.Refactor
elevation_bygridfunction for increasing readability and performance.
0.1.7 (2020-08-18)#
Added a rename operation to
get_mapto automatically rename the variables to a more sensible one.Replaced
simplejsonwithorjsonto speed-up JSON operations.
0.1.6 (2020-08-11)#
Add a new function,
show_versions, for getting versions of the installed dependencies which is useful for debugging and reporting.Fix typos in the docs and improved the README.
Improve testing and coverage.
0.1.5 (2020-08-03)#
Fixed the geometry CRS issue
Improved the documentation
0.1.4 (2020-07-23)#
Refactor
get_mapto usepygeoutilspackage.Change the versioning method to
setuptools_scm.Polish README and add installation from
conda-forge.
0.1.0 (2020-07-19)#
First release on PyPI.