Using the Point Cloud Tiler On-Premises
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 | Description | Required | Default |
---|---|---|---|
--help , -h | Display help message. | ||
--version , -v | Display version number. | ||
--input , -i | One 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-list | A 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 , -o | The path to the output directory. Will overwrite the existing directory if found, or otherwise create a new directory. | ✓ | |
--quiet | Suppress output during tiling. | false | |
--verbose | Show verbose output. | false | |
--show-statistics-only | Show statistics for the input point cloud. Does not run the tiler. | false | |
--memory , -m | Limits 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 , -x | Maximum 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-concurrency | Maximum 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 | |
--compression | The type of point compression to use. Options are DRACO , QUANTIZE , and NONE . | DRACO | |
--gzip | Save the tileset with gzip compression. | false |
Advanced options
Option | Description | Required | Default |
---|---|---|---|
--working-directory | Working 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-level | Draco 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-meters | Precision in meters for Draco compression. Defaults to millimeter precision. Set to 0 for lossless compression, which produces larger tileset sizes. | 0.001 | |
--quadtree | Whether 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-crs | The 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. | ||
--longitude | The longitude in EPSG:4326 coordinates (degrees) at which to place the point cloud's origin when the point cloud is not georeferenced. | ||
--latitude | The latitude in EPSG:4326 coordinates (degrees) at which to place the point cloud's origin when the point cloud is not georeferenced. | ||
--height | The height in meters relative to the WGS84 ellipsoid at which to place the point cloud's origin when the point cloud is not georeferenced. | ||
--heading | The 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 | |
--pitch | The 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 | |
--roll | The rotation in degrees applied to the local east axis. Only applicable when the point cloud is not georeferenced. | 0.0 | |
--scale-x | The amount to scale in the x dimension. Scaling is not applied if the point cloud is georeferenced. | 1.0 | |
--scale-y | The amount to scale in the y dimension. Scaling is not applied if the point cloud is georeferenced. | 1.0 | |
--scale-z | The amount to scale in the z dimension. Scaling is not applied if the point cloud is georeferenced. | 1.0 | |
--minimum-height | The height in meters relative to the WGS84 ellipsoid below which points are removed. A simple metric for removing outliers. | ||
--maximum-height | The height in meters relative to the WGS84 ellipsoid above which points are removed. A simple metric for removing outliers. | ||
--keep-outliers | Bypass logic that detects and removes outliers. | false | |
--outlier-sigma-count | For outlier detection, how many standard deviations from the mean a point has to be to be considered an outlier. | 15 | |
--outlier-sweep-count | For outlier detection, caps how many iterations are performed to determine a best fit bounding volume. | 2 | |
--discard-color | Discard per-point color attributes. | false | |
--discard-intensity | Discard per-point intensity attributes. | false | |
--discard-classification | Discard per-point classification attributes. | false | |
--pretty-json | Write out tileset.json with human-readable formatting. | false | |
--tileset-version | A 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