5 个版本 (破坏性)
0.5.0 | 2024年6月20日 |
---|---|
0.4.0 | 2023年11月2日 |
0.3.0 | 2022年1月13日 |
0.2.0 | 2021年10月11日 |
0.1.0 | 2021年3月22日 |
#235 in 数据结构
用于 2 crates
330KB
6K SLoC
pasture
Rust库,用于处理点云数据。它具有以下特性
- 对任意点属性的精细支持,类似于PDAL,但增加了类型安全
- 非常灵活的内存模型,原生支持数组结构(AoS)和结构数组(SoA)内存布局(pasture称为'交错'和'列式')
- 使用
pasture-io
crate支持读取和写入各种点云格式(如LAS、LAZ、3D Tiles以及ASCII文件) - 使用
pasture-algorithms
crate拥有日益增长的一组算法
为此,pasture
选择了灵活性而非简单性。如果您正在寻找一些小而简单的东西,例如处理LAS文件,请尝试像las
这样的crate。如果您计划实现高性能工具和服务,这些工具和服务将处理非常大的点云数据,那么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
特剧行为结构也有所不同
PointBuffer
和PointBufferWriteable
已被替换为BorrowedBuffer
、BorrowedMutBuffer
和OwningBuffer
,这些定义了缓冲区内存的所有权模型。InterleavedPointBuffer
和InterleavedPointBufferMut
现在是InterleavedBuffer
和InterleavedBufferMut
。PerAttributePointBuffer
和PerAttributePointBufferMut
现在是ColumnarBuffer
和ColumnarBufferMut
。在一般情况下,术语PerAttribute
被更常见的术语Columnar
替换。
不再有扩展特质(例如 PointBufferExt
)。现在,您使用 视图 来获取/设置强类型点数据,这些视图可以通过 BorrowedBuffer
和 BorrowedBufferMut
特质获得。
let view = buffer.view_attribute::<Vector3<f64>>(&POSITION_3D);
视图支持对数据的强类型访问,并可转换为迭代器。
新的读者和写者接口
PointReader
和 PointWriter
特质不再对象安全。相反,它们具有针对缓冲区类型的强类型 read
和 read_into
方法,以提高效率。存在一个 GenericPointReader
类型,它使用静态分发并封装了 LAS、LAZ 和 3D Tiles 的读取器。
开发
pasture
处于早期开发阶段,可能存在错误。
许可证
pasture
在 Apache 许可证(版本 2.0)的条款下分发。有关详细信息,请参阅 LICENSE。
依赖项
~6MB
~117K SLoC