4 个版本 (重大更新)

0.5.0 2024年6月20日
0.4.0 2023年11月14日
0.3.0 2022年1月13日
0.2.0 2021年10月11日

#222算法

Download history 22/week @ 2024-06-03 2/week @ 2024-06-10 148/week @ 2024-06-17 18/week @ 2024-07-01

197 每月下载

自定义许可证

490KB
9K SLoC

牧草

A Rust 库,用于处理点云数据。它具有

  • 对任意点属性进行细粒度支持,类似于 PDAL,但增加了类型安全性
  • 非常灵活的内存模型,原生支持 Array-of-Structs (AoS) 和 Struct-of-Arrays (SoA) 内存布局(牧草称为 '交错' 和 '列式')
  • 通过 pasture-io 包支持读取和写入各种点云格式(如 LASLAZ3D Tiles 以及 ASCII 文件)
  • 随着 pasture-algorithms 包的增长,算法集也在不断增加

为此,pasture 选择灵活性而非简单性。如果您在寻找小巧简单的东西,例如处理 LAS 文件,请尝试类似 las 的包。如果您计划实现高性能工具和服务,这些工具和服务将处理非常大的点云数据,那么 pasture 就是您要找的!

使用方法

将此添加到您的 Cargo.toml

[dependencies]
pasture-core = "0.4.0"
# You probably also want I/O support
pasture-io = "0.4.0"

以下是如何从 LAS 文件中加载点云并进行处理的示例

use anyhow::{bail, Context, Result};
use pasture_core::{
    containers::{BorrowedBuffer, VectorBuffer},
    layout::attributes::POSITION_3D,
    nalgebra::Vector3,
};
use pasture_io::base::{read_all};

fn main() -> Result<()> {
    // Reading a point cloud file is as simple as calling `read_all`
    let points = read_all::<VectorBuffer, _>("pointcloud.las").context("Failed to read points")?;

    if points.point_layout().has_attribute(&POSITION_3D) {
        for position in points
            .view_attribute::<Vector3<f64>>(&POSITION_3D)
            .into_iter()
            .take(10)
        {
            println!("({};{};{})", position.x, position.y, position.z);
        }
    } else {
        bail!("Point cloud files has no positions!");
    }

    Ok(())
}

有关更多示例,请参阅 pasture_core 示例pasture_io 示例

从版本 < 0.4 迁移

从版本 0.4 开始,pasture-core 的缓冲区 API 被重写。如果您从早期版本迁移,以下是一些迁移指南。还可以查看 containers 模块 的文档。

新的缓冲区类型

主要的缓冲区类型被重命名

  • InterleavedVecPointStorage 现在是 VectorBuffer
  • PerAttributeVecPointStorage 现在是 HashMapBuffer

特性结构也有所不同

  • PointBufferPointBufferWriteable 被替换为 BorrowedBufferBorrowedMutBufferOwningBuffer,这些定义了缓冲区内存的所有权模型
  • InterleavedPointBufferInterleavedPointBufferMut 现在是 InterleavedBufferInterleavedBufferMut
  • PerAttributePointBufferPerAttributePointBufferMut 现在是 ColumnarBufferColumnarBufferMut。一般来说,术语 PerAttribute 被更常用的术语 Columnar 所替换

不再有扩展特性(例如 PointBufferExt)。要获取/设置强类型化的点数据,你现在使用 视图,这些视图可以通过 BorrowedBufferBorrowedBufferMut 特性获得

let view = buffer.view_attribute::<Vector3<f64>>(&POSITION_3D);

视图支持对数据进行强类型访问,并且可以转换为迭代器

读者和写者新接口

PointReaderPointWriter 特性不再对象安全。相反,它们有 readread_into 方法,这些方法在缓冲区类型上是强类型的,以提高效率。有一个 GenericPointReader 类型,它使用静态分发并封装了LAS、LAZ和3D Tiles的读取器

开发

pasture 处于开发初期,可能存在错误。

许可证

pasture 根据 Apache 许可证(版本 2.0)的条款分发。有关详细信息,请参阅 LICENSE

依赖项

~6.5–10MB
~161K SLoC