点云LAS格式分析

时间:2022-10-05 16:54:39

1 引言

1.1 目的、范围和适用性

  LAS文件旨在包含激光雷达(或其他)点云数据记录。这些数据通常会从软件(例如,由硬件供应商提供的)中输入这种格式,该软件结合了GPS、IMU和激光脉冲距离数据来生成 X X X Y Y Y Z Z Z点数据。数据格式的目的是提供一种开放的格式,允许不同的硬件和软件工具以一种通用的格式输出数据。
  本文介绍LAS格式规范自最初1.0版本发布以来的第四次修订。

1.1.1 LAS 1.4修订历史

  LAS 1.4版本摘要

  • R11-批准版本(2011年11月)
  • R12-勘误表(2012年6月)-排印更正:
    –更正了公共头大小(描述性段落为375字节)。
    –修正了两个扫描角度等级的实例,由原来的“Unsigned Char” 改成了“Char”
  • R13-增加了域配置文件(Domain Profile)部分(2013年7月)。
  • R14-多个更新(2019年3月):
    –从migration 迁移到 GitHub
    –多个大写和拼写纠正。
    –更新了ASPRS联系信息。
    –增加了额外分类信息(19-22)
    –增加了OCG支持
    –部分功能重组等。

1.1.2 LAS 1.4 特性

  • 扩展偏移量(offsets)和字段大小,以支持全64位
  • 每个输出脉冲最多支持15次返回
  • 扩展了点云分类的范围,支持256个分类
  • 几个新的ASPRS标准类的定义
  • 扩展扫描角度字段到2字节,以支持更精细化的角度分辨率
  • 增加了一个传感器通道位域,以支持移动地图系统
  • 为坐标参考系统增加了已知文本(WKT)定义
  • 增加一个重叠位,在保持类定义的同时,允许在重叠区域指示脉冲
  • 增加了一个(可选的)额外字节可变长度记录来描述每个点存储的“额外字节”
  • 增加了“LAS域配置文件”和“LAS域配置文件描述”(“LAS Domain Profile” and“LAS Domain Profile Description”)的定义
  • 增加官方LAS维基的链接:https://github.com/ASPRSorg/LAS/wiki

1.2 规范性

  LAS格式定义中使用的数据类型符合1999年的ANSI C语言规范(ANSI/ISO/IEC 9899:1999(“C99”))。

1.3 权威性

1.3.1 ASPRS

  美国摄影测量与遥感学会(ASPRS)是LAS规范的所有者。该标准由ASPRS董事会领导的组织内部委员会维护。与本标准相关的问题可以直接发送到ASPRS:

  • Online at https://github.com/ASPRSorg/LAS
  • By phone at 301-493-0290
  • By email at las@asprs.org or asprs@asprs.org
  • By mail at 425 Barlow Place, Suite 210, Bethesda, Maryland 20814-2160.

1.3.2 OGC

  LAS已于2018年被开放地理空间联盟(OGC24)认可为OGC社区标准。OGC版本的文件,连同有关LAS引用标准的前向资料,以及该文件在标准机构中的地位,可在以下网址找到:https://portal.opengeospatial.org/files/17-030r1。未来对阿拉伯国家联盟*谘询委员会的认可及活动,请参阅:https://www.ogc.org/standards/community

2 LAS格式定义

  LAS该格式包含二进制数据,包括公共报头块、任意数量(可选)可变长度记录(VLRs)、点数据记录(Point data Records)和任意数量(可选)扩展可变长度记录(EVLRs)。所有数据都是小端格式。公共报头块包含泛型数据,如点编号和点数据边界。我们将文件的数据内容称为“有效负载”。
  可变长度记录包含可变类型的数据,包括投影信息、元数据、波形包信息和用户应用程序数据。它们的数据有效负载被限制为65,535字节。
  扩展可变长度记录(EVLRs)允许比可变长度记录(VLRs)更高的负载,并且它们具有可被追加到LASfile末尾的优点。例如,这允许向LASfile中添加投影信息,而不需要重写整个文件。

表1:LAS 1.4格式定义

点云LAS格式分析
  一个包含点记录类型4、5、9或10的LAS文件可能包含一个波形数据包块,该波形数据包块存储为任何扩展可变长度记录(EVLR)的有效负载。与其他的EVLR不同,波形数据包( the Waveform Data Packets )(如果存储在文件内部)有一个偏移量(offset )存储在公共头块(Public Header Block)里。

