发布信息:
批准时间 – 2011年11月
修订日期 – 2019年7月9日
PDF起草日期 –2019年7月9日
GitHub提交ID – 72a54a4ab79bdb94eeea7977be2859c41fc119f0
GitHub 存储库地址– GitHub - ASPRSorg/LAS: LAS Specification
发布机构:
美国摄影测量与遥感学会
电话: 301-493-0290
传真: 225-408-4422
网站: www.asprs.org
版权所有 © 2002-2019 美国摄影测量和遥感学会(ASPRS),保留所有权利。
授权:版权所有者特此同意无限制使用和分发本文档或其部分内容。此同意不适用于商业用途,例如用于广告或促销、生产产品或直接转售本文档。用于商业目的必须得到发布机构的正式授权后进行。
中文翻译文档授权:本中文翻译文档可到译者博客免费阅读,可分享博客文章页面超链接。未经译者书面授权,不得进行转载、贩卖、免费/收费下载本中文翻译文档。
1.简介
1.1. 目的、范围和适用性
LASer文件(LAS)用于记录点云数据,数据来自激光雷达或其他设备。数据通常由硬件厂商提供的配套软件生成,并记录成LAS文件,硬件厂商提供的软件结合了GPS,IMU和激光脉冲范围数据来产生具有 X、Y 和 Z 坐标的点。LAS 的目的是提供一种开放的格式,允许不同的硬件和软件工具,以通用的格式交换点云数据。
本文档是自初始版本1.0版发布以来,对 LAS 文件格式规范的第4次修订。
1.1.1. LAS 1.4 修订历史记录
LAS 1.4 修订版摘要(包括 GitHub 问题编号):
- R11 – 版本获批(2011 年 11 月)。
- R12 - 勘误表(2012 年 6 月) - 印刷更正:
- 公共标头大小更正为 375 字节。
- 扫描角度从"Unsigned Char"更正为"Char"。
- R13 - 添加了域配置文件小节(2013 年 7 月)。
- R14 - 多个更新(2019 年 3 月):
2. LAS格式定义
LAS文件包含是一个二进制文件,包含一个公共文件头,任意数量的可选的变长记录(简称VLR)、点数据记录、任意数量的可选的扩展变长记录(简称EVLR)。所有数据都是小字节序格式。公共文件头包含统计数据,例如点数量、点坐标范围等。我们将文件的数据内容称为"有效负载"。
变长记录(VLR)包含可变类型的数据,包含投影信息、元数据、波长信息以及由用户程序写入的其他数据。这些数据的总长度被限制为最长65535个字节。
扩展变长记录(EVLR)比变长记录(VLR)更灵活,因为EVLR可以附加在LAS文件的末尾。例如,添加投影数据到已有的LAS文件,使用EVLR可以不必重写整个文件。
表 1:LAS 1.4 格式定义
公共文件头 |
变长记录(VLR) |
点数据记录 |
扩展变长记录 |
一个LAS文件如果包含的点数据记录的类型是4、5、9或10,可以包含多个波形数据包,波形数据包被保存在扩展变长记录(EVLR)中。和其他扩展变长记录(EVLR)不同,波形数据包在公共文件头中记录了到波形记录包头部的偏移,即“波形数据包起始位置(Start of Waveform Data Packet Record)”。
2.1. 向后兼容性(LAS 1.1 – LAS 1.3)
LAS 1.4文件规范将32位文件结构变更为64位文件结构。
为了保持对LAS1.1 - LAS1.3的兼容, LAS 1.4 保留了老版本文件结构中的某些字段,这些从老版本遗留的字段被命名为“遗留的xxx(Legacy xxx)”。
LAS 1.4的文件写入器如果想保持向后兼容,必须同时保存遗留(legacy)和非遗留(non-legacy)字段。但是,如果点数据记录的数量超过 UINT32_MAX,则无法做到向后兼容,这时,必须将遗留(legacy)字段设置为零。如果写入器不想保持向后兼容,遗留(legacy)字段必须始终设置为0。
如果非零遗留(legacy)字段与等效的 LAS 1.4 字段之间存在差异,则 LAS 1.4 读取器应使用遗留(legacy)字段的值来保证与 LAS 1.1 - LAS 1.3 读取器有相同的行为。最佳做法是引发信息错误,以便用户可以决定是否修复该文件。
LAS 1.4 引入了将可变长度记录 (VLR) 定义为扩展可变长度记录 (EVLR) 的选项。希望保持向后兼容性的 LAS 1.4 文件写入器必须仅使用 VLR。有关详细信息,请参阅 EVLR 的旧版兼容性部分。
2.2. 参考坐标系(CRS)描述符
GeoTIFF已被Well Known Text(WKT)取代,描述 LAS 1.4 引入的新点类型 (6-10) 所使用的参考坐标系(CRS)。为了保持对点类型0-5的兼容,GeoTIFF仍然保留。
"WKT"位已添加到公共标头块中的全局编码旗标(Global Encoding)中,如果设置了此位,则文件的 CRS 将位于 WKT可变长度记录(VLR)或WTK扩展可变长记录(EVLR)中。
对于点类型 0-5,希望与旧版 LAS 保持向后兼容的文件写入器必须添加GeoTIFF可变长记录(VLR) 来记录文件的CRS,并确保WKT位为false。
CRS记录方式总结如下:
表 2:参考坐标系记录方式
点类型 | WKT位==False | WKT位==True |
---|---|---|
0-5 | GeoTIFF | WKT |
6-10 | 错误(Error) | WKT |
如果文件中有多个GeoTIFF VLR/EVLR 或多个 WKT VLR/EVLR,则视为文件错误。编写器可以通过"取代"现有的 CRS VLR/EVLR将新的 CRS EVLR 附加到文件中。通过将EVLR的LAS_Spec ID 更改为“Superseded”(此版本中定义的新LASF_Spec)来执行取代。
2.3. 数据类型
LAS 格式定义中使用以下数据类型,这些数据类型符合1999年ANSI C语言规范(ANSI/ISO/IEC 9899:1999("C99"))。
- char (1 字节)
- unsigned char (1 字节)
- short (2 字节)
- unsigned short (2 字节)
- long (4 字节)
- unsigned long (4 字节)
- long long (8 字节)
- unsigned long long (8 字节)
- float (4 字节 IEEE 浮点数格式)
- double (8 字节 IEEE 浮点数格式)
- string (变长的1字节序列 字符串, ASCII编码, null结尾)
警告:固定长度的 char 数组将不以 null 终止。包括 LAS 公共文件头中的系统标识符、生成软件名称、可变长度记录中的用户 ID 等。 |
2.4. 公共文件头
表 3:公共文件头
字段(英文) | 字段(中文) | 数据类型 | 大小 | 必填 |
File Signature (“LASF”) | 文件标志(“LASF”) | char[4] | 4字节 | 是 |
File Source ID | 文件源ID | unsigned short | 2字节 | 是 |
Global Encoding | 全局编码旗标 | unsigned short | 2字节 | 是 |
Project ID - GUID Data 1 | 项目ID – GUID字段1 | unsigned long | 4字节 | |
Project ID - GUID Data 2 | 项目ID – GUID字段2 | unsigned short | 2字节 | |
Project ID - GUID Data 3 | 项目ID – GUID字段3 | unsigned short | 2字节 | |
Project ID - GUID Data 4 | 项目ID – GUID字段4 | unsigned char[8] | 8字节 | |
Version Major | 主版本号 | unsigned char | 1字节 | 是 |
Version Minor | 次版本号 | unsigned char | 1字节 | 是 |
System Identifier | 系统标识 | char[32] | 32字节 | 是 |
Generating Software | 生成软件名称 | char[32] | 32字节 | 是 |
File Creation Day of Year | 文件创建日期 | unsigned short | 2字节 | 是 |
File Creation Year | 文件创建年份 | unsigned short | 2字节 | 是 |
Header Size | 文件头大小 | unsigned short | 2字节 | 是 |
Offset to Point Data | 点数据偏移 | unsigned long | 4字节 | 是 |
Number of Variable Length Records | 变长记录数量 | unsigned long | 4字节 | 是 |
Point Data Record Format | 点数据记录类型 | unsigned char | 1字节 | 是 |
Point Data Record Length | 点数据记录大小 | unsigned short | 2字节 | 是 |
Legacy Number of Point Records | 点数据记录数量(遗留) | unsigned long | 4字节 | 是 |
Legacy Number of Point by Return | 返回点数(遗留) | unsigned long[5] | 20字节 | 是 |
X Scale Factor | X缩放系数 | double | 8字节 | 是 |
Y Scale Factor | Y缩放系数 | double | 8字节 | 是 |
Z Scale Factor | Z缩放系数 | double | 8字节 | 是 |
X Offset | X偏移 | double | 8字节 | 是 |
Y Offset | Y偏移 | double | 8字节 | 是 |
Z Offset | Z偏移 | double | 8字节 | 是 |
Max X | X最大值 | double | 8字节 | 是 |
Min X | X最小值 | double | 8字节 | 是 |
Max Y | Y最大值 | double | 8字节 | 是 |
Min Y | Y最小值 | double | 8字节 | 是 |
Max Z | Z最大值 | double | 8字节 | 是 |
Min Z | Z最小值 | double | 8字节 | 是 |
Start of Waveform Data Packet Record | 波形数据记录起始位置 | unsigned long long | 8字节 | 是 |
Start of First Extended Variable Length Record | 扩展变长数据记录起始位置 | unsigned long long | 8字节 | 是 |
Number of Extended Variable Length Records | 扩展变长记录数量 | unsigned long | 4字节 | 是 |
Number of Point Records | 点数据记录数量 | unsigned long long | 8 字节 | 是 |
Number of Points by Return | 返回点数 | unsigned long long[15] | 120字节 | 是 |
注意:公共文件头中的非必填字段,当不需要时必须以0填充。 |
文件标志(File Signature)
文件标志必须以“LASF”这四个字符填充,这是LAS文件格式所必须的。其他用户的软件可以通过检查这四个字符是否是“LASF”,来快速判断文件格式。
文件源ID(File Source ID)
此字段取值范围是0到65535。值为0时表示尚未分配 ID,这是由多个独立源聚合生成的 LAS 文件(例如:从多个瓦片合并后得到的LAS文件)。
这样的设计允许项目包含最多 65535 个唯一源。源可以是数据库记录的ID、 或时间一致性数据的原始集合,例如机载激光雷达的航线或飞行架次、移动系统的航线编号、静态系统的用户设置的标识符等。
全局编码旗标(Global Encoding)
这是一个字节字段用于指示此文件的某些全局属性。在LAS 1.2版本中,只定义了这个字段最低位的1比特。全局编码旗标各比特位定义如下:
表 4:全局旗标 - 比特位定义
比特位 | 字段名(英文) | 字段名(中文) | 描述 |
0 | GPS Time Type | GPS时间类型 | 点数据记录中GPS时间代表的意思。如果此比特位没有设置,点记录中的GPS时间是GPS周(和LAS 1.0版本到LAS 1.2版本一致)。否则,点记录中的GPS时间是标准GPS时间减1x10^9。做偏移是为了提高浮点数的精度。标准GPS时间的0点定义为1980年1月6日0时0分0秒。 |
1 | Waveform Data Packets Internal | 内部波形数据包 | 如果此比特位已设置,此文件包含波形数据包,否则不包含,此比特位和比特位2是互斥的,不可同时设置。此比特位已弃用。 |
2 | Waveform Data Packets External | 外部波形数据包 | 如果此比特位已设置,表明波形数据包已存储在一个外部文件中,文件名和此文件一致,但扩展名是*.wdp。注意,此比特位和比特位1互斥,不可同时设置。 |
3 | Synthetic Return Numbers | 合成编号 | 如果设置了此位,则点数据记录中的点返回编号已被合成。例如,当通过合成第一个返回文件和最后一个返回文件来创建复合文件时。或者在不直接支持多个返回的系统中模拟返回编号时,可能会出现这种情况。 |
4 | WKT | 参考坐标系 | 如果设置了此位,表明参考系是WKT,否则表明参考系是GeoTIFF。如果想让你的文件写入器保持向后兼容,就不要设置此位。 |
5:15 | Reserved | 保留 | 必须设置为0。 |
项目ID(Project ID)
项目ID的四个字段保存“全局唯一标识(GUID)”的对应字段,提供给用户保存项目标识。该字段仍然是可选的,何时分配项目ID由处理软件自行决定。与唯一项目关联的所有文件的项目 ID 应相同,通过分配项目 ID 并使用文件源 ID(定义在前面),可以全局唯一标识项目中的每个文件和文件中的每个点。
注意:使用项目ID的例子可以从LAS官方wiki找到:https://github.com/ASPRSorg/LAS/wiki |
版本号
版本号包含主版本号和次版本号两个字段。主版本号和次版本号共同标识当前LAS文件的格式规范。例如:格式规范1.4版的主版本号字段的值应该是1,次版本号字段的值应该是4。应该注意的是,LAS工作组没有为主版本号和次版本号关联任何其他特殊含义。
系统标识(System Identifier)
LAS文件规范1.0版本假定 LAS 都文件是由硬件传感器生成的。后续版本认识到,LAS文件通常是提取、合并或修改现有数据文件生成的。因此,系统标识重新定义为:
表 5:系统标识
数据来源 | 系统标识 |
硬件系统 | 标识硬件的字符串,例如:“ALTM 1210”、”ALS50” 、”LMS-Q680i”等等。 |
合并一个或多个文件 | “MERGE” |
修改单个文件 | “MODIFICATION” |
从一个或多个文件中提取 | “EXTRACTION” |
重新投影、缩放、包装等 | “TRANSFORMATION” |
其他操作 | ”OTHER“或标识此操作的字符串,字符串最大长度32个字节。 |
生成软件名称(Generating Software)
此字段是描述生成软件的ASCII字符串。此字段提供了一种机制,用于指定在 LAS 文件创建期间使用的生成软件包和版本(例如:” TerraScan V-10.8”、” “REALM V-4.2”等等)。如果字符串长度小于32字节,剩余的部分应该填充0。
文件创建日期(File Creation Day of Year)
一个无符号短整型数,指示文件创建的日期。日期使用格林威治标准时间 (GMT) 的日。1表示1 月 1 日,2表示1月2日,3表示1月3日,以此类推。
文件创建年份(File Creation Year)
创建文件的年份,以四位数字表示。
文件头大小(Header Size)
公共文件头的大小,以字节为单位。LAS 1.4这个大小是375字节。更新版本的LAS文件规范如果在文件头中添加了数据,则文件头大小字段将使用新的文件头大小,用户不得扩展公共文件头。
点数据偏移(Offset to Point Data)
从文件起始处到第一个点记录的第一个字段的实际字节数。如果软件在可变长度记录中添加/删除了数据,则必须更新此偏移值。
变长记录数量(Number of Variable Length Records)
此字段包含存储在点数据记录前面的变长记录(VLR) 的数量。如果 VLR 数量发生变化,则必须更新此值。
点数据记录类型(Point Data Record Format)
指示文件中包含的点数据记录的格式。LAS 1.4 定义了类型 0 到 10,共11种格式。这些类型在此规范的"点数据记录"小节中定义。
点数据记录大小(Point Data Record Length)
每条点数据记录的大小,字节为单位。单个 LAS 文件中的所有点数据记录必须具有相同的类型,因此长度必须相同。
如果指定的大小大于点格式类型所定义的大小(例如,类型为 1,但点数据记录大小为 32 个字节而不是28个字节),则其余字节是特定于用户的"额外字节"。这种"额外字节"的格式和含义可以用额外字节VLR描述。
点数据记录数量(遗留)(Legacy Number of Point Records)
如果想要文件保持对老版本软件的兼容性,则应在此字段填入文件中的点数据记录的总数,否则,必须将其设置为零。保持老版本软件兼容性的条件:点数小于 UINT32_MAX且点数据记录格式小于 6,不满足条件的无法保持兼容性。
返回点数(遗留)(Legacy Number of Point by Return)
如果想要文件保持对老版本软件的兼容性,则应在此字段填入每次返回的点的总数,否则,必须将此数组的所有项设置为零。保持老版本软件兼容性的条件:点数小于 UINT32_MAX且点数据记录格式小于 6,不满足条件的无法保持兼容性。
值0是第一次返回的总点数,值1是第二次返回的总点数,依此类推,最多可记录 5 个值。
X、Y、Z缩放系数(X Scale Factor、Y Scale Factor、Z Scale Factor)
缩放系数字段是双精度浮点值,用于缩放点记录中相应的 X、Y 和 Z 的值。必须将的 X、Y、Z缩放系数乘以点记录中的X、Y 、Z值才能得到实际的 X、Y、Z 坐标。例如,如果 X、Y 和 Z 坐标应保留两位小数,则缩放系数都应设为0.01。译者注:越小的缩放系数意味着越高的精度、越窄的表示范围,反之亦然。
X、Y、Z偏移(X Offset、Y Offset、Z Offset)
偏移字段用于设置点记录的整体偏移。通常这些数字将为零,但在某些情况下,点数据的分辨率对于给定的投影系统可能太小,此时可使用整体偏移以便减少误差。
注意,在处理LAS文件时,应始终假定使用了这些数字。例如,在计算X坐标时,点数据记录中的X应乘以X缩放系数再加上X偏移,最终得到X坐标。
𝑋坐标 = (𝑋数据 * X缩放系数) + 𝑋偏移
𝑌坐标 = (𝑌数据 * 𝑌缩放系数) + 𝑌偏移
𝑍坐标 = (𝑍数据 * 𝑍缩放系数) + 𝑍偏移
最大最小X、Y、Z
最大和最小数据字段表示实际的、未缩放的、未偏移的原始的点的范围。
波形数据记录起始位置(Start of Waveform Data Packet Record)
此字段记录从 LAS 文件起始位置到波形数据包记录的第一个字节的偏移量,以字节为单位。请注意,这将是波形数据包标头的第一个字节。如果文件中不包含波形记录或存储在外部,则此值必须为零。注意,LAS 1.4 允许多个扩展可变长度记录(EVLR),并且波形数据包记录不一定是第一个EVLR。
扩展变长数据记录起始位置(Start of First Extended Variable Length Record)
此字段记录从 LAS 文件起始位置到第一个 EVLR 的第一个字节的偏移量,以字节为单位。如果软件添加/删除了可变长数据记录或点数据记录中,则必须更新此偏移值。
扩展变长记录数量(Number of Extended Variable Length Records)
此字段包含存储在点数据记录之后的 EVLR(如果存在)数量(包括波形数据包记录)。如果 EVLR 的数量发生变化,则必须更新此数量。如果没有 EVLR,则此值为零。
点数据记录数量(Number of Point Records)
此字段包含文件中点记录的总数。请注意,无论是否兼容老版本,都必须始终正确填充此字段。
返回点数(Number of Points by Return)
值0是第一次返回的总点数,值1是第二次返回的总点数,依此类推,最多可记录 15 个值。请注意,无论是否兼容老版本,都必须始终正确填充此字段。
2.5. 变长记录(VLR)
公共文件头后可跟任意数量的可变长度记录 (VLR),只要总大小不会使点数据记录的开头大于无符号长整型的取值范围(公共文件头中的"点数据偏移"字段)。VLR 的数量在公共文件头的"变长记录数量"字段中指定。必须按顺序访问变长记录,因为每个变长记录的大小都包含在变长记录头中,每个变长记录头的长度为 54 个字节。
表 6:变长记录头
字段(英文) | 字段(中文) | 数据类型 | 大小 | 必填 |
Reserved | 保留 | unsigned short | 2字节 | |
User ID | 用户标识 | char[16] | 16字节 | 是 |
Record ID | 记录标识 | unsigned short | 2字节 | 是 |
Record Length After Header | 记录体长度 | unsigned short | 2字节 | 是 |
Description | 描述 | char[32] | 32字节 |
保留(Reserved)
值必须设置为0。
用户标识(User ID)
用户标识字段是ASCII编码的字符串,用于标识创建变长记录的用户。可以有许多来自不同来源的可变长度记录,具有不同的用户标识。如果字符串长度小于16 ,则剩余数据必须用0填充。用户标识必须向LAS规范管理机构注册,这样可确保不出现两个人使用相同的用户标识。
记录标识(Record ID)
记录标识取决于用户标识,每个用户标识可以有0到65535个记录标识。LAS规范管理自己的记录标识(规范拥有自己的用户标识),其他记录标识由用户自己管理。因此,允许每个用户标识以他们想要的任何方式将0分配给65535个记录标识。记录标识的含义的定义权留给用户,应忽略未知的用户标识/记录标识组合。
记录体长度(Record Length After Header)
记录体长度是整个记录除去记录头的长度。记录头的长度为54个字节,设整个变长记录的长度为N字节,则记录体长度等于N减54字节;设记录体长度为M字节,则整个变长记录的长度等于M加54字节。
描述(Description)
可选的说明文本,最多支持32个字节,未使用的部分必须以0填充。