PDAL
Point Data Abstraction Library
What can you do with point clouds
- Visualization
- Exploitation
Pew, pew, pew...
Point cloud data acquisition is typically derived from active sensors like
lasers, sonar, and radar.
A new class of data
Point clouds are the precursor to meshes and triangulations, and hey have a number
of properties that make them different than a typical WKT POINT you
might see in the rest of the GIS industry.
LiDAR point clouds provide surface characterization.
A new class of data
- More than typical XYZ attributes -- XYZRGBIC
- Irregularly spaced - not a grid like a raster
- Extremely dense
- Point representation of a sphere with a specified uncertainty
GDAL PDAL's niche
- On-disk or over-the-wire data format is a function of software requirements
- Immature industry-wide standards (think vector world pre-shapefile)
- Formats are proliferating quickly as the lidar/radar/sonar software industry expands
- Need for basic processing operations
What does PDAL provide?
- Reusable C++ software components
- Liberal licensing (BSD)
- Command-line apps
- Process description XML mini-language
API Components
Three major components
Filters
- Byteswap
- Caching
- Tiling
- Color normalization
- Raster overlay
- Box/WKT cropping
- Rank decimation
Filters cont...
- Spatial indexing
- Reprojection
- Mosaic'ing
- Python predicate filtering
- Python programming filter
- Dimension scaling
- Statistics cumulation
- Dimension selection
Basic pipeline
More stages...
Even more stages...
Python Programmable Filter
import numpy as np
def multiply_z(ins,outs):
Z = ins[‘Z']
Z = Z * 10.0
outs[‘Z'] = Z
return True
Python Predicate Filter
import numpy as np
def filter(ins,outs):
cls = ins['Classification']
keep_classes = [1,2]
# Use the first test for our base array.
keep = np.equal(cls, keep_classes[0])
# For 1:n, test each predicate and join back
# to our existing predicate array
for k in range(1,len(keep_classes)):
t = np.equal(cls, keep_classes[k])
keep = keep + t
outs['Mask'] = keep
return True
Credits
- Howard Butler
- Michael Gerlek
- Mateusz Loskot
- Bradley Chambers
- Michael Rosen
- Kirk McKelvey