Ubuntu20.04&VScode&libLas 写入Las文件时遇到的问题

目标

雷达在获取数据时(包括xyz和intensity四个信息),需要动态的将这些数据写入las文件中。

参考代码:
文章1
文章2
文章3

遇到的问题

VScode编译报错

首先上安装依赖库后遇到的编译问题,顺序安装好boost,liblas后,点击Vscode的运行按钮,运行代码,它会报错“Undefined reference:“”xxx””,这其实是动态链接库的问题。可以看看这个老哥最后一段话

但他讲的也不是很清楚,首先,我们要找到我们Liblas的动态链接库的位置,如截图所示。我们需要使用的是“liblas.so"系列家族的动态链接库。
在这里插入图片描述
那怎么用呢?
答案是 利用“-l”指令手动g++命令指定

g++  writeLas.cpp -o writeLas  -llas

在这里插入图片描述

分析一下这段代码,writeLas.cpp代表我们目标c++文件, writeLas代表编译后生成的执行文件。
-llas 其实由 两部分 组成一个是“-l”命令,它是去找动态库的命令,另一个是“las” 它代表我们的链接库名称(但是去掉了lib和.so以及后面的内容,这样做的原因我也不清楚),反正只保留文件名称的“las”即可。这两部分内容组成了“-llas”(两者之间没空格!)

  • 编译之后再运行,终端输入
 ./writeLas

这个时候你会看到“undefined”的错误没了,但是另一个输出还存在

The use of BOOST_*_ENDIAN and BOOST_BYTE_ORDER is deprecated. 
Please include <boost/predef/other/endian.h> and use 
BOOST_ENDIAN_*_BYTE instead

在这里插入图片描述
不要管他!! 我一开始以为这也什么报错 其实你抽丝剥茧的去看提到的文件,它归根结底只是一个提示而已,不影响程序运行

写入las的问题

能够顺利编译运行,就要聚焦代码了,之前编译运行,会发现lasView等软件识别不了我生成的las文件。
在Ubuntu上,运行命令

lasinfo /你的las文件地址/你的las文件.las

查看生成的las文件的信息会看到有两个不同寻常之处。
在这里插入图片描述

xyz最值范围不对

根据我的代码,我的最大最小值,不是**{2983,-541,83}这一组。并且,也没道理我的最大值和最小值都是他们吧?
在这里插入图片描述
这暗示我们,可能写入数据的时候,for循环的位置不对,最后检查一下,确实如此,for循环应该放在 header定义和设置的外面,特别是
liblas::Writer writer(ofs,header)** 一定得在for循环外面,不得重复定义(这其实也是一个后面动态写入的一个隐患)
在这里插入图片描述

header point Count 和 actual Point Count数目不对

按道理,两者应该相等的。并且,如果你要LasView打开las数据的话,它也会提示“waring end-of-file after xx of xx points
在这里插入图片描述
原因都在于设置点云数量的代码的问题
要么是你没写这个代码,要么是你这个代码位置不对(应该放在for循环之外),要么就是你的number写错了,应该是10个点,你却写了个2。

header.SetPointRecordsCount(10);    //设置点数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值