libLAS是一款非常好的点云数据处理库,但是,As of 2018, libLAS has been replaced by the PDAL project and it is in hibernation or maintenance mode.
笔者为了编译CloudCompare需要用到PDAL;曾经用Conda编译过PDAL,但是一直报错。
因此,利用OSGeo4W配置PDAL,很开心。
下载地址:https://trac.osgeo.org/osgeo4w/
2.1 选择“Advanced Install”;接下来默认即可(听说安装路径变了后很麻烦)
2.2 搜索pdal,单击skip,变成(选择)1.8.0。(我安装过了,所以是keep)。
PDAL的依赖库会一同安装。
然后一直下一步或同意即可。
2.3 安装完成后,C:\OSGeo4W64会有很多文件(包括其它依赖库)。
右击电脑属性—高级系统设置—高级—环境变量—系统变量—Path
添加路径:(不知道对不对,哈哈;欢迎大佬批评指正)
C:\OSGeo4W64\bin
重启电脑。
4.1 时间较长;(PDAL的依赖库较多,网速需要稳定且快)
4.2 出错一次,显示安装不完整,重新安装后可以了;(可能是网络问题)
4.3 笔者编译CloudCompare需要配置PDAL。
编译CloudCompare2.10后,运行CloudCompare.exe时显示缺少gdal203.dll。
因此,重新运行OSGeo4W,搜索gdal,发现gdal203.dll(下图箭头)并没有安装;(下图是安装后的)
于是,笔者安装 gdal203.dll;
重新编译CloudCompare,运行CloudCompare.exe时就不报错了。(同类错误可以以此类推)
5.1 新建项目Windows控制台应用程序
5.2 配置:右击项目——属性——配置属性
C/C++——常规——附加包含目录:添加 C:\OSGeo4W64\include
C/C++——预处理器——预处理器定义:添加
_CRT_SECURE_NO_DEPRECATE
_SCL_SECURE_NO_DEPRECATE
参考:https://www.cnblogs.com/douzi2/p/3974959.html
链接器——常规——附加库目录:添加 C:\OSGeo4W64\lib
链接器——输入——附加依懒项:添加 pdalcpp.lib、pdal_util.lib
分享给有需要的人,代码质量勿喷。
#pragma execution_character_set("utf-8")//解决中文
#include "pch.h"
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
string xjFileName = "E:\\测试\\test.las";//中文路径可能报错
pdal::Option las_opt("filename", xjFileName);//参数1:"filename"(键)
pdal::Options las_opts;
las_opts.add(las_opt);
pdal::PointTable table;
pdal::LasReader las_reader;
las_reader.setOptions(las_opts);
las_reader.prepare(table);
pdal::PointViewSet point_view_set = las_reader.execute(table);
pdal::PointViewPtr point_view = *point_view_set.begin();
pdal::Dimension::IdList dims = point_view->dims();
pdal::LasHeader las_header = las_reader.header();
double xmin = las_header.minX();
double xmax = las_header.maxX();
double deltaX = xmax - xmin;
cout << "deltaX=" << fixed << setprecision(4) << deltaX << endl;
double ymin = las_header.minY();
double ymax = las_header.maxY();
double deltaY = ymax - ymin;
cout << "deltaY=" << fixed << setprecision(4) << deltaY << endl;
double zmin = las_header.minZ();
double zmax = las_header.maxZ();
double deltaZ = zmax - zmin;
cout << "deltaZ=" << fixed << setprecision(4) << deltaZ << endl;
unsigned int n_features = las_header.pointCount();
cout << "PointCount=" << n_features << endl;
}
5.3 计算结果与CloudCompare显示是一致的。
六、代码参考
https://pdal.io/api/transition/index.html