由于大多数点云文件都是las格式的,所以有必要解析下此文件格式并提取出需要的点云坐标信息。
las格式是ASPRS下属的LIDAR委员会制定了LIDAR数据的标准交换格式,较好地顾及了LIDAR数据的特点,其结构合理,便于扩展。从本质上来说,LAS格式是一种二进制文件格式。一个符合LAS标准的LIDAR文件分为三个部分:公用文件头块(PUBLICHEADERBLOCK)、变量长度记(VARIABLELENGTHRECORDS)和点数据记录(POINTDATARECORD)。
las目前有好几种版本,但主要都包含上述三个部分,此程序主要参考1.2版本。las1.2版本介绍可从
1. 结构体定义:
1.1 PUBLICHEADERBLOCK:
公共头用来记录数据集的基本信息,包括LIDAR点总数、数据范围、LIDAR点格式、变长记录总数、LAS文件的生成方式等。
struct public_Header_Block
{
char file_signature[4];
unsigned short file_source_id;
unsigned short global_encoding;
unsigned long project_id_guid_data1;
unsigned short project_id_guid_data2;
unsigned short project_id_guid_data3;
unsigned char project_id_guid_data4[8];
unsigned char version_major;
unsigned char version_minor;
char systemID[32];
char generatingSoftware[32];
unsigned short fileCreationDay;
unsigned short fileCreationYear;
unsigned short headerSize;
unsigned long pointDataOffset;
unsigned long numberOfVariableRecords;
unsigned char pointDataFormatID;
unsigned short pointDataRecordLength;
unsigned long numberOfPointRecords;
unsigned long numberOfPointsByReturn[5];
double x_scale;
double y_scale;
double z_scale;
double x_offset;
double y_offset;
double z_offset;
double x_max;
double x_min;
double y_max;
double y_min;
double z_max;
double z_min;
};
1.2. VARIABLELENGTHRECORDS:
变长记录用来记录数据的投影信息、元数据信息以及用户自定义信息等,是LAS格式中最灵活的部分。每条变长记录包括固定的变长记录头和灵活的扩展域两部分。一条变长记录的长度=变长记录头长度+扩展域长度。
struct variable_Length_Record_Header
{
unsigned short reserved;
char user_ID[16];
unsigned short record_ID;
unsigned short record_Length_After_Header;
char description[32];
};
1.3. POINTDATARECORD:
点集记录部分保存了大量的L IDAR