Skip to main content

Using the Point Cloud Tiler On-Premises

Information

Looking for on-premises 3D Tiling? Contact sales for an evaluation. Contact Sales.

Setup

Extract the contents of Cesium-ion-3D-Tiling-Pipeline.zip.

The main executable is point-cloud-tiler and can be found under bin.

If you wish to run the examples download and extract SampleData.zip into a new SampleData directory.

Windows

Windows binaries require Visual C++ Redistributable for Visual Studio 2017. Download and run the installer.

Using the tiler

A typical tiler command follows the following format:

point-cloud-tiler -i <input.las> -o <output-directory>

For example, a simple LAZ point cloud of a house is included at SampleData/House.laz. Tile it by running:

point-cloud-tiler -i SampleData/House.laz -o House_Tiles

This will produce a 3D Tiles tileset in the House_Tiles directory.

You can also convert all LAS files in a directory and recursively in its subdirectories.

point-cloud-tiler -i SampleData -o House_Tiles

If the input point cloud is not georeferenced, longitude, latitude, and height above the WGS84 ellipsoid may be supplied as shown below.

point-cloud-tiler -i SampleData/House.laz -o House_Tiles --longitude=-105.290735 --latitude=40.040382 --height=1680.034796

The tiler has built-in support for Draco compression which is enabled by default. Configure the precision with:

point-cloud-tiler -i SampleData/House.laz -o Tileset --draco-precision-meters=0.005

To disable compression, use the following.

point-cloud-tiler -i SampleData/House.laz -o Tileset --compression=NONE

By default, the tiler preserves color, classification, and intensity per-point attributes. Use the following options to discard these attributes and reduce the tileset size.

point-cloud-tiler -i SampleData/House.laz -o House_Tiles --discard-color --discard-classification --discard-intensity

Memory usage and concurrency may be supplied for fine-grained control of system resources. When running inside Docker, it is recommended to set these manually since containerization prevents the tiler from querying system resources.

point-cloud-tiler -i SampleData/House.laz -o House_Tiles --memory=16000 --concurrency=8

Note: When working with big point clouds, ensure that there is enough space on disk for temporary files used during tiling. Typically the amount of temporary space needed is no more than the size of the input point cloud. Temporary files are deleted when the tiler finishes.

Available options

Below is a full list of command line options to configure the tiler.

Basic options

Option                                            DescriptionRequiredDefault
--help, -hDisplay help message.
--version, -vDisplay version number.
--input, -iOne or more input files or directories (recursive). Supported types: .las, .laz. Required if --input-list is not supplied. Cannot be used with --input-list.
--input-listA text file with a list of files to process, one file per line. Supported types: .las, .laz. Required if --input is not supplied. Cannot be used with --input
--output, -oThe path to the output directory. Will overwrite the existing directory if found, or otherwise create a new directory.
--quietSuppress output during tiling.false
--verboseShow verbose output.false
--show-statistics-onlyShow statistics for the input point cloud. Does not run the tiler.false
--memory, -mLimits the maximum memory used by the tiler in megabytes. By default, the tiler will use the available system memory. If the input point cloud exceeds this limit, the tiler will run in out-of-core mode. When running inside Docker, it is recommended to set this manually since containerization prevents the tiler from querying system resources.System available.
--concurrency, -xMaximum number of cores to use for CPU processing. Actual utilization depends on system resources. When running inside Docker, it is recommended to set this manually since containerization prevents the tiler from querying system resources.System available.
--io-concurrencyMaximum number of concurrent threads to use for I/O processing. Defaults to the value used for concurrency. It is recommended to set this to 1 for slower storage devices such as hard disk drives.concurrency
--compressionThe type of point compression to use. Options are DRACO, QUANTIZE, and NONE.DRACO
--gzipSave the tileset with gzip compression.false

Advanced options

Option                                            DescriptionRequiredDefault
--working-directoryWorking directory for saving temporary files during tiling. Defaults to the system's temporary directory. Typically the amount of temporary space needed is no more than the size of the input point cloud. This directory will be deleted when the tiler finishes.
--draco-compression-levelDraco compression level between 0 and 10. In general, the highest setting, 10, will have the most compression but worst decompression speed. 0 will have the least compression but best decompression speed. Does not affect precision.7
--draco-precision-metersPrecision in meters for Draco compression. Defaults to millimeter precision. Set to 0 for lossless compression, which produces larger tileset sizes.0.001
--quadtreeWhether to build a quadtree instead of an octree. This is often suitable for flatter point clouds, such as those produced by aerial LiDAR.false
--input-crsThe coordinate reference system to apply to the data. Overrides any CRS embedded in the data itself. Can be specified as a WKT, proj.4 or EPSG string.
--longitudeThe longitude in EPSG:4326 coordinates (degrees) at which to place the point cloud's origin when the point cloud is not georeferenced.
--latitudeThe latitude in EPSG:4326 coordinates (degrees) at which to place the point cloud's origin when the point cloud is not georeferenced.
--heightThe height in meters relative to the WGS84 ellipsoid at which to place the point cloud's origin when the point cloud is not georeferenced.
--headingThe rotation in degrees from the local north direction where a positive angle is increasing eastward. Only applicable when the point cloud is not georeferenced.0.0
--pitchThe rotation in degrees from the local east-north plane. Positive pitch angles are above the plane. Negative pitch angles are below the plane. Only applicable when the point cloud is not georeferenced.0.0
--rollThe rotation in degrees applied to the local east axis. Only applicable when the point cloud is not georeferenced.0.0
--scale-xThe amount to scale in the x dimension. Scaling is not applied if the point cloud is georeferenced.1.0
--scale-yThe amount to scale in the y dimension. Scaling is not applied if the point cloud is georeferenced.1.0
--scale-zThe amount to scale in the z dimension. Scaling is not applied if the point cloud is georeferenced.1.0
--minimum-heightThe height in meters relative to the WGS84 ellipsoid below which points are removed. A simple metric for removing outliers.
--maximum-heightThe height in meters relative to the WGS84 ellipsoid above which points are removed. A simple metric for removing outliers.
--keep-outliersBypass logic that detects and removes outliers.false
--outlier-sigma-countFor outlier detection, how many standard deviations from the mean a point has to be to be considered an outlier.15
--outlier-sweep-countFor outlier detection, caps how many iterations are performed to determine a best fit bounding volume.2
--discard-colorDiscard per-point color attributes.false
--discard-intensityDiscard per-point intensity attributes.false
--discard-classificationDiscard per-point classification attributes.false
--pretty-jsonWrite out tileset.json with human-readable formatting.false
--tileset-versionA version number or string to assign to the tileset. This is written to tileset.json and can be used as metadata to track changes.

Next steps

Now that we've tiled our point clouds into 3D Tiles, the next step is to stream them into CesiumJS. All we need is a web server to host our tiles, and then we can pass a URL to our tileset as shown below.

var viewer = new Cesium.Viewer('cesiumContainer');

var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
    url : '<URL to tileset.json>'
}));

viewer.zoomTo(tileset);

The Hosting 3D Content tutorial walks you through setting up the Cesium ion Asset Server and streaming 3D content into CesiumJS.

License

Third-party licenses used by the tilers can be found in ThirdParty.pdf.

Patents: US10438092

Patents Pending: US17/100,522 US63/052,864