Git Product home page Git Product logo

xdem's Introduction

xdem

Set of tools to manipulate Digital Elevation Models (DEMs)

More documentation to come!

Documentation Status build Conda Version Conda Platforms Conda Downloads Coverage Status

To cite this package: Zenodo

Installation

With conda (recommended)

conda install -c conda-forge --strict-channel-priority xdem

The --strict-channel-priority flag seems essential for Windows installs to function correctly, and is recommended for UNIX-based systems as well.

Solving dependencies can take a long time with conda. To speed up this, consider installing mamba:

conda install mamba -n base -c conda-forge

Once installed, the same commands can be run by simply replacing conda by mamba. More details available through the mamba project.

If running into the sklearn error ImportError: dlopen: cannot load any more object with static TLS, your system needs to update its glibc (see details here). If you have no administrator right on the system, you might be able to circumvent this issue by installing a working environment with specific downgraded versions of scikit-learn and numpy:

conda create -n xdem-env -c conda-forge xdem scikit-learn==0.20.3 numpy==1.19.*

On very old systems, if the above install results in segmentation faults, try setting more specifically numpy==1.19.2=py37h54aff64_0 (worked with Debian 8.11, GLIBC 2.19).

Installing with pip

NOTE: Setting up GDAL and PROJ may need some extra steps, depending on your operating system and configuration.

pip install xdem

Installing for contributors

Recommended: Use conda for depencency solving.

$ git clone https://github.com/GlacioHack/xdem.git
$ cd ./xdem
$ conda env create -f dev-environment.yml
$ conda activate xdem
$ pip install -e .

After installing, we recommend to check that everything is working by running the tests:

$ pytest -rA

Structure

xdem are for now composed of three libraries:

  • coreg.py with tools covering differet aspects of DEM coregistration
  • spatial_tools.py for spatial operations on DEMs
  • dem.py for DEM-specific operations, such as vertical datum correction.

How to contribute

You can find ways to improve the libraries in the issues section. All contributions are welcome. To avoid conflicts, it is suggested to use separate branches for each implementation. All changes must then be submitted to the dev branch using pull requests. Each PR must be reviewed by at least one other person.

Please see our contribution page for more detailed instructions.

Documentation

See the documentation at https://xdem.readthedocs.io

Testing - again please read!

These tools are only valuable if we can rely on them to perform exactly as we expect. So, we need testing. Please create tests for every function that you make, as much as you are able. Guidance/examples here for the moment: https://github.com/GeoUtils/georaster/blob/master/test/test_georaster.py https://github.com/corteva/rioxarray/blob/master/test/integration/test_integration__io.py

Examples

Coregister a DEM to another DEM

import xdem

reference_dem = xdem.DEM("path/to/reference.tif")
dem_to_be_aligned = xdem.DEM("path/to/dem.tif")

nuth_kaab = xdem.coreg.NuthKaab()

nuth_kaab.fit(reference_dem.data, dem_to_be_aligned.data, transform=reference_dem.transform)


aligned_dem = xdem.DEM.from_array(
	nuth_kaab.apply(dem_to_be_aligned.data, transform=dem_to_be_aligned.transform),
	transform=dem_to_be_aligned.transform,
	crs=dem_to_be_aligned.crs
)

aligned_dem.save("path/to/coreg.tif")

This is an implementation of the Nuth and Kääb (2011) approach. Please see the documentation for more approaches.

Subtract one DEM with another

import xdem

first_dem = xdem.DEM("path/to/first.tif")
second_dem = xdem.DEM("path/to/second.tif")

difference = first_dem - second_dem

difference.save("path/to/difference.tif")

By default, second_dem is reprojected to fit first_dem. This can be switched with the keyword argument reference="second". The resampling method can also be changed (e.g. resampling_method="nearest") from the default "cubic_spline".

xdem's People

Contributors

erikmannerfelt avatar rhugonnet avatar adehecq avatar friedrichknuth avatar atedstone avatar cusicand avatar alessandro-gentilini avatar jlandmann avatar liuh886 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.