Rust与点云1-1

Rust 与点云

Rust 的热度越来越高。我准备写专栏,分享如何使用 Rust 处理点云。

1. LAS/LAZ 文件

LAS 是一种二进制格式文件,这意味着我们无法通过双击直接打开并读取它。LAZ 是基于 LAS 的压缩格式,所以这里以 LAS 为例进行介绍。

LAS 文件由三个部分组成:

  1. 公共头块(Public Header Block,即 header)
  2. 变长记录(Variable Length Records,VLR)
  3. 点数据记录(Point Data Record)

LAS 1.4 还额外定义了一个特殊的部分:扩展变长记录(EVLR)。

1.1 公共头块(Public Header Block)

这一部分主要存储元数据,例如点数、创建日期、点格式等。

如果你想了解它包含的全部内容,可以直接询问 AI,它会给你满意的答案。

1.2 变长记录(VLR)

在这一部分中,最重要的是地理坐标信息(坐标参考系统)。

1.3 点数据记录(Point Data Record)

存储点记录的部分,顾名思义。

2. Rust

下面介绍如何在 Rust 中使用 las 库读取 LAS 文件。

在开始之前,你需要安装 las 库,参考:https://github.com/gadomski/las-rs/tree/main

2.1 读取头块

直接读取头块,看看里面有什么。

b3f883110fe169507e2dfdb6d340d5e6

header 是一个结构体,包含许多方法和成员。如下图所示,这里使用 number_of_points()date() 方法。

9caf9f8eb7f74f4ca337c0b864ba6b7a

答案就在这里!

ae9f3999522048752377122465e36230

a467b73b6557e468aac550f3d18264cb

该 LAS 文件共有 2,825,788 个点,创建于 2026-06-30。

另外header 结构体还有其他方法和成员,具体参考如下:

https://github.com/gadomski/las-rs/blob/main/src/header/mod.rs

2.2 获取地理坐标信息

我们可以从 VLR 块中获取地理坐标信息。

7ac9bb3ea242ce6a62c19a17d15b4182

特别注意,需要对得到得数字进行“解码”才可以得到文字版本得答案,因为本身las是一个binary格式文件,并不是ascii文本文件。

输出结果为:

"PROJCS["Transverse_Mercator_South_Orientated",GEOGCS["Datum based upon the WGS84 ellipsoid",DATUM["Based on WGS84 spheroid",SPHEROID["WGS84",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9182"]]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",119],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9051"]],AXIS["Easting",EAST],AXIS["Northing",NORTH]]\0"

这正是我需要的信息。出于安全考虑,此处展示的结果已做随机修改。

总结

以上就是全部内容。本文简单介绍了如何使用 Rust 读取 LAS 文件,并展示了一些示例代码。如果你仍有疑问,可以把本页面加载给 AI,直接与它交流。

谢谢!

posted @ 2026-09-04 15:09  BufferXiu  阅读(8)  评论(0)    收藏  举报