2.1 遗留的兼容性(LAS 1.1 - LAS 1.3)

  LAS 1.4将文件规格从32位文件结构(最大值为: 2 32 − 1 ≡ 4 , 294 , 967 , 295 2^{32}− 1≡ 4, 294, 967, 295 23214,294,967,295UINT32_MAX) 扩展到64位文件结构(最大值为: 2 64 − 1 2^{64}-1 2641)。
  LAS 1.1~LAS 1.3 的点记录类型为:0-5,坐标系为:GeoTIFF坐标参考系统。为了保持LAS 1.4具有放置LAS 1.1到LAS 1.3载荷的能力,有必要在LAS 1.4文件结构中复制一些字段。这些重复字段被命名为“Legacy xxx”,其中“xxx”表示字段的含义。
  希望保持向后兼容性的LAS 1.4文件写入器必须同时维护同步中的遗留字段和等效的非遗留字段。然而,这是不可能的,如果点数超过UINT32_MAX,在这种情况下,遗留字段必须设置为零。如果文件写入器没有保持向后兼容性,那么遗留字段必须总是设置为零。
  如果一个非零的遗留字段和等效的LAS 1.4字段之间存在差异,LAS 1.4读取器应该使用遗留值来维护与从LAS 1.1到LAS 1.3读取器相同的行为。最佳实践是抛出一个信息性错误,以便可以修复文件。
  LAS 1.4引入了将可变长度记录(VLRs)定义为扩展可变长度记录(EVLRr)的选项。希望保持向后兼容性的LAS 1.4文件编写器必须只使用VLRs。

2.2 坐标参考系统表示

  对于LAS 1.4引入的新点类型(6-10),使用Well Known Text (WKT)作为所需的坐标参考系统表示法。对于0-5类型的点,仍然使用GeoTIFF。
  如果将一个“WKT”位设置为true添加到公共报头区块的全局编码标志,那么该文件的坐标系就位于WKT 的可变长度记录(EVLR, VLR)中。如果希望对0-5类型的遗留LAS保持向后兼容性,则必须添加一个GeoTIFF VLR来表示文件的坐标系,并确保WKT位为false。

表2:坐标参考系统表示

点云LAS格式分析
  文件中有多个GeoTIFF或多个WKT 则是文件错误。写入器可以通过“取代”现有的坐标系 (E)VLR来添加一个新的坐标系 EVLR。

2.3 数据类型

  LAS格式定义中使用了以下数据类型。这些数据类型符合1999年的ANSI C语言规范(ANSI/ISO/IEC 9899:1999(“C99”))。

• char (1 byte)
• unsigned char (1 byte)
• short (2 bytes)
• unsigned short (2 bytes)
• long (4 bytes)
• unsigned long (4 bytes)
• long long (8 bytes)
• unsigned long long (8 bytes)
•float (4 byte IEEEfloating point format)
• double (8 byte IEEEfloating point format)
• string (a variable series of 1 byte characters, ASCII encoded, null-terminated)

注意:如果所有字节都被使用,那么固定长度字符数组将不会以空字符结束。例如,LAS报头中的系统标识符和生成软件、可变长度记录中的用户ID或描述、以及一个额外字节描述符的名称。

2.4 Public Header Block(公共头块)

表3:Public Header Block

点云LAS格式分析
接上表
点云LAS格式分析

注意:公共报头块中任何不需要或不使用的字段都必须用0进行填充。

  • File Signature

  文件签名必须包含四个字符“LASF”,这是LAS规范所要求的。这四个字符可以通过用户软件作为快速查看初始确定文件类型进行检查。

  • File Source ID

  该字段应该设置为0~65535之间的值。当值为0时,表示没有分配ID,这是一个由多个独立源聚合而成的LAS 文件的标准(例如,由多个块合并而成的块)。
  这个方案允许一个项目包含多达65535个不同的数据来源。数据来源可以包括数据存储库ID或时间一致数据的原始集合,如机载系统的航线或出击号,移动系统的航路号,或静态系统的设置标识符。

  • Global Encoding
      这是一个位域,用于指示文件的某些全局属性。在LAS 1.2(引入了这个字段的版本)中,只有低位被定义(这是位,如果设置了,无符号整数的值为1)。这个位域被定义为:
表3:Global Encoding– Bit Field Encoding

点云LAS格式分析

  • Project ID (GUID Data)

  包含完整的全局唯一标识符(GUID)的四个字段现在保留作为项目标识符(Project ID)使用。这个领域仍然是可选的。项目ID的分配时间由处理软件决定。项目ID对于与唯一项目相关联的所有文件应该是相同的。通过分配一个项目ID和使用一个文件源ID(上面定义的),项目中的每个文件和文件中的每个点都可以唯一地、全局地标识。

  • Version Number

  版本号由主字段和次字段组成。主字段和次字段组合成表示当前规范本身格式号的数字。例如,规范编号1.4将在主字段中包含1,在次字段中包含4。应该指出的是,阿拉伯国家联盟工作组对主要版本号或次要版本号没有任何特殊意义。

  • System Identifier
      版本1.0规范假设LAS文件是由硬件传感器收集的唯一结果。后续版本认识到,文件通常是提取、合并或修改现有数据文件的结果。因此系统ID变成:
