GIF created using JuxtaposeJS
The current gridded DTM and DSM for the Netherlands has some flaws, showing many missing pixels where the interpolation method was unable to determine a value, and has holes where buildings and water bodies were removed from the dataset.
The goal of this project is to improve upon the results available by creating DSM/DTM results that no longer have no-data values. This creates rasters with complete coverage of their target area, ensuring that every pixel value has an accurate height assigned to it.
This has mainly been made possible by the following Python packages and binaries:
The tool is made to run an amount of threads in parallel to ensure fast processing. Please note that each thread needs around 20GB of memory to run. Optimizations can be made if memory use for quadrant-based IDW is reduced, and/or for Startin.
- Install all packages specified in requirements.txt
- Configure your settings in the config.ini
- Global parameters and folder paths are essential to change
- Further parameters are optimized for use with AHN3 dataset
- Run main.py
Read the full documentation at http://geo11012020ahn3.rtfd.io/
For any hiccups you encounter, please create an issue
For more interpolation methods that have been implemented in the process of this project, see this repository. It holds six different interpolation methods that can be used to replace the ones featured here, and also contains information on how to use them.
The chosen interpolation methods in this repository have been proven to provide the best results for our datasets, and are the most robust encountered.
For DTM a Laplace interpolation is used based on Startin's Delaunay Triangulation, which in turn is based on Rust, making it extremely fast to execute.
For DSM a quadrant-based IDW is used, which is implemented in Python. This method is limited by the amount of raster cells it needs to interpolate for and the speed at which Python can do so. Depending on how small your base raster cell size is this will take a while to run.
Error handling is partially implemented; no errors should occur that will break the processing loop, though some of these errors may result in partial outcomes.
Some of the files include a NO_DATA value defined at the top of the file as -9999, if this needs changing this is where to find it.
- PDAL/GDAL won't install for various reasons
- Start from a clean Python 3.7 Anaconda virtual environment
- First install PDAL and GDAL, then the other requirements