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
-------------------
.. code-block:: bash
# (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:
.. code-block:: python
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=}")