Skip to main content

ign-pdal-tools

This repo contains various python tools based on PDAL that are used to work on LiDAR data in the LidarHD project at IGN (Institut National de l'Information Géographique et Forestière / French National Institute of Geographic and Forest Information) to work on LiDAR data.

We've decided to make them available because think that they may be useful to others, but this repo is NOT meant to be substantially modified from community input, and may be amended/completed depending on the fonctionalities that our team needs.

Content

This library contains pdal-based tools to:

  • colorize a point cloud using images from Geoplateforme / cartes.gouv.fr (a portal from French government providing access to aerial imagery)
  • stitch together LAS files using their location
  • standardize LAS files
  • unlock LAS files generated by TerraSolid

Installation / Usage

This library can be used in different ways:

  • directly from sources: make install creates a mamba environment with the required dependencies
  • installed with pip from pypi: pip install ign-pdal-tools
  • used in a docker container: see documentation Dockerfile

More details on the contained tools

Colorization

  • color.py: Colorize a point cloud from Geoplateforme data

Las infos

Misc tools to get information on a las file, eg. retrieve metadata, find epsg value, find bounds, get parameters to pass to a writer. They are intended to be used from the pdaltools module, for example:

from pdaltools import las_infos

filename = ...
las_infos.las_info_metadata(filename)

Point cloud infos

Misc tools to get information on a point cloud (numpy array). Eg. get expected origin of a point cloud based on a square tiling:

from pdaltools import pcd_infos

points = ...
pcd_infos.get_pointcloud_origin_from_tile_width(points, tile_width=1000)

Stitching

  • las_clip.py: crop a LAS file using 2d bounding box
  • las_merge.py: merge a LAS file with its neighbors according to their filenames
  • las_add_buffer.py: add points to a LAS file from a buffer (border) from its neighbors (using filenames to locate neighbors)
  • replace_area_in_pointcloud.py: replace the points from a LAS file by the points of another LAS file inside areas defined in a vector file (geojson, shapefile)

WARNING: In las_merge.py and las_add_buffer.py, filenames are used to get the LAS files extents and to find neighbors. The naming convention is {prefix1}_{prefix2}_{xcoord}_{ycoord}_{postfix})} (eg. Semis_2021_0770_6278_LA93_IGN69.laz). By default, xcoord and ycoord are given in kilometers and the shape of the tile is 1 km * 1 km

Standardization

Unlock

unlock_file.py: overwrite a LAS file in case PDAL raises this error: readers.las: Global encoding WKT flag not set for point format 6 - 10. which is due to TerraSolid malformed LAS output for LAS1.4 files with point format 6 to 10.

Add points in pointcloud

add_points_in_pointcloud.py: add points from some vector files (ex: shp, geojson, ...) inside Las/Laz:

  • 2 kinds of geometries are handled:
    • if the geometries in the vector file are points, they are added directly to the las file
    • if the geometries are lines, points are added along this line using a spacing parameter
  • In case the points are 2D only, Z can be provided as a feature property (parametrized via altitude_column)
  • The Classification attribute for these points is parametrized via virtual_points_classes
  • All the other attributes are set to 0.

Dev / Build

Contribute

Every time the code is changed, think of updating the version file: pdaltools/_version.py

Please log your changes in CHANGELOG.md

Before committing your changes, run the precommit hooks. They can be installed to run automatically with make install-precommit

Tests

Create the conda environment: make install

Run unit tests: make testing

Pip package

To generate a pip package and deploy it on pypi, use the Makefile at the root of the repo:

  • make build: build the library
  • make install: install the library in an editable way (pip -e)
  • make deploy : deploy it on pypi

Docker image

To build a docker image with the library installed: make docker-build

To test the docker image: make docker-test

To build a docker image with a custom version of PDAL: make docker-build-custom-pdal ; the custom version is defined in the Makefile (see Makefile for details)

Release files for ign-pdal-tools 1.18.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ign-pdal-tools 1.18.0
File Size Uploaded
ign_pdal_tools-1.18.0.tar.gz 66.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ign-pdal-tools 1.18.0
File Interpreter ABI Platform
ign_pdal_tools-1.18.0-py3-none-any.whl Python 3 none any Details

Total release size: 112.9 kB

Release files / ign_pdal_tools-1.18.0.tar.gz

Download URL ign_pdal_tools-1.18.0.tar.gz
Size 66.5 kB
Tags Source
SHA-256 checksum
How to use checksums
ee50b19d99eb2779659bab808f718d587f23c7d8868c64cf08e99ef41810a7fb
BLAKE2b-256 checksum
How to use checksums
f090738d4a92f8061f015adfaf0544a33ba9edd31ea2cdb8874545a3d4033124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release files / ign_pdal_tools-1.18.0-py3-none-any.whl

Download URL ign_pdal_tools-1.18.0-py3-none-any.whl
Size 46.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e82899ac096e43f33647d03e7c168ae6f8203f905d4071588a445f648907f275
BLAKE2b-256 checksum
How to use checksums
2428a3bc004b9bfe4add19b10d32b5007bb3902bbf1c97aa1b051c4aaaf40175
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 7, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.18.0 This release

2 release files

1.16.0

2 release files

1.15.8

2 release files

1.15.7

2 release files

1.15.6

2 release files

1.15.0

2 release files

1.14.0

2 release files

1.13.0

2 release files

1.12.3

2 release files

1.12.2

2 release files

1.12.0

2 release files

1.10.0

2 release files

1.8.1

2 release files

1.8.0

2 release files

1.7.11

2 release files

1.7.9

2 release files

1.7.8

2 release files

1.7.7

2 release files

1.7.6

2 release files

1.7.5

2 release files

1.7.4

2 release files

1.7.3

2 release files

1.7.2

2 release files

1.7.1

2 release files

1.6.0

2 release files

1.5.2

2 release files

1.5.1

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.5.6

2 release files

0.5.3

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page