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§
pub use errors::LasZipError;
pub use las::selective::DecompressionSelection;
pub use laszip::parallel::par_compress_buffer;
pub use laszip::parallel::par_decompress;
pub use laszip::parallel::par_decompress_buffer;
pub use laszip::parallel::par_decompress_selective;
pub use laszip::parallel::ParLasZipAppender;
pub use laszip::parallel::ParLasZipCompressor;
pub use laszip::parallel::ParLasZipDecompressor;
pub use laszip::compress_buffer;
pub use laszip::decompress_buffer;
pub use laszip::LasZipAppender;
pub use laszip::LasZipCompressor;
pub use laszip::LasZipDecompressor;
pub use laszip::LazCompressor;
pub use laszip::LazDecompressor;
pub use laszip::LazItem;
pub use laszip::LazItemRecordBuilder;
pub use laszip::LazItemType;
pub use laszip::LazVlr;
pub use laszip::LazVlrBuilder;
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
Type Aliases§
- Shortcut for
Result
s of this crate.