LASデータ操作のスイスアーミーナイフ「LAStools」をMacOSで利用したい

LASデータをガチャガチャやる上で、スイスアーミーナイフ、まぁようはなんでもできるで、とまで言われている「LAStools」。
基本的には有料のツールでライセンスを取得する必要があるのですが、一部のツールは無料で利用できます。
ですが、MacOSで利用しようとすると、インストール方法が不明瞭だなーと思ったので、インストールまでのメモ書きです。
（もしかしたらちゃんとしたインストール方法があるかもしれません。その際は教えていただけると泣いて喜びます。）

## 利用するOS

今回は以下のようなマシンで試していきます。
インテル版macOS Montereyです。
なのでM1などのチップだとうまく動作するかは分かりません…

- バージョン

```bash
❯ sw_vers
ProductName:    macOS
ProductVersion: 12.4
BuildVersion:   21F79
```

- スペック

```bash
❯ system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro16,1
      Processor Name: 8-Core Intel Core i9
      Processor Speed: 2.3 GHz
      Number of Processors: 1
      Total Number of Cores: 8
      L2 Cache (per Core): 256 KB
      L3 Cache: 16 MB
      Hyper-Threading Technology: Enabled
      Memory: 32 GB
...
```

## インストール

早速インストールしてみましょう。

