# xDEM: robust analysis of DEMs in Python.
[![Documentation Status](https://readthedocs.org/projects/xdem/badge/?version=latest)](https://xdem.readthedocs.io/en/latest/?badge=latest)
[![build](https://github.com/GlacioHack/xdem/actions/workflows/python-tests.yml/badge.svg)](https://github.com/GlacioHack/xdem/actions/workflows/python-tests.yml)
[![Conda Version](https://img.shields.io/conda/vn/conda-forge/xdem.svg)](https://anaconda.org/conda-forge/xdem)
[![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/xdem.svg)](https://anaconda.org/conda-forge/xdem)
[![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/xdem.svg)](https://anaconda.org/conda-forge/xdem)
[![PyPI version](https://badge.fury.io/py/xdem.svg)](https://badge.fury.io/py/xdem)
[![Coverage Status](https://coveralls.io/repos/github/GlacioHack/xdem/badge.svg?branch=main)](https://coveralls.io/github/GlacioHack/xdem?branch=main)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GlacioHack/xdem/main)
[![Pre-Commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
[![Formatted with black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)
[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
**xDEM** is an open source project to develop a core Python package for the analysis of digital elevation models (DEMs).
It aims at **providing modular and robust tools for the most common analyses needed with DEMs**, including both geospatial
operations specific to DEMs and a wide range of 3D alignment and correction methods from published, peer-reviewed studies.
The core manipulation of DEMs (e.g., vertical alignment, terrain analysis) are **conveniently centered around a `DEM` class** (that, notably, re-implements all tools
of [gdalDEM](https://gdal.org/programs/gdaldem.html)). More complex pipelines (e.g., 3D rigid coregistration, bias corrections, filtering) are **built around
modular `Coreg`, `BiasCorr` classes that easily interface between themselves**. Finally, xDEM includes advanced
uncertainty analysis tools based on spatial statistics of [SciKit-GStat](https://scikit-gstat.readthedocs.io/en/latest/).
Additionally, xDEM inherits many convenient functionalities from [GeoUtils](https://github.com/GlacioHack/geoutils) such as
**implicit loading**, **numerical interfacing** and **convenient object-based geospatial methods** to easily perform
the most common higher-level tasks needed by geospatial users (e.g., reprojection, cropping, vector masking). Through [GeoUtils](https://github.com/GlacioHack/geoutils), xDEM
relies on [Rasterio](https://github.com/rasterio/rasterio), [GeoPandas](https://github.com/geopandas/geopandas) and [Pyproj](https://github.com/pyproj4/pyproj)
for georeferenced calculations, and on [NumPy](https://github.com/numpy/numpy) and [Xarray](https://github.com/pydata/xarray) for numerical analysis. It allows easy access to
the functionalities of these packages through interfacing or composition, and quick inter-operability through object conversion.
If you are looking for an accessible Python package to write the Python equivalent of your [GDAL](https://gdal.org/) command lines, or of your
[QGIS](https://www.qgis.org/en/site/) analysis pipeline **without a steep learning curve** on Python GIS syntax, xDEM is perfect for you! For more advanced
users, xDEM also aims at being efficient and scalable by supporting lazy loading and parallel computing (ongoing).
## Documentation
For a quick start, full feature description or search through the API, see xDEM's documentation at: https://xdem.readthedocs.io.
## Installation
### With `mamba`
```bash
mamba install -c conda-forge xdem
```
See [mamba's documentation](https://mamba.readthedocs.io/en/latest/) to install `mamba`, which will solve your environment much faster than `conda`.
### With `pip`
```bash
pip install xdem
```
## Citing methods implemented in the package
When using a method implemented in xDEM, please **cite both the package and the related study**:
Citing xDEM: [![Zenodo](https://zenodo.org/badge/doi/10.5281/zenodo.4809697.svg)](https://zenodo.org/doi/10.5281/zenodo.4809697)
Citing the related study:
- **Coregistration**:
- Horizontal shift from aspect/slope relationship of *[Nuth and Kääb (2011)](https://doi.org/10.5194/tc-5-271-2011)*,
- Iterative closest point (ICP) of *[Besl and McKay (1992)](http://dx.doi.org/10.1109/34.121791)*,
- **Bias correction**:
- Along-track multi-sinusoidal noise by basin-hopping of *[Girod et al. (2017)](https://doi.org/10.3390/rs9070704)*,
- **Uncertainty analysis**:
- Heteroscedasticity and multi-range correlations from stable terrain of *[Hugonnet et al. (2022)](https://doi.org/10.1109/JSTARS.2022.3188922)*,
- **Terrain attributes**:
- Slope, aspect and hillshade of either *[Horn (1981)](http://dx.doi.org/10.1109/PROC.1981.11918)* or *[Zevenbergen and Thorne (1987)](http://dx.doi.org/10.1002/esp.3290120107)*,
- Profile, plan and maximum curvature of *[Zevenbergen and Thorne (1987)](http://dx.doi.org/10.1002/esp.3290120107)*,
- Topographic position index of *[Weiss (2001)](http://www.jennessent.com/downloads/TPI-poster-TNC_18x22.pdf)*,
- Terrain ruggedness index of either *[Riley et al. (1999)](http://download.osgeo.org/qgis/doc/reference-docs/Terrain_Ruggedness_Index.pdf)* or *[Wilson et al. (2007)](http://dx.doi.org/10.1080/01490410701295962)*,
- Roughness of *[Dartnell (2000)](http://dx.doi.org/10.14358/PERS.70.9.1081)*,
- Rugosity of *[Jenness (2004)](https://doi.org/10.2193/0091-7648(2004)032[0829:CLSAFD]2.0.CO;2)*,
- Fractal roughness of *[Taud et Parrot (2005)](https://doi.org/10.4000/geomorphologie.622)*.
## Contributing
We welcome new contributions, and will happily help you integrate your own DEM routines into xDEM!
After discussing a new feature or bug fix in an issue, you can open a PR to xDEM with the following steps:
1. Fork the repository, make a feature branch and push changes.
2. When ready, submit a pull request from the feature branch of your fork to `GlacioHack/xdem:main`.
3. The PR will be reviewed by at least one maintainer, discussed, then merged.
More details on [our contributing page](CONTRIBUTING.md).
Raw data
{
"_id": null,
"home_page": "https://github.com/GlacioHack/xdem",
"name": "xdem",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.13,>=3.10",
"maintainer_email": null,
"keywords": "dem, elevation, geoutils, xarray",
"author": "xDEM developers",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/56/ad/d163f1836f2da10293c14427c68006d1f9016efc7ba89afa4b4f028ceffe/xdem-0.1.0.tar.gz",
"platform": "any",
"description": "# xDEM: robust analysis of DEMs in Python.\n\n[![Documentation Status](https://readthedocs.org/projects/xdem/badge/?version=latest)](https://xdem.readthedocs.io/en/latest/?badge=latest)\n[![build](https://github.com/GlacioHack/xdem/actions/workflows/python-tests.yml/badge.svg)](https://github.com/GlacioHack/xdem/actions/workflows/python-tests.yml)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/xdem.svg)](https://anaconda.org/conda-forge/xdem)\n[![Conda Platforms](https://img.shields.io/conda/pn/conda-forge/xdem.svg)](https://anaconda.org/conda-forge/xdem)\n[![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/xdem.svg)](https://anaconda.org/conda-forge/xdem)\n[![PyPI version](https://badge.fury.io/py/xdem.svg)](https://badge.fury.io/py/xdem)\n[![Coverage Status](https://coveralls.io/repos/github/GlacioHack/xdem/badge.svg?branch=main)](https://coveralls.io/github/GlacioHack/xdem?branch=main)\n\n[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GlacioHack/xdem/main)\n[![Pre-Commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)\n[![Formatted with black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)\n[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)\n\n**xDEM** is an open source project to develop a core Python package for the analysis of digital elevation models (DEMs).\n\nIt aims at **providing modular and robust tools for the most common analyses needed with DEMs**, including both geospatial\noperations specific to DEMs and a wide range of 3D alignment and correction methods from published, peer-reviewed studies.\nThe core manipulation of DEMs (e.g., vertical alignment, terrain analysis) are **conveniently centered around a `DEM` class** (that, notably, re-implements all tools\nof [gdalDEM](https://gdal.org/programs/gdaldem.html)). More complex pipelines (e.g., 3D rigid coregistration, bias corrections, filtering) are **built around\nmodular `Coreg`, `BiasCorr` classes that easily interface between themselves**. Finally, xDEM includes advanced\nuncertainty analysis tools based on spatial statistics of [SciKit-GStat](https://scikit-gstat.readthedocs.io/en/latest/).\n\nAdditionally, xDEM inherits many convenient functionalities from [GeoUtils](https://github.com/GlacioHack/geoutils) such as\n**implicit loading**, **numerical interfacing** and **convenient object-based geospatial methods** to easily perform\nthe most common higher-level tasks needed by geospatial users (e.g., reprojection, cropping, vector masking). Through [GeoUtils](https://github.com/GlacioHack/geoutils), xDEM\nrelies on [Rasterio](https://github.com/rasterio/rasterio), [GeoPandas](https://github.com/geopandas/geopandas) and [Pyproj](https://github.com/pyproj4/pyproj)\nfor georeferenced calculations, and on [NumPy](https://github.com/numpy/numpy) and [Xarray](https://github.com/pydata/xarray) for numerical analysis. It allows easy access to\nthe functionalities of these packages through interfacing or composition, and quick inter-operability through object conversion.\n\nIf you are looking for an accessible Python package to write the Python equivalent of your [GDAL](https://gdal.org/) command lines, or of your\n[QGIS](https://www.qgis.org/en/site/) analysis pipeline **without a steep learning curve** on Python GIS syntax, xDEM is perfect for you! For more advanced\nusers, xDEM also aims at being efficient and scalable by supporting lazy loading and parallel computing (ongoing).\n\n## Documentation\n\nFor a quick start, full feature description or search through the API, see xDEM's documentation at: https://xdem.readthedocs.io.\n\n## Installation\n\n### With `mamba`\n\n```bash\nmamba install -c conda-forge xdem\n```\nSee [mamba's documentation](https://mamba.readthedocs.io/en/latest/) to install `mamba`, which will solve your environment much faster than `conda`.\n\n### With `pip`\n\n```bash\npip install xdem\n```\n\n## Citing methods implemented in the package\n\nWhen using a method implemented in xDEM, please **cite both the package and the related study**:\n\nCiting xDEM: [![Zenodo](https://zenodo.org/badge/doi/10.5281/zenodo.4809697.svg)](https://zenodo.org/doi/10.5281/zenodo.4809697)\n\nCiting the related study:\n\n- **Coregistration**:\n - Horizontal shift from aspect/slope relationship of *[Nuth and K\u00e4\u00e4b (2011)](https://doi.org/10.5194/tc-5-271-2011)*,\n - Iterative closest point (ICP) of *[Besl and McKay (1992)](http://dx.doi.org/10.1109/34.121791)*,\n- **Bias correction**:\n - Along-track multi-sinusoidal noise by basin-hopping of *[Girod et al. (2017)](https://doi.org/10.3390/rs9070704)*,\n- **Uncertainty analysis**:\n - Heteroscedasticity and multi-range correlations from stable terrain of *[Hugonnet et al. (2022)](https://doi.org/10.1109/JSTARS.2022.3188922)*,\n- **Terrain attributes**:\n - Slope, aspect and hillshade of either *[Horn (1981)](http://dx.doi.org/10.1109/PROC.1981.11918)* or *[Zevenbergen and Thorne (1987)](http://dx.doi.org/10.1002/esp.3290120107)*,\n - Profile, plan and maximum curvature of *[Zevenbergen and Thorne (1987)](http://dx.doi.org/10.1002/esp.3290120107)*,\n - Topographic position index of *[Weiss (2001)](http://www.jennessent.com/downloads/TPI-poster-TNC_18x22.pdf)*,\n - Terrain ruggedness index of either *[Riley et al. (1999)](http://download.osgeo.org/qgis/doc/reference-docs/Terrain_Ruggedness_Index.pdf)* or *[Wilson et al. (2007)](http://dx.doi.org/10.1080/01490410701295962)*,\n - Roughness of *[Dartnell (2000)](http://dx.doi.org/10.14358/PERS.70.9.1081)*,\n - Rugosity of *[Jenness (2004)](https://doi.org/10.2193/0091-7648(2004)032[0829:CLSAFD]2.0.CO;2)*,\n - Fractal roughness of *[Taud et Parrot (2005)](https://doi.org/10.4000/geomorphologie.622)*.\n\n## Contributing\n\nWe welcome new contributions, and will happily help you integrate your own DEM routines into xDEM!\n\nAfter discussing a new feature or bug fix in an issue, you can open a PR to xDEM with the following steps:\n\n1. Fork the repository, make a feature branch and push changes.\n2. When ready, submit a pull request from the feature branch of your fork to `GlacioHack/xdem:main`.\n3. The PR will be reviewed by at least one maintainer, discussed, then merged.\n\nMore details on [our contributing page](CONTRIBUTING.md).\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Analysis of digital elevation models (DEMs)",
"version": "0.1.0",
"project_urls": {
"Download": "https://pypi.org/project/xdem/",
"Homepage": "https://github.com/GlacioHack/xdem"
},
"split_keywords": [
"dem",
" elevation",
" geoutils",
" xarray"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ef88aa527083947af9ef3d37c3e32aebb6bd025df62fe0409cc45e54634dacc2",
"md5": "d5e0e77d16fc642fe44c4aaead4083dd",
"sha256": "febc0cbffa761b73031569ccfe890314788233191ccdfd34a25c4100fc7fc763"
},
"downloads": -1,
"filename": "xdem-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d5e0e77d16fc642fe44c4aaead4083dd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.10",
"size": 162062,
"upload_time": "2024-12-06T20:08:35",
"upload_time_iso_8601": "2024-12-06T20:08:35.062775Z",
"url": "https://files.pythonhosted.org/packages/ef/88/aa527083947af9ef3d37c3e32aebb6bd025df62fe0409cc45e54634dacc2/xdem-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "56add163f1836f2da10293c14427c68006d1f9016efc7ba89afa4b4f028ceffe",
"md5": "e14418d8f26c6990569dd607f2ccbe31",
"sha256": "c6e6b14db5344f8b30299098e25b231a7d568392ffebcf9118cd3731e66445e2"
},
"downloads": -1,
"filename": "xdem-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "e14418d8f26c6990569dd607f2ccbe31",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.13,>=3.10",
"size": 1610589,
"upload_time": "2024-12-06T20:08:36",
"upload_time_iso_8601": "2024-12-06T20:08:36.793981Z",
"url": "https://files.pythonhosted.org/packages/56/ad/d163f1836f2da10293c14427c68006d1f9016efc7ba89afa4b4f028ceffe/xdem-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-06 20:08:36",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "GlacioHack",
"github_project": "xdem",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "geopandas",
"specs": [
[
">=",
"0.12.0"
]
]
},
{
"name": "numba",
"specs": [
[
"==",
"0.*"
]
]
},
{
"name": "numpy",
"specs": [
[
"==",
"1.*"
]
]
},
{
"name": "matplotlib",
"specs": [
[
"==",
"3.*"
]
]
},
{
"name": "pyproj",
"specs": [
[
"<",
"4"
],
[
">=",
"3.4"
]
]
},
{
"name": "rasterio",
"specs": [
[
"<",
"2"
],
[
">=",
"1.3"
]
]
},
{
"name": "scipy",
"specs": [
[
"==",
"1.*"
]
]
},
{
"name": "tqdm",
"specs": []
},
{
"name": "scikit-image",
"specs": [
[
"==",
"0.*"
]
]
},
{
"name": "scikit-gstat",
"specs": [
[
">=",
"1.0.18"
],
[
"<",
"1.1"
]
]
},
{
"name": "geoutils",
"specs": [
[
"==",
"0.1.12"
]
]
},
{
"name": "pip",
"specs": []
},
{
"name": "affine",
"specs": []
},
{
"name": "pandas",
"specs": []
},
{
"name": "pyogrio",
"specs": []
},
{
"name": "shapely",
"specs": []
}
],
"lcname": "xdem"
}