본문 바로가기

major

LAS to TXT 파일 변환

이전 포스팅 ☛ 맥(macOS)에 libLAS 설치하고 Makefile로 실행파일 만들기

 

libLAS 또는 laspy를 사용해서 las 파일을 txt 파일로 변환하는 방법을 알려드리겠습니다.

첫번째 방법으로는 libLAS에서 제공하는 명령어를 사용한 방법입니다.

명령어 자체는 굉장히 간단합니다.

las2txt -i 파일이름.las -o 파일이름.txt

터미널 화면
변환한 txt 파일

las 파일이 txt 파일로 변환된 것을 확인할 수 있습니다.

공식 홈페이지에는 더 많은 las2txt 명령어 옵션이 상세하게 설명되어 있습니다.

 

두번째 방법으로는 C++ 코드를 작성하는 방법입니다.

lastotxt.cpp 파일과 CMakeLists.txt 파일을 아래와 같이 작성합니다.

// lastotxt.cpp
#include <iostream>
#include <liblas/liblas.hpp>

using namespace std;

void loadlasfile(string lasfile, string outfile) {
    ifstream ifs;
    ifs.open(lasfile, ios::in | ios::binary);
    ofstream out;
    out.open(outfile);
    cerr << "INFO : Loading : " << lasfile << endl;
    
    // fail to open file
    if(ifs.fail()){
        cerr << "ERROR : Impossible to open the file : " << lasfile << endl;
        return;
    }
    
    liblas::ReaderFactory f;
    liblas::Reader reader = f.CreateWithStream(ifs);
    liblas::Header const& header = reader.GetHeader();
    
    while(reader.ReadNextPoint()){
        liblas::Point const& p = reader.GetPoint();
        out << p.GetX() << " " << p.GetY() << " " << p.GetZ() << endl;
    }
}

int main(){
    string lasfile = "chair.las";
    string outfile = "chair.txt";
    loadlasfile(lasfile,outfile);
    
    return 0;
}
// CMakeLists.txt
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project(lastotxt)

find_package(libLAS)

include_directories(${libLAS_INCLUDE_DIRS})
link_directories(${libLAS_LIBRARY_DIRS})

add_compile_options()

add_executable (lastotxt lastotxt.cpp)
target_link_libraries (lastotxt ${libLAS_LIBRARIES})

다음 명령어를 통해서 빌드합니다.

cd your-project-path

mkdir build

cd build

cmake ..

make

./lastotxt

터미널 화면
폴더 화면
변환된 txt 파일

txt파일로 변환된 것을 확인할 수 있습니다.

 

마지막으로 파이썬 패키지인 laspy를 사용한 방법입니다.

python 3.7.6 버전을 기준으로 작성했습니다.

laspy 패키지를 설치해줍니다.

pip install laspy

다음 코드를 작성하고 실행합니다.

# -*- coding: utf-8 -*-
from laspy.file import File

inFile = File('chair.las', mode='r')
outFile = open('chair.txt',mode='w')
records_count = inFile.header.records_count

for i in range(0, records_count):
    outFile.write('%f %f %f\n'%(inFile.x[i], inFile.y[i], inFile.z[i]))

변환된 txt 파일

 

세 가지의 다른 방법을 소개해 드렸습니다.

인터넷 검색을 해도 las파일을 읽어오는 방법이 잘 나와있지 않아서 포스팅 작성해봤습니다.

도움이 되었으면 좋겠습니다:)


잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.

이 포스팅이 도움이 되었다면 공감 부탁드립니다.

궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D