こちらのページにダウンロードボタンがあるので、クリックしてzipをダウンロードします。
[https://rapidlasso.de/customers/](https://rapidlasso.de/customers/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/4f7db40b-270e-1d98-7e57-b742d9053bc3.png)

zipのダウンロードが終わったら基本はgithubの[LAStools](https://github.com/LAStools/LAStools)ページに従ってmakeしていきますが、ちょっと工程が異なります。

LAStools.zipの解凍後、すでにPATHが通っているディレクトリの下に移動させておきましょう。通っているPATHはこのように調べることができます。

```bash
% $PATH
...
/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
...
```

macを長く利用していればいろんなところにパスを通しているかと思いますが、デフォルトで通っていそうなのはこの辺りでしょうか。
今回は`/usr/local/bin`に入れてみることにします。
その後、`make`します

```bash
unzip LAStools.zip
cp -r LAStools/ /usr/local/bin/LAStools/
cd /usr/local/bin/LAStools/ 
make
```

ログがズラーっと出てきたのち、エラーが出てきて停止してしまいました…

```bash
% make
...
g++  -c -O3 -Wall -Wno-deprecated -Wno-strict-aliasing -Wno-write-strings -Wno-unused-result -DNDEBUG   -I../LASzip/src -I../LASlib/inc  lasindex.cpp -o lasindex.o
lasindex.cpp:146:25: error: character too large for enclosing character literal type
      if (argv[i][0] == '�') argv[i][0] = '-';
                        ^
1 error generated.
make[1]: *** [lasindex.o] Error 1
make: *** [all] Error 2
```

全然ダメじゃん…って思ったんですが、よくよく見てみると`LAStools/bin`の中に一部のツールは実行ファイルが作成されているような気がしますね。

```bash
% ls -lrt bin 
...
-rwxr-xr-x  1 xxxx  staff  1511728  6 24 06:37 laszip*
-rwxr-xr-x  1 xxxx  staff  1607680  6 24 06:37 lasinfo*
-rwxr-xr-x  1 xxxx  staff  1509480  6 24 06:37 lasprecision*
-rwxr-xr-x  1 xxxx  staff  1345344  6 24 06:37 las2txt*
-rwxr-xr-x  1 xxxx  staff  1509328  6 24 06:37 txt2las*
-rwxr-xr-x  1 xxxx  staff  1525936  6 24 06:37 las2las*
-rwxr-xr-x  1 xxxx  staff  1361824  6 24 06:37 lasdiff*
-rwxr-xr-x  1 xxxx  staff  1492944  6 24 06:37 lasmerge*
```

これはgithubに記載の`Open source tools`の項目とほぼ一致しています。
lasindexが存在しないのと、lasdiffが作成されてしまっているところが気になりますが、そもそもlasdiffはgithubのページに名前が載っていないので、ドキュメントの更新が遅れているのかな？と思います。

- `las2las` extracts last returns, clips, subsamples, translates, etc ...
- `las2txt` turns LAS into human-readable and easy-to-parse ASCII
- `lasindex` creates a spatial index LAX file for fast spatial queries
- `lasinfo` prints out a quick overview of the contents of a LAS file
- `lasmerge` merges several LAS or LAZ files into a single LAS or LAZ file
- `lasprecision` analyses the actual precision of the LIDAR points
- `laszip` powerful, lossless LiDAR compressor that turns large LAS files into much smaller LAZ files hat are only 7 - 20 percent of the original file size
- `txt2las` converts LIDAR data from ASCII text to binary LAS format

ただ、このままだと実行のたびにLAStoolsのフォルダに格納されているバイナリファイルを指定しないといけないので、pathの通っているディレクトリに移動しちゃいましょう。

## PATHを通す

`zshrc`や`bashrc`を修正します。
お使いのshellは以下の方法で調べることができます。

```bash
$ echo "$SHELL"
/bin/zsh
```

`<利用しているshell>rc`を編集し、更新しましょう。

```bash
echo 'export PATH=/usr/local/bin/LAStools/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
```

PATHが通りましたね。

```bash
% $PATH
/usr/local/bin/LAStools/bin:...
```

これで準備完了です!

## ツールを使ってみる

[VIRTUAL SHIZUOKA 静岡県 富士山南東部・伊豆東部 点群データ](https://www.geospatial.jp/ckan/dataset/shizuoka-2019-pointcloud/resource/d5e98a7b-f15c-45b0-bf40-0287f5b1de68)などで適当なlasデータをダウンロードして…

以下のコマンドでサクッとlasをlazに圧縮できます！

```bash
laszip -i 08OF1348.las -o 08OF1348.laz
```

ファイルサイズを確認すると345Mから77Mまで圧縮できましたね！すごい！

```bash
❯ ll                                    
total 872552
-rw-r--r--  1 xxxx  staff    77M  6 24 06:48 08OF1348.laz
-rw-rw-r--@ 1 xxxx  staff   345M  3 18  2020 08OF1348.las
```

メタ情報の確認もしてみましょう。

```bash
% lasinfo 08OF1348.las
lasinfo (220613) report for '08OF1348.las'
reporting all LAS header entries:
  file signature:             'LASF'
  file source ID:             0
  global_encoding:            1
  project ID GUID data 1-4:   00000000-0000-0000-0000-000000000000
  version major.minor:        1.2
  system identifier:          'Aero Asahi Corp.,'
  generating software:        'LAS Tool'
  file creation day/year:     65/2020
  header size:                227
  offset to point data:       229
  number var. length records: 0
  point data format:          3
  point data record length:   34
  number of point records:    10647410
  number of points by return: 5951724 2357532 1336198 670565 331391
  scale factor x y z:         0.001 0.001 0.001
  offset x y z:               -0 -0 -0
  min x y z:                  55199.840 -124500.130 58.430
  max x y z:                  55600.070 -124199.790 103.600
the header is followed by 2 user-defined bytes
reporting minimum and maximum for all LAS point record entries ...
  X            55199840   55600070
  Y          -124500130 -124199790
  Z               58430     103600
  intensity         444      65535
  return_number       1          5
  number_of_returns   1          5
  edge_of_flight_line 0          0
  scan_direction_flag 0          1
  classification      1          2
  scan_angle_rank   -14         14
  user_data           1          1
  point_source_ID    28         83
  gps_time 259119985.930357 260069306.731555
  Color R 7168 65280
        G 11776 65280
        B 256 65280
WARNING: there is coordinate resolution fluff (x10) in Z
number of first returns:        5951724
number of intermediate returns: 2258126
number of last returns:         6041380
number of single returns:       3603820
overview over number of returns of given pulse: 3603820 2035805 1995189 1680537 1332059 0 0
histogram of classification of points:
         7131131  unclassified (1)
         3516279  ground (2)
```

ん〜見やすい。

これでLAStoolsのオープンなツールが利用できるようになりました！
みなさんも活用してみてください！