Pointcloud processing engine About the library 1.0.1 release now - - PowerPoint PPT Presentation
Pointcloud processing engine About the library 1.0.1 release now - - PowerPoint PPT Presentation
Pointcloud processing engine About the library 1.0.1 release now available (September 2015) (OSGeo4W/64) BSD Licensed (Supports proprietary plugins) C++ development git repo (https://github.com/PDAL/PDAL) pull requests
- 1.0.1 release now available (September 2015) (OSGeo4W/64)
- BSD Licensed (Supports proprietary plugins)
- C++ development
○ git repo (https://github.com/PDAL/PDAL) ○ pull requests welcome
- pdal main command
○ many subcommands (kernels)
- Pipelines (a chain of processing steps)
○ XML processing language ○ VRT like ○ Nesting dolls
About the library
History / Goals
- libLAS development outgrew ASPRS LAS
(Oracle)
- Focused on data management
- Extensibility and integration
- Not just LAS-focused
- Leverage existing tools (GDAL, proj.4,
libgeotiff, Python, PCL)
- readers.buffer
- readers.faux
- readers.geowave
- readers.greyhound
- readers.las
- readers.mrsid
- readers.nitf
- readers.oci
- readers.optech
- readers.pcd
- readers.pgpointcloud
- readers.ply
- readers.qfit
- readers.rxp
- readers.sbet
- readers.sqlite
readers / writers
- writers.derivative
- writers.geowave
- writers.las
- writers.matlab
- writers.nitf
- writers.oci
- writers.ply
- writers.p2g
- writers.pcd
- writers.pgpointcloud
- writers.pclvisualizer
- writers.rialto
- writers.sqlite
- writers.text
filters
- filters.attribute
- filters.colorization
- filters.chipper
- filters.crop
- filters.decimation
- filters.ferry
- filters.hexbin
- filters.mortonorder
- filters.merge
- filters.pclblock
- filters.predicate
- filters.programmable
- filters.range
- filters.reprojection
- filters.sort
- filters.stats
- filters.transformation
- ground
- info
- split
- tindex
- translate
- pipeline
subcommands
- Classifies a pointcloud
○ ground and non-ground points ○ optionally removes non-ground points
- Uses the PCL (PMF) Progressive
Morphological Filter
○ same as a pipeline with PCLBlock ○ also an approximate version (much faster)
Ground
Ground - Before
Ground - After
pdal info --summary source.laz { "pdal_version": "PDAL 1.0.0.b1 (399539)", "summary": {"bounds": {"X": { "max": 581026.95000719489, "min": 580304.60002865398 }, "Y": { "max": 4505023.6300240532, "min": 4504450.3600357873 }, "Z": { "max": 92.11999999999999, "min": -0.78000000000000025 } }, "dimensions": "X, Y, Z, Intensity, ReturnNumber, NumberOfReturns, ScanDirectionFlag, EdgeOfFlightLine, Classification, ScanAngleRank, UserData, PointSourceId", "num_points": 255772, "spatial_reference": "PROJCS["NAD83 / UTM zone 18N" ….]" } }
Info
Top down view
Info --Boundary
Default output
$ pdal info --boundary source.laz
Info --boundary
Add options to command line $ pdal info --boundary source.laz
- -filters.hexbin.threshold=10
- -filters.hexbin.sample_size=10
- -filters.hexbin.edge_size=2
$ pdal info Liberty-Island.ALS70.NYC_2013085-15.laz -p 2633
Info --P (Point)
"Classification": 2, "EdgeOfFlightLine": 0, "GpsTime": 0, "Intensity": 23, "NumberOfReturns": 1, "PointId": 2633, "PointSourceId": 20, "ReturnNumber": 1, "ScanAngleRank": -10, "ScanDirectionFlag": 1, "UserData": 0, "X": 580814.96002865396, "Y": 4504512.6400357876, "Z": 0.02000000000000024
pdal split -i Liberty-Island.ALS70.NYC_2013085-15.laz -o Liberty-Island-Tile.las
- -capacity 50000
Split (Capacity)
pdal split -i Liberty-Island.ALS70.NYC_2013085-15.laz -o Liberty-Island2-Tile. laz --length 100
Split (Length)
- Creates a tile index of pointclouds in any
gdal vector format
- Can then be used for merge/clip
- perations
pdal tindex --merge --tindex filename.ogr --polygon "wkt"
- -filespec output.laz
tindex
pdal tindex --merge --tindex LibertyTindex2.db --filespec clipped_merged_LibertyTinde x.laz --polygon "POLYGON ((-74.0459708 40.690573,
- 74.045082 40.689164,
- 74.046622 40.688406,
- 74.047320 40.690348,
- 74.0459708 40.690573))"
tindex - example
- Basic pointcloud format changes
○ -i myfile.las -o myfile.laz
- also advanced options to the
reader/writer/projection steps
○ --writers.las.system_id="Custom" --writers. las.scale_z=0.00001
System ID: 'Custom' Generating Software: 'PDAL 1.0.0.b1 (399539)' Min X Y Z: 580497.62 4504606.39 -0.78000 Max X Y Z: 580686.27 4504845.65 46.72000
Translate
- Access to the full power of pdal
- allows stacking of range of operations
with one pass through data
- great for programmatically building
workflows
- command line specification of values for
batch processing
Pipeline
$ pdal pipeline range.xml --readers.las. filename=myfile.las --writers.las. filename=myrangefile.laz $ find . -name="*.laz" | xargs pdal pipeline --readers.las.filename={} -- writers.las.filename=newdir/{}
Pipeline - cli values
<Pipeline version="1.0"> <Writer type="writers.las"> <Filter type="filters.range"> <Option name="dimension">Z <Options> <Option name="min">0</Option> <Option name="max">99999</Option> </Options> </Option> <Reader type="readers.las"></Reader> </Filter> </Writer>
- Can use any gdal image source
- Must match projections though
colorization filter
<Pipeline version="1.0"> <Writer type="writers.las"> <Filter type="filters.colorization"> <Option name="raster"> <![CDATA[http://isse.cr.usgs. gov/arcgis/rest/services/Orthoimagery/USGS_EROS_Ortho_1Foot/ImageServer/ exportImage?bbox=580304.600,4504450.360,581026.950,4505023.630 &bboxSR=26918&size=1000, 1000&imageSR=26918&format=tiff&pixelType=U8&noDataInterpretation=esriNoD ataMatchAny&interpolation=+RSP_BilinearInterpolation&f=image]]> </Option> <Reader type="readers.las"> </Reader> </Filter> </Writer> </Pipeline>
New Syntax:
$ pdal translate -i infile.laz -o outfile_color.laz
- -filter filters.colorization --filters.colorization.
raster=myraster.tif
COLORization - cli
Assigning and reprojecing data:
$ pdal pipeline proj.xml
- -readers.las.filename=src.laz
- -writers.las.filename=dest.laz
Assign and project with translate also:
ls *.las | xargs -P10 pdal translate --filters filters.reprojection
- -filters.reprojection.in_srs=epsg:26910
- -filters.reprojection.out_srs=epsg:26911 -i {} -o newdir/{}
<Pipeline version="1.0"> <Writer type="writers.las"> <Filter type="filters.reprojection"> <Option name="in_srs">EPSG:26918</Option> <Option name="out_srs">EPSG:26919</Option> <Reader type="readers.las"/> </Filter> </Writer> </Pipeline>
reprojection filter
p2g writer (DEMs)
<Pipeline version="1.0"> <Writer type="writers.p2g"> <Option name="grid_dist_y">1.0</Option> <Option name="grid_dist_x">1.0</Option> <Option name="output_format">tif</Option> <Option name="output_type">idw</Option> <Option name="filename">destination</Option> <Filter type="filters.range"> <Option name="dimension">Classification <Options> <Option name="equals">2</Option> </Options> </Option> <Reader type="readers.las"> <Option name="filename">source.laz </Option> </Reader> </Filter> </Writer> </Pipeline>
pdal translate -i source.laz -o destination.tif
- -writer=writers.p2g --writers.p2g.grid_dist_y=0.5 --
writers.p2g.grid_dist_x=0.5 --writers.p2g.
- utput_format=tif --writers.p2g.output_type=idw
You can turn the above into a pipeline with
- -pipeline dem_pipeline.xml
p2g writer (DEMs)
plas.io Greyhound Entwine
the kennel
The LASzip compression algorithm refactored for compilation via Emscripten to JavaScript allowing LAS/LAZ viewing with a WebGL enabled browser (FF, Chrome, IE11, Safari)
plas.io
- RESTful HTTP environment for serving
and streaming point cloud data
- LAZ-style compression
- Dynamic schema
- Metadata