表5:System Identifier

点云LAS格式分析

  • Generating Software

  这些信息是描述生成软件本身的ASCII数据。该字段提供了一种机制,用于指定LAS文件创建过程中使用的生成软件包和版本 (例如,“TerraScan V-10.8”,“REALM V-4.2”, 等)。如果字符数小于32个字符,则剩余数据必须为空。

  • File Creation Day of Year

  Day:是一个unsigned short类型的值,表示文件创立的时间,以格林尼治标准时间(GMT)计算,1月1日是第一天。

  • File Creation Year

  文件创建的年份,用四位数字表示。

  • Header Size

  公共报头块本身的大小(以字节为单位)。对于LAS 1.4,这个大小是375字节。如果报头通过在报头末尾添加数据来扩展LAS规范的新订,则报头大小文件将被更新为新的报头大小。公用报头块不能被用户扩展。

  • Offset to Point Data

  从文件开始到第一个点记录的第一个字段的实际字节数 。 如果任何软件向可变长度记录中添加/删除数据,则必须更新此数据的偏移量。

  • Number of Variable Length Records

  该字段包含当前存储在点数据记录之前的文件中的VLRs的数量。当VLRs数量发生变化时,需要更新此编号。

  • Point Data Record Format

  点数据记录表示文件中包含的点数据记录的类型。LAS 1.4定义了类型0到10。这些类型在点数据记录一节中已有介绍。

  • Point Data Record Length

  点数据记录的大小,以字节为单位。所有的点数据记录在一个LAS文件中必须是相同的类型,因此具有相同的长度。如果指定的大小大于point format类型隐含的大小(例如,32字节而不是类型1的28字节),则剩余的字节是用户特定的“额外字节”。这种“额外字节”的格式和含义可以用VLR来描述。

  • Legacy Number of Point Records
      这个字段包含文件中总点数记录,如果文件是保持传统兼容性,点数不大于UINT32_MAX,并且点数数据记录格式小于6。否则,它必须被设为零。
  • Legacy Number of Points by Return

  如果文件保持原有的兼容性,这些字段包含一个数组,每个返回的总点数记录,点数不大于UINT32_MAX,点数数据记录格式小于6。否则,数组中的每个成员都必须设为0。第一个值将是第一次返回的记录总数,第二个包含返回2的记录总数,以此类推,直到5次返回。

  • X, Y, and Z Scale Factors

   X , Y , Z X,Y,Z X,Y,Z是以long类型进行存储的,缩放因子字段包含一个double类型的浮点值,用于缩放点记录中相应的 X X X Y Y Y Z Z Z X , Y , Z X,Y,Z X,Y,Z的值必须乘上缩放因子才能得到 x y z xyz xyz的实际坐标。例如,如果 X X X Y Y Y Z Z Z的真实坐标值包含两位小数,那么 X X X Y Y Y Z Z Z每个维度的缩放系数则都为0.01。

  • X, Y, and Z Offsets

  offset字段表示点记录的总体偏移量。真实坐标与点记录的转换公式为:

{ X c o o r d i n a t e = ( X r e c o r d ) × X s c a l e + X o f f s e t , Y c o o r d i n a t e = ( Y r e c o r d ) × Y s c a l e + Y o f f s e t , Z c o o r d i n a t e = ( Z r e c o r d ) × Z s c a l e + Z o f f s e t , \begin{cases} X_{coordinate}=(X_{record})\times X_{scale}+X_{offset},\\ Y_{coordinate}=(Y_{record})\times Y_{scale}+Y_{offset},\\ Z_{coordinate}=(Z_{record})\times Z_{scale}+Z_{offset},\\ \end{cases} Xcoordinate=(Xrecord)×Xscale+Xoffset,Ycoordinate=(Yrecord)×Yscale+Yoffset,Zcoordinate=(Zrecord)×Zscale+Zoffset,
  式中, X r e c o r d X_{record} Xrecord Y r e c o r d Y_{record} Yrecord Z r e c o r d Z_{record} Zrecord为Li-DAR点云数据中的记录值。

  • Max and Min X, Y, and Z

  max和min是未进行缩放的实际坐标的最值。

  • 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

  该字段包含当前数量的EVLRs包括波形数据包记录,存储在文件后的点数据记录。如果EVLRs的数量发生变化,则必须更新此编号。如果没有EVLRs,则该值为零。

  • Number of Point Records

  这个字段包含文件中点数记录的总数。

  • Number of Points by Return

  这些字段包含每次返回的总点数记录的数组。第一个值将是第一次返回的记录总数,第二个包含返回2的记录总数,以此类推,直到15次返回。请注意,无论旧模式的意图如何,这些字段必须始终被正确填充。

2.5 Variable Length Records(可变长记录)

未完待续!!!