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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章