21个版本
0.9.2 | 2024年7月22日 |
---|---|
0.9.1 | 2024年3月26日 |
0.8.3 | 2023年10月15日 |
0.8.2 | 2023年7月29日 |
0.1.0 | 2019年6月23日 |
#39 in 压缩
17,841 每月下载量
用于 18 个crate(5个直接使用)
525KB
11K SLoC
laz-rs
LAZ (laszip压缩) 格式的实现或翻译。
本项目目标是成为Laszip压缩的移植,使得LAS读取器能够读取/写入LAZ数据,但不是一个功能齐全的LAS读取器。
如果您需要一个用户友好的Rust LAS读取器,请查找 las-rs。 las-rs
可以通过启用 laz
功能来使用 laz-rs
来管理LAZ数据。
原始实现
最低Rust版本:1.40.0
运行benches
cargo bench --features benchmarks
lib.rs
:
将Martin Isenburg的laszip压缩移植到Rust
LasZipCompressor
和 LasZipDecompressor
是用户想要压缩和解压LAZ数据时应使用的两种类型。
LasZipCompressor 示例
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
如果需要更改块大小或您有从原始LAZ文件中写回的LazVlr,可以从LazVlr构建LasZipCompressor。
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()?;
要创建一个 LasZipDecompressor
,您需要LAZ文件中找到的record_data。
LasZipDecompressor 示例
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);
并行处理
此crate具有可选功能'parallel'。使用此功能时,会公开额外的 Par
结构和 par_
方法。
依赖项
~175–530KB