Source Data
Looking at Red Rocks.
![](https://i0.wp.com/sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-8.png?fit=625%2C485)
PDAL pipeline
# This is a hjson file, https://hjson.org/
# Linux bash
#GET=https://github.com/hjson/hjson-go/releases/download/v3.0.0/linux_amd64.tar.gz
# macOS bash
#GET=https://github.com/hjson/hjson-go/releases/download/v3.0.0/darwin_amd64.tar.gz
# Install
#curl -sSL $GET | sudo tar -xz -C /usr/local/bin
# Translate to Json
#hjson -j pipeline.hjson > pipeline.json
#pdal pipeline pipeline.json --verbose 8
{
pipeline:
[
# Input
{
# read from our ept server
# up to 0.5m resolutions
# type: readers.ept
# bounds: ([802000, 802500], [2493000, 2493500])
# filename: http://localhost:8080/ept.json
filename: red-rocks.laz
# filename: http://na.entwine.io/red-rocks/ept.json
# resolution: 0.5
}
# {
# # read from our las file
# type: readers.las
# filename: small500-no-outliers.laz
# }
# Filters
{
# adds a classification value of 7 to the noise points
type: filters.outlier
# method: radius
# radius: 1.0
# min_k: 8 # min number of neighbors in radius
method: statistical
mean_k: 8
multiplier: 3
}
{
# voxel-based sampling filter
# reduce the size of the pc
# cell size of 0.2 meters in xyz
type: filters.voxelcenternearestneighbor
cell: 0.1
}
{
# Need to assign point cloud dimension NumberOfReturns 1
# Otherwise: "No returns to process."
type:filters.assign
assignment : NumberOfReturns[0:0]=1
}
{
# Ground classification, ignore the noise points
type: filters.smrf
ignore:Classification[7:7]
}
{
# only allow ground classified points
type: filters.range
limits: Classification[2:2]
}
{
# OPTIONAL
# turn this into a DEM 3D model
# do not use multiple types
# type: filters.delaunay
type: filters.poisson
}
# Output
# # OPTIONAL PLY IF DEM
{
# write to ply
type:writers.ply
filename: red-rocks-smrf-only-poisson.ply
faces:true
storage_mode: default
}
# Output
# {
# # write to laz
# type:writers.las
# filename: red-rocks-ground.laz
# }
]
}
https://gist.github.com/sunapi386/9a9ece302d646ee80a72fc494423a633
Mesh Results
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-1.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-6.png)
Greedy Projection
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-2.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-5.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-7.png)
Poisson
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-3.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-4.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-11.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-12.png)
To go a little more “detailed”, I put depth to 12. The file went from 84M to 789M. And it is definitely overkill for 3D printing.
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-13.png)
![](https://sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-14.png)
Grid Projection
Program failed to compute the grid projection.
pdal pipeline dtm-gdal.json --verbose 8
(PDAL Debug) Debugging...
(pdal pipeline Debug) Attempting to load plugin '/usr/local/lib/libpdal_plugin_filter_gridprojection.so'.
(pdal pipeline Debug) Loaded plugin '/usr/local/lib/libpdal_plugin_filter_gridprojection.so'.
(pdal pipeline Debug) Initialized plugin '/usr/local/lib/libpdal_plugin_filter_gridprojection.so'.
(pdal pipeline readers.las Debug) GDAL debug: OGRSpatialReference::Validate: No root pointer.
(pdal pipeline readers.las Debug) GDAL debug: OGRSpatialReference::Validate: No root pointer.
(pdal pipeline readers.las Debug) GDAL debug: OGRSpatialReference::Validate: No root pointer.
(pdal pipeline Debug) Executing pipeline in standard mode.
(pdal pipeline filters.gridprojection Debug) Process GridProjectionFilter...
[pcl::GridProjection::getBoundingBox] Size of Bounding Box is [5.500000, 6.000000, 5.000000]
[pcl::GridProjection::getBoundingBox] Lower left point is [-2.500000, -2.500000, -2.500000]
[pcl::GridProjection::getBoundingBox] Upper left point is [3.000000, 3.500000, 2.500000]
[pcl::GridProjection::getBoundingBox] Padding size: 3
[pcl::GridProjection::getBoundingBox] Leaf size: 0.500000
(pdal pipeline filters.gridprojection Debug) 3141373 before, 180 after
(pdal pipeline filters.gridprojection Debug) 180
double free or corruption (!prev)
fish: “pdal pipeline dtm-gdal.json --v…” terminated by signal SIGABRT (Abort)
Cura 3D Print Slice
Cura can take STL inputs. Converting the PLY into STL is simple.
sudo apt install openctm-tools
Then ctmconv red-rocks-smrf-only-delaunay.ply red-rocks-smrf-only-delaunay.stl
can convert ply to stl
ctmviewer red-rocks-smrf-only-delaunay.ply
visualizes the ply. Which is what I used above.
![](https://i0.wp.com/sunapi386.ca/wordpress/wp-content/uploads/2019/04/image-10.png?fit=625%2C523)
Looks like the Poisson is prettier.
I’ll continue writing this latter, until I have something printed. 🙂