Getting Started

How to guide on installing PCHandler

Dependencies

Core Libraries

  • NumPy — Fast N-dimensional arrays and numerical operations that power core point-cloud computations.

  • GeoPandas — High-level geospatial data structures used for GIS-style processing and analysis.

  • Shapely — Geometric predicates and operations for working with 2D geometry (buffers, intersections, etc.).

  • alphashape — Alpha-shape computation to derive concave hulls/outlines from point sets.

Point Cloud I/O

  • plyfile — Read/write PLY files (ASCII/Binary) with attribute preservation.

  • laspy — Read/write LAS/LAZ lidar point cloud formats, including point attributes.

Visualization / 3D Operations

  • Open3D — Visualization and selected 3D geometry utilities for point clouds and meshes.

  • py4dgeo - Library containing other geomonitoring algorithms from Heidelberg University.

Utilities

  • joblib — Simple parallelism and caching for speeding up CPU-bound workflows.

Optional GPU Acceleration

  • cuDF — GPU DataFrame operations to accelerate tabular point attributes and transforms.

  • cuSpatial — GPU-accelerated spatial/trajectory operations for large-scale geospatial workloads.

  • cuML — GPU-accelerated machine learning algorithms useful for clustering, outlier detection, and similar tasks.

Install from GitHub

# (optional) create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate  # on Windows: .venv\Scripts\activate

# clone and install
git clone https://github.com/your-org/pchandler.git
cd pchandler
python -m pip install -e .  # editable install for development

Quick Example

To ensure PCHandler has been properly installed, you can try the following code:

import numpy as np
from pchandler import PointCloudData

 offset = [10_000_000, -500_000, 20_000]

# Create an (N, 3) array of XYZ coordinates
 points = np.random.rand(10, 3) * 1000 - 500 + offset

# Initialize the point cloud
pcd = PointCloudData(points)

# (Optional) confirm basic properties
print(f"{points.shape=}")  # (100, 3)
print(f"{pcd.xyz=}")
print(f"{pcd.numerical_optimization_shift=}")