PDAL:OSGeo4W安装配置测试PDAL

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,很开心。

一、下载OSGeo4W

下载地址: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.libpdal_util.lib

分享给有需要的人,代码质量勿喷。

#pragma execution_character_set("utf-8")//解决中文

#include "pch.h"
#include <iostream>

#include <memory>
#include <pdal/PointTable.hpp>
#include <pdal/PointView.hpp>
#include <pdal/io/LasReader.hpp>
#include <pdal/io/LasHeader.hpp>
#include <pdal/Options.hpp>

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

发布了63 篇原创文章 · 获赞 58 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/xinjiang666/article/details/97157860