【点云】PDAL库1.8.0版本安装与环境配置

在编译CC源码时,需要使用pdal来读取las文件,所以记录一下配置过程

打开 osgeo4w-setup.exe,选择 Advanced Install

在这里插入图片描述

选择 Install from Internet

在这里插入图片描述

设置路径,记得一定要是这个路径:

在安装PDAL时,最好是这个路径,如果不是这个路径,在编译CC的时候会遇到很多问题

默认路径可能没有64,但是如果没有64,在编译CC时可能会存在问题

在这里插入图片描述

点击下一页

在这里插入图片描述

点击第一个,并选择下一步

在这里插入图片描述

添加武大源:http://gwmodel.whu.edu.cn/mirrors/osgeo4w,点击下一步

在这里插入图片描述

在Search中输入 pdal

在这里插入图片描述

点击 第三列下面的 Skip,找到 1.8.0 版本,可以选择其他版本。

如果不使用武大源,则可能是其他版本,大家按需下载。

选择好以后,点击下一页,之后就会进入安装的过程。安装pdal会涉及到其他第三方库,都会提示是否安装以及接受一些许可。

配置环境

为了更好的使用pdal,最好是在环境变量中做一些相应的设定

bin目录添加到系统变量的Path中:

在这里插入图片描述

从OSGeo4W里下载的是Release版本的,所以在使用的时候,也最好在Release模式下开发,不然会出现一些bad_alloc的问题。

在Release属性配置中:

通用属性–>VC++目录–>包含目录:

在这里插入图片描述

通用属性–>VC++目录–>库目录:

在这里插入图片描述

链接器–>输入–>附加依赖项:

在这里插入图片描述

代码:

#pragma execution_character_set("utf-8") 

#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>

#include <pcl/io/pcd_io.h>  
#include <pcl/point_types.h>  
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>

int main()
{
	string fileName = "E:/data/T_509500_4153000.las";
	
	pdal::Option las_opt("filename", 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;
	printf("deltaX = %.4f\n", deltaX);

	double ymin = las_header.minY();
	double ymax = las_header.maxY();
	double deltaY = ymax - ymin;
	printf("deltaY = %.4f\n", deltaY);
	
	double zmin = las_header.minZ();
	double zmax = las_header.maxZ();
	double deltaZ = zmax - zmin;
	printf("deltaZ = %.4f\n", deltaZ);

	unsigned int n_features = las_header.pointCount();
	printf("deltaZ = %d\n", n_features);

	unsigned int	PointCount	= las_header.pointCount();
	double			scale_x		= las_header.scaleX();
	double			scale_y		= las_header.scaleY();
	double			scale_z		= las_header.scaleZ();
	double			offset_x	= las_header.offsetX();
	double			offset_y	= las_header.offsetY();
	double			offset_z	= las_header.offsetZ();

	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	cloud->points.resize(point_view->size());
	
	for (pdal::PointId id = 0; id < point_view->size(); ++id)
	{
		double x = point_view->getFieldAs<double>(pdal::Dimension::Id::X, id);							// X
		double y = point_view->getFieldAs<double>(pdal::Dimension::Id::Y, id);							// Y
		double z = point_view->getFieldAs<double>(pdal::Dimension::Id::Z, id);							// Z
		double red = point_view->getFieldAs<double>(pdal::Dimension::Id::Red, id);						// R
		double green = point_view->getFieldAs<double>(pdal::Dimension::Id::Green, id);					// G
		double blue = point_view->getFieldAs<double>(pdal::Dimension::Id::Blue, id);					// B
		double point_class = point_view->getFieldAs<double>(pdal::Dimension::Id::Classification, id);	// 分类标签
		double GPSTime = point_view->getFieldAs<double>(pdal::Dimension::Id::GpsTime, id);				// GPS时间
		auto Intensity = point_view->getFieldAs<double>(pdal::Dimension::Id::Intensity, id);			// 强度
		
		cloud->points[id].x = x;
		cloud->points[id].y = y;
		cloud->points[id].z = z;
	}
	
	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
	viewer->setBackgroundColor(0, 0, 0);
	std::string name = u8"PDAL读点云PCL可视化";
	viewer->setWindowName(name);

	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud, 0, 255, 0);

	viewer->addPointCloud<pcl::PointXYZ>(cloud, single_color, "sample cloud");
	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");

	while (!viewer->wasStopped())
	{
		viewer->spinOnce(100);
		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
	}
	return 0;
}

如果可以正常读取并显示点云,则代表配置成功。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值