前言
前段时间针对las文件写了分割为文本文件的代码及一个简单应用,现在发现并没有必要直接对las文件进行分割,完全可以将las文件转化为文本之后,根据需要再进行分割是一个更好的选择。现在将前段时间写的代码进行整理,并重新写了一个格式转换的应用进行分享。
代码
把自己写好的类包含到szw名字空间,以免和其他C++开源库中已有类名产生冲突。曾经没有过多关注这个问题,当代码量堆积如山之后,才发现这是多么的有必要!
las2txttool.h
#pragma once
//////////////////////////////////////////////////////////////////////////
// Time :2016/05/15
// Author :Szw
// CSDN :吕小猪不坏
// 贴吧 :lidar
//
//
//////////////////////////////////////////////////////////////////////////
class Las2TxtTool
{
std::string inFileName_;
int precision_;
public:
Las2TxtTool(void);
~Las2TxtTool(void);
void setFileName(std::string _inFileName){
inFileName_=_inFileName;
}
void setPrecision(int _precision){
precision_=_precision;
}
bool las2txt();
};
namespace szw{
class Las2Txt: public Las2TxtTool{};
}
las2txttool.cpp
#include <liblas\liblas.hpp>
#include <iomanip>
#include <sstream>
#include "las2txttool.h"
Las2TxtTool::Las2TxtTool(void)
{
precision_=8;
}
Las2TxtTool::~Las2TxtTool(void)
{
}
bool Las2TxtTool::las2txt()
{
std::ifstream ifs;
ifs.open(inFileName_, std::ios::in | std::ios::binary);
if (ifs == NULL)
{
std::cout<<"File Error!"<<std::endl;
return false;
}
liblas::ReaderFactory f ;
liblas::Reader reader = f.CreateWithStream(ifs);
liblas::Header const& header = reader.GetHeader();
char path_buffer[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath( inFileName_.c_str(), drive, dir, fname, ext );
std::string driveStr(drive),dirStr(dir);
std::string outFilePath(driveStr+dirStr);
std::cout<<outFilePath;
std::string currentFileName("_ascii.txt");
std::ofstream ofile;
ofile.open(outFilePath+fname+currentFileName);
ofile<<"//X Y Z Intensity ReturnNumber NumberofReturns Classification ScanDirectionFlag EdgeofFlightLine ScanAngleRank PointSourceID GPSTime\n";
ofile<<std::setiosflags(std::ios::fixed);
reader.Seek(0);
while (reader.ReadNextPoint())
{
liblas::Point const& p = reader.GetPoint();
ofile<<std::setprecision(precision_)<<p.GetX()<<" "<<p.GetY()<<" "<<p.GetZ()<<" "
<<p.GetIntensity()<<" "<<p.GetReturnNumber()<<" "<<p.GetNumberOfReturns()<<" "
<<p.GetClassification()<<" "<<p.GetScanDirection()<<" "<<p.GetFlightLineEdge()<<" "
<<p.GetScanAngleRank()<<" "<<p.GetPointSourceID()<<" "<<p.GetTime()<<std::endl;
}
ofile.close();
return true;
}
main.cpp
#include <iostream>
#include <string>
#include "las2txttool.h"
void main()
{
std::cout<<"las2txt..."<<std::endl;
std::string inFileName;
std::cout<<"Input inFileName:\n";
std::cin>>inFileName;
int precis(8);
std::cout<<"Input precision:\n";
std::cin>>precis;
szw::Las2Txt las2Txt;
las2Txt.setFileName(inFileName);
las2Txt.setPrecision(precis);
las2Txt.las2txt();
}
应用分享
下载链接:http://download.csdn.net/detail/wokaowokaowokao12345/9520939