Skip to main content

Cloudfetch

PyPI version Documentation CI Tests Python Versions License: MIT

Tired of endlessly clicking through portals to download LiDAR data? Is your area of interest always on intersection of 4 neighbouring tiles?

Cloudfetch is a library for downloading arbitrary areas of large remote point cloud datasets. Designed for ease of use and automated processing It takes care of the repetative tasks associated with working with point clouds and leaves more time for your research or analysis. It leverages PDAL (Point Data Abstraction Library) and COPC (Cloud Optimized Point Clouds) under the hood to crop, merge, and filter point cloud tiles seamlessly.

Features

  • Custom Areas of Interest (AOI): Define arbitrary polygons to query specific geographic regions rather than downloading entire dataset tiles.
  • Interactive Polygon Drawing: Includes an interactive map widget powered by tkintermapview allowing users to draw AOIs directly through a GUI.
  • Multiple Open Datasets: Built-in support for multiple national remote point cloud datasets, including the Dutch AHN series, French IGN LiDAR HD, and Canadian CanElevation.
  • Extendible Architecture Integrate new data sources by subclassing the abstract PointCloudProvider. Developers only need to implement a single get_index method to retrieve tile URLs, and the base class will automatically handle the heavy lifting of downloading, cropping, and merging via PDAL.
  • Provider Chaining: Use ProviderChain to automatically attempt downloads across multiple datasets in sequence (e.g., trying AHN6, and falling back to AHN5 if data is unavailable).
  • Dynamic Poisson Sampling: Control the output density via minimum point spacing (Poisson thinning) to keep file sizes manageable.

Who cloudfetch is for

Cloudfetch is basically a part of my Thesis at TU Delft that got out of hand. After a few hours of clicking through portals and dragging files around had me frustrated, I decided to spend 10x that time building this. Basically, while anyone is welcome to use or copy cloudfetch keep in mind that:

  • ✅ If you are doing analysis/research using airborne LiDAR this library will probably be a good fit.

  • ✅ If you just want to play around with downloading your favorite landmark and know a little bit of python this is probably a fun way to get started.

  • ▶️ If you are building a product and need stable continued acces to point cloud data this is probably not for you. At least until the project reaches 1.0.0, which it might never.

  • ✖️ If you want a simple one-time download or dont know any python you should use one of the many online portals, they are not as bad as I say. For AHN you can for example use this very nice one provided by het Waterschapshuis

Installation

cloudfetch requires Python 3.10 or higher.

Because this library relies heavily on PDAL for its C++ point cloud processing capabilities, you must install the underlying PDAL binaries on your system before installing this package. Standard pip cannot build these C++ dependencies reliably.

Step 1: Install PDAL (Prerequisite)

I strongly recommend using a package manager like conda or its (in my opinion better) alternative pixi to install the PDAL Python bindings and binaries:

Using Conda/Mamba:

conda install -c conda-forge python-pdal

Using Pixi:

pixi add pdal python-pdal

(Note: Advanced users can also install PDAL via system package managers like brew install pdal or apt-get install pdal, but Conda/Pixi is the safest route).

Step 2: Install cloudfetch

Once PDAL is installed in your environment, you can safely install cloudfetch using pip:

pip install cloudfetch

Or through the Pixi CLI:

pixi add --pypi cloudfetch

Quickstart

Below is a basic example demonstrating how to draw an AOI interactively, chain two AHN datasets together, and download the resulting point cloud.

import logging

from cloudfetch import AHN5, AHN6
from cloudfetch.base import AOIPolygon, ProviderChain

# Set up logging to track the download and PDAL processing
logging.basicConfig(
    level=logging.INFO, format="[%(levelname)s] | %(name)s | %(message)s"
)

def main():
    # 1. Prompt the user to draw an Area of Interest on an interactive map
    aoi_rdnew = AOIPolygon.get_from_user("Draw AOI for AHN demo")

    # 2. Initialize the dataset providers
    ahn6 = AHN6(data_dir="./data")
    ahn5 = AHN5(data_dir="./data")

    # 3. Chain them: The library will try AHN6 first, then fallback to AHN5
    ahn_chain = ProviderChain(providers=[ahn6, ahn5])

    # 4. Fetch the data, which will be merged, cropped, and saved as COPC.LAZ
    result_path = ahn_chain.fetch(
        aoi=aoi_rdnew.polygon,
        aoi_crs=aoi_rdnew.crs,
        output_path="./data/my_output.copc.laz",
    )

    print(f"Result saved to: {result_path}")


if __name__ == "__main__":
    main()

Loading Geometries from Files

If you already have a predefined shape (such as a GeoJSON file), you can bypass the UI and load the polygon directly:

aoi = AOIPolygon.get_from_file(Path("my_boundary.geojson"))

Adjusting Density

You can dynamically thin the dataset to a specific minimum point spacing by supplying a sampling_radius float (in coordinate units) to the fetch() method:

# Apply a 2.0 coordinate unit radius for Poisson thinning
provider.fetch(aoi=aoi.polygon, sampling_radius=2.0)

Supported Datasets

The library currently supports the following dataset providers out of the box:

License & Authors

  • Author: Yair Roorda.
  • License: MIT License.

Metadata

Release files for cloudfetch 0.2.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 cloudfetch 0.2.0
File Size Uploaded
cloudfetch-0.2.0.tar.gz 24.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cloudfetch 0.2.0
File Interpreter ABI Platform
cloudfetch-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 42.2 kB

Release files / cloudfetch-0.2.0.tar.gz

Download URL cloudfetch-0.2.0.tar.gz
Size 24.6 kB
Tags Source
SHA-256 checksum
How to use checksums
5a51ad77bff94a2b8c6f14d3df220e33f6e1fd0be616bdb76e0544525b57e83d
BLAKE2b-256 checksum
How to use checksums
b1fd7b9319ae99a853fb63679d65c4fb6c59a1717c1dcfc085c4c385839d122d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 13, 2026.

Transparency log

Release files / cloudfetch-0.2.0-py3-none-any.whl

Download URL cloudfetch-0.2.0-py3-none-any.whl
Size 17.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4eb667478aec6f9b5c2d945a0248c289f9aabde0ca2b55957a21c046163a06f2
BLAKE2b-256 checksum
How to use checksums
c49ff87819e83fab3fd11ac97d76b2e4c5240acc57e7545d7ae9b9687a79f5bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 13, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.1

2 release files

This release

0.2.0 This release

2 release files

0.1.3

2 release files

0.1.2

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