更新:2020年3月
为了促进同行业人员(特指 LiDAR 点云处理人员或相近行业)的技术交流,解决平时开发过程中遇到的技术性问题,博主建立一个QQ群,欢迎大家积极加入,共同引领点云行业的快速发展 ~
群名:LiDAR点云部落
群号:190162198
说明
这里说的是 Laslib,并不是 liblas,注意!注意!注意!
- Laslib 的配置请参考我之前的博客:LAStools 配置方法、遇到的问题及其调用(全网最详细)
Laslib 之 读
代码
// c++
#include <iostream>
// Laslib
#include "lasreader.hpp"
int main(){
// 点云路径
std::string file_path("E:/Railway_TLS.las");
// 打开las文件
LASreadOpener lasreadopener;
lasreadopener.set_file_name(file_path.c_str());
LASreader* lasreader = lasreadopener.open();
size_t point_count = lasreader->header.number_of_point_records;
// 遍历点云
while(lasreader->read_point()){
std::cout << lasreader->point.get_x() << " "
<< lasreader->point.get_y() << " "
<< lasreader->point.get_z() << std::endl;
}
// 关闭点云流
lasreader->close();
delete lasreader;
return 0;
}
Laslib 之 写
代码
// c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Laslib
#include "laswriter.hpp"
int main(){
// 写出流
LASwriteOpener laswriteopener;
laswriteopener.set_file_name("E:/youruser.las");
// 是否创建成功
if(!laswriteopener.active()){
std::cout << "Failed!\n";
return;
}
// 初始化头
LASheader lasheader;
lasheader.x_scale_factor = 1.0;
lasheader.y_scale_factor = 1.0;
lasheader.z_scale_factor = 1.0;
lasheader.x_offset = 0.0;
lasheader.y_offset = 0.0;
lasheader.z_offset = 0.0;
lasheader.point_data_format = 1;
lasheader.point_data_record_length = 28;
// 初始化点
LASpoint laspoint;
laspoint.init(&lasheader, lasheader.point_data_format, lasheader.point_data_record_length, 0);
// 写点云
LASwriter* laswriter = laswriteopener.open(&lasheader);
if(laswriter == 0){
std::cout << "Failed!\n";
return;
}
for(int i = 0; i < 100; i++){
laspoint.set_X(i);
laspoint.set_Y(i);
laspoint.set_Z(i);
laspoint.set_intensity((U16)i);
laspoint.set_gps_time(0.0006*i);
laswriter->write_point(&laspoint);
laswriter->update_inventory(&laspoint);
}
// 关闭流
laswriter->update_header(&lasheader, TRUE);
laswriter->close();
delete laswriter;
return 0;
}
参考来源
- 更多请查看 Github 官方教程:LAStools/LASlib/example/