徳原測量設計事務所

広島・東広島市で境界確定・宅造・開発申請業務を行っています。ワンストップで仕入れから販売までお手伝いできます。お気軽にご相談ください。

Get In Touch

お問い合わせ

Follow Us

PythonでドローンのTEXTデータをPotreeで読み込めるLASデータへ変換しようとしたら

やはりChatGPTではまだかけない。

https://potree.org/potree/examples/viewer.html

こちらを指示すると、一つ前の指示を忘れているようで、、、

結局コード読んで考えて修正を加えないといけない。

でも高校生レベルまでは来ているイメージかな、、

一応ドローンのTXTデータをCM単位でLASデータに変換するコードができたので書いておく。

調査士なのにドローンが当たり前になりつつある今日このごろ。コードも若い人はチラホラと書ける人がどんどん入ってくる。

おじさんは少し危機感を持っている。

ITを少しばかりかじったのは無駄ではなかったと思う今日このごろ

import laspy
import numpy as np

# CSVデータを読み込み
input_csv = "tengun.txt"  # CSVファイルの名前
output_las = "output.las"


# 点群データの分割処理用関数
def process_chunk(input_csv, output_las, chunk_size=100000):
    points = []
    with open(input_csv, "r") as f:
        for line in f:
            parts = line.strip().split()
            x, y, z = map(float, parts[:3])
            r, g, b = map(int, parts[3:6])
            points.append((x, y, z, r, g, b))

            # チャンクが一定数に達したら書き出す
            if len(points) >= chunk_size:
                write_to_las(points, output_las)
                print(f"LASファイルを作成しました: {output_las}")
                points = []  # ポイントリストをリセット

        # 最後の残りデータを書き出し
        if points:
            write_to_las(points, output_las)

# LASデータ書き込み用関数


def write_to_las(points, output_las):

    # LASファイルのヘッダーを定義
    # point_format=3 は RGB を含む
    header = laspy.LasHeader(point_format=3, version="1.2")
    header.offsets = np.min(np.array(points)[:, :3], axis=0)
    header.scales = np.array([0.01, 0.01, 0.01])  # スケール設定(cm単位)

   # LASファイルを作成
    las = laspy.LasData(header)

    # 座標データを設定 (配列形式に変換)
    points_array = np.array(points)
    las.x = points_array[:, 0]  # X座標
    las.y = points_array[:, 1]  # Y座標
    las.z = points_array[:, 2]  # Z座標
    las.write(output_las)


# 実行
process_chunk(input_csv, "output.las", chunk_size=100000)

print(f"LASファイルが完成しました: {output_las}")

と思ったらすでにアプリがあったようでこちらのブログに書いてありました。

私の4時間をかえしてほしい、、、

車輪の再発明というらしい。

先にググればよかった。涙