はじめに
babylon.jsを使って、地形データを表示します。
仕事の都合で、学習中。
データ
フリーデータ
まずは何を表示する?ということで、フリーのデータを探して、こちらを見つけました。
静岡県ポイントクラウドデータベース
https://pointcloud.pref.shizuoka.jp/
静岡県の施工現場の地形データをlas形式で公開しているサイト。「閲覧・DL」からlas形式のファイルをダウンロードできます。las形式は、バイナリ形式の地形データで、3Dビューワではそのまま表示できるものもあるようですが、babylon.jsで表示したいので、読める形式に変換できないか調べます。
las2txt
http://www.cs.unc.edu/~isenburg/lastools/
las形式のファイルをテキスト形式に変換するツール。
ダウンロードすると、windows用のバイナリファイルがありますが、centosで実行したいので、コンパイルします。Makefileもついている。centos6では、gccのバージョンが古く、コンパイル失敗。こちらを参考に解決。
動かざることバグの如し - CentOS6のgccをアップデートする
https://thr3a.hatenablog.com/entry/20180308/1520506543
コマンドを実行すると、入力ファイルと出力ファイルを求められるので、入力するだけです。
$ las2txt
las2txt is better run in the command line
enter input file: 31S2212011301-1.las
enter output file: 31S2212011301-1.txt
<press ENTER>
スペース区切りのx, y, z形式になります。値はセンサーからの距離でしょうか。
$ head 31S2212011301-1.txt
-20715.16 -89999.21 636.720
-20714.88 -89999.70 637.140
-20714.67 -89998.82 636.980
-20714.66 -89997.34 635.280
-20714.64 -89999.29 637.120
-20714.50 -89998.43 636.830
-20714.45 -89996.97 635.180
-20714.43 -89998.00 636.670
-20714.33 -89999.73 637.670
-20714.31 -89996.47 635.270
点群データ表示
babylon.jsで点群データを表示するには、Points Cloud Particle System
を使います。
https://doc.babylonjs.com/how_to/point_cloud_particles
// 点群データの表示
var pcs = new BABYLON.PointsCloudSystem("pcs", 1, scene);
var myfunc = function(particle, ii) {
particle.position = new BABYLON.Vector3(data[ii][0] - x_mid, data[ii][1] - y_mid, data[ii][2] - z_mid);
}
pcs.addPoints(data.length, myfunc);
pcs.buildMeshAsync();
data
にlas2txtで変換したデータを設定。そのままの値を利用すると値がデカいので、x_mid
, y_mid
, z_mid
にそれぞれの軸の中心点を設定して、引きました。中心点からの距離になっているはず。
できました。
令和元年度[第31-S2212-01号]口坂本No.2事業間連携砂防等事業(地すべり)に伴う測量業務委託(航空レーザ測量)
プログラムはこちら。ぐりぐり動きますが、表示に時間がかかります。
http://141-lab.com/babylon/qiita/pcs/
気になったこと
lasデータをそのまま使うと容量がデカくなるので、点データを減らしてみました。
1/10サイズ
awkで10行に1行を出力するコマンド
cat ./31S2212011301-1.txt | awk '(NR%10==0){print}' > ./31S2212011301-10.txt
結果
点は薄く、表示は早い。
http://141-lab.com/babylon/qiita/pcs/1_10.html
1/100サイズ
awkで100行に1行を出力するコマンド
cat ./31S2212011301-1.txt | awk '(NR%100==0){print}' > ./31S2212011301-100.txt
結果
点はさらに薄く、表示はさらに早い。
http://141-lab.com/babylon/qiita/pcs/1_100.html
まとめ
データ | データサイズ | 点の数 | 表示時間 |
---|---|---|---|
オリジナル | 105M | 3875933 | 36.1秒 |
1/10サイズ | 11M | 387593 | 1.2秒 |
1/100サイズ | 1.1M | 38759 | 0.2秒 |
データを減らしても雰囲気は出ているので、データを減らすのはありかなと思いました。
今後
次は面で地形を表示したい。