#data #format #reader #port #las #user #laszip

laz

Rust对LAS格式Laszip压缩的移植。

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 压缩

Download history 853/week @ 2024-05-03 1060/week @ 2024-05-10 935/week @ 2024-05-17 1516/week @ 2024-05-24 1701/week @ 2024-05-31 1589/week @ 2024-06-07 1884/week @ 2024-06-14 1020/week @ 2024-06-21 1627/week @ 2024-06-28 2542/week @ 2024-07-05 1751/week @ 2024-07-12 2682/week @ 2024-07-19 4993/week @ 2024-07-26 4128/week @ 2024-08-02 4010/week @ 2024-08-09 3827/week @ 2024-08-16

17,841 每月下载量
用于 18 个crate(5个直接使用)

Apache-2.0

525KB
11K SLoC

laz-rs

LAZ (laszip压缩) 格式的实现或翻译。

本项目目标是成为Laszip压缩的移植,使得LAS读取器能够读取/写入LAZ数据,但不是一个功能齐全的LAS读取器。

如果您需要一个用户友好的Rust LAS读取器,请查找 las-rslas-rs 可以通过启用 laz 功能来使用 laz-rs 来管理LAZ数据。

原始实现

最低Rust版本:1.40.0

运行benches

cargo bench --features benchmarks

lib.rs:

将Martin Isenburg的laszip压缩移植到Rust

LasZipCompressorLasZipDecompressor 是用户想要压缩和解压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