Expand description
Port of the Martin Isenburg’s laszip compression to Rust
LasZipCompressor
and LasZipDecompressor
are the two types
that user wishing to compress and / or decompress LAZ data should use.
LasZipCompressor Examples
use laz::{LasZipError, LasZipCompressor, LazItemType, LazItemRecordBuilder};
// Here we use a Cursor but a std::fs::File will work just fine
let mut compressed_output = std::io::Cursor::new(vec![]);
// LazItem may have multiple versions of the compression algorithm
// the builder selects a default one
let items = LazItemRecordBuilder::new()
.add_item(LazItemType::Point10)
.add_item(LazItemType::RGB12)
.build();
let mut compressor = LasZipCompressor::from_laz_items(&mut compressed_output, items)?;
let point = vec![0u8; 26];
compressor.compress_one(&point)?;
compressor.done()?; // don't forget to call done when you are...done compressing
LasZipCompressors can also be contructed from a LazVlr if you need to change the Chunk size or if you have the LazVlr from the orignal LAZ file that you want to write back
use laz::{LasZipError, LasZipCompressor, LazItemType, LazItemRecordBuilder, LazVlrBuilder};
let mut compressed_output = std::io::Cursor::new(vec![]);
let items = LazItemRecordBuilder::new()
.add_item(LazItemType::Point10)
.add_item(LazItemType::RGB12)
.build();
let vlr = LazVlrBuilder::from_laz_items(items)
.with_chunk_size(5_000)
.build();
let mut compressor = LasZipCompressor::new(&mut compressed_output, vlr)?;
let point = vec![0u8; 26];
compressor.compress_one(&point)?;
compressor.done()?;
To create a LasZipDecompressor
you need to have the record_data found in the LAZ file.
LasZipDecompressor Examples
use laz::{LasZipError, LazVlr, LasZipDecompressor};
use std::fs::File;
let mut laz_file = File::open("tests/data/point10.laz")?;
seek_to_start_of_laszip_record_data(&mut laz_file)?;
let vlr = LazVlr::read_from(&mut laz_file)?;
let mut decompression_output = vec![0u8; vlr.items_size() as usize];
let mut decompressor = LasZipDecompressor::new(&mut laz_file, vlr)?;
let mut ground_truth = vec![0u8; decompression_output.len()];
read_first_point("tests/data/point10.las", &mut ground_truth)?;
decompressor.decompress_one(&mut decompression_output)?;
assert_eq!(&decompression_output, &ground_truth);
Parallelism
This crates has an optional feature ‘parallel’.
When using this feature, additional Par
structs and par_
methods are exposed.
Re-exports
Modules
Definitions of error related thins.
This module contains re-exports of the different version of
LAS data compressors & decompressors as well as
the definition of the point types.
Module with the important struct that people wishing
to compress or decompress LAZ data can use
Everything about compressing & decompressing point records
Structs
Struct that handles the compression of the points into the given destination
LasZip decompressor that decompresses points.
Struct stored as part of the laszip’s vlr record_data
The data stored in the record_data of the Laszip Vlr
Builder struct to personalize the LazVlr
LasZip compressor that compresses using multiple threads
Laszip decompressor, that can decompress data using multiple threads
Enums
The different type of data / fields found in the definition of LAS points
Functions
Compresses all points
Decompresses all points from the buffer
Compresses all points in parallel
Actual the parallel decompression
Decompresses all points from the buffer in parallel.
Type Definitions
Shortcut for
Result
s of this crate.