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

前言

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

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值