las文件格式转文本格式(Las2Txt)

来源:互联网 发布:云豹直播系统源码 编辑:程序博客网 时间:2024/05/22 20:28

前言

前段时间针对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

0 0
原创粉丝点击