- 关于las数据的数据规范
从本质上来说,LAS格式是一种二进制文件格式。其目的是提供一种开放的格式标准,允许不同的硬件和软件提供商输出可互操作的统一格式。现在LAS格式文件已成为LiDAR数据的工业标准格式。
LAS文件按每条扫描线排列方式存放数据,包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等。LAS格式定义中用到的数据类型遵循1999年ANSI(American National Standards Institute,美国国家标准化协会)C语言标准。
一个符合LAS标准的LIDAR文件分为三个部分:公用文件头块(PUBLIC HEADER BLOCK)、变量长度记录(VARIABLE LENGTH RECORDS)和点数据记录(POINT DATA RECORD)。
a、PUBLIC HEADER BLOCK介绍
其中文件记录了点云的版本号(1.1,1.2,1.3等)记录在version Minor字段中,Point Data Record Length决定了每一个点云的长度。 Point Data Format ID 不相同,Point Data Record Length的值也不相同,点云的点的属性也不相同。
注:(二进制文件流的长度-Offset to point data)/ Point Data Record Length=点云的个数即头文件中的Number of Point Records
b、POINT DATA RECORD介绍
C--class(所属类)
F一flight(航线号)
T一time(GPS时间)
I一intensity(回波强度)
R一return(第几次回波)
N一number of return(回波次数)
A一scan angle(扫描角)
RGB一red green blue(RGB颜色值)
其中头文件中的Point Data Format ID 不相同,Point Data Record Length的值也不相同,点云的点的属性也不相同。上图是比较常用的,还有一些其他的字段属性UserData、BitMask等此时的Point Data Format ID与上图的Point Data Format ID就不是同一种类型了。
- 常用的开源的las文件的读写库
提到常用的开源库,就会用到市面上比较常用的两个开源库如laslib与liblas。刚开始的时候会傻傻分不清两者的关系。
liblas和laslib是两个不一样的库,laslib是lastools这个工具编译出来的库,是一个教授维护的库,liblas是一个工程师维护的库。在竞争抗衡的过程中因为一些问题后面liblas库没有继续更新了维护了,然后liblas库的开发者推出了一个新的库来对抗lastools 就是pdal,准备继续与lastools竞争。
现在市面上常用的基本都是lastools编译出来的laslib库,C++可以直接引用使用该库对las文件进行读写。
Github上也有一些其他的版本的如C#版本的,Python版本的等
LASTools下载地址
https://github.com/LAStools/LAStools
C#使用laslib或liblas读写las数据
https://github.com/wren11/AtlassLASLib
Python使用laspy或pylas读写las数据
https://github.com/tmontaigu/pylas
https://github.com/laspy/laspy
- las数据读写中存在的问题
las数据的要依据las属性的类型进行存储,譬如强度值没有小数位,xyz都是int32类型等。
las头文件中的 XYZ scale是可以对xyz的值进行缩放的,设置xyz的缩放比。