2022年4月23日土曜日

BERT 3D examples

先日、BERT (Boundless electrical resistivity tomography) の「3D examples を改良した」と言う旨の連絡が来ました。

この問題を10ヶ月前に Git の issue に投げていたのですが、その後音沙汰がなく、また simpeg へ移行していたため BERT 自体を削除していました。

それではもう一度試してみましょう、と思いインストール。
が、できません。手元の Ubuntu20.04 では以下のコマンドが機能しませんでした。
conda install -c gimli -c conda-forge pybert

では順にということで、まず仮想環境を作成しPython3.8 をインストール。pygimli, pybert, jupyter を順にインストールし、Git のファイルを一式DL。これで準備OK。
で、 testAll.sh を実行!
ダメでした。全てのexamples が failed!となります。jupyter 上では import できたので正しく入ったとは思うのですが。うーん

もう一台の Ubuntu20.04 で試すと、あっさりインストールできました。
こちらも公式指定の場所に examples がなかったので Git のファイルを一式DL。
で、 testAll.sh を実行!
動きました。

と言っても回答のとおり、slagdump は 走るものの 以下はダメなままでした。
2dflat/gallery:galleryGrid.cfg--preparation failed!
3dflat/gallery:galleryGrid.cfg--preparation failed!
3dtopo/acaur:acaur.cfg--preparation failed!

ま、Simpegがあるので、BERTは補助扱いで良いでしょう。

2022年4月7日木曜日

九州地整 3DVR コンテンツ

Cesium for Unreal について先輩と話していると、以下のサイトを紹介されました。

ゲームエンジンを用いたメタバース(仮想空間)での川づくりツールの操作マニュアル(案)
http://www.qsr.mlit.go.jp/infradx/indexge.html

九州地勢さんのHPで公開されています。ツールもDLできるようになっています。
CesiumJS メインで UE4 を使うつもりはなかったのですが、どちらも使えた方が良いのは明らか。(案)を見たところ、UE4 での標高合わせのための QGIS プラグインは便利そうなので、利用させてもらうことにしました。

まず、コチラ↓から「3DVR コンテンツ」をDL。
http://www.qsr.mlit.go.jp/infradx/kiyaku.html

次に、QGIS 3.22.5 でプラグインをインストール。DL した「http___www.qsr.mlit.go.jp_infradx_getool_03_DemConverter.zip」 を指定します(手順は DL したpdfに書かれています)。
が、入りません。ライブラリのインポートで引っ掛かっています。エラーの内容を見ると、gdal を直接読もうとしてダメなようでした。gdal のVer.依存でしょう。
https://pypi.org/project/GDAL/
では、書き換えましょう。

「http___www.qsr.mlit.go.jp_infradx_getool_03_DemConverter.zip」 を解凍し、以下の2か所を書き換えます。

03_DemConverter\tiff2png¥GeoTiffManager.py  の4,5行目
03_DemConverter\png2tiff¥PngTranslator.py  の5,6行目

from osgeo import gdal
from osgeo import gdalconst

これで保存し、zip圧縮しなおします。再度 QGIS から指定すると、インストールできました。
他のソースも覗いてみましたが、MIERUNE さんが書かれたみたいですね。先日お世話になったばかりですが、このようなところで出会うとは。そういえば QGIS カスタマイズも商品に入っていました。

インストールが終わったので、動作確認。
基盤地図情報の 5dem をラスター化し、それをGeotiff へ変換!
あっさりできました。問題ないようです。

あとは UE 側での作業です。 既に Ver.5 に上げましたが、C4U プラグインが対応済みなので動くでしょう。後日、試しましょう。


2022年4月4日月曜日

Infraworks to CesiumJS

 CesiumJS 1.91 で Infraworks 2022 の3Dモデルを共有できるか?

・InfraWorks で obj 書き出し(WGS84/Pseudo-Mercator、オフセットあり)
・obj2gltf を install:npm install -g obj2gltf
・obj2gltf変換:obj2gltf -i 84M.obj -o 84M.glb

Win10 の 3Dビューワーでも glb へ変換できますが、時間がかかります。obj2gltの方が圧倒的に速い。https://github.com/CesiumGS/obj2gltf

CesiumJS で glb を表示してみると位置がおかしい。回転と中心位置座標の指定が必要になります。
では、オフセットなしで書き出したらどうか?
どこかへ飛んでいきました。これは、Cesium ion でも同じ。座標系選択の問題ではなく、InfraWorks から書き出す際の仕様?なのでしょう。

glb の位置は手合わせしかないでしょうか。点群以外の Infraworks の データを一度に書き出せるので、相互の位置関係は保持しています。点群は座標を自動で渡せるので、それを見ながら合わせるしかなさそうです。残念。

2022年4月3日日曜日

GitHub Pages

GitHub の ブランチを web server にできるとのこと。
 https://docs.github.com/ja/pages/getting-started-with-github-pages/about-github-pages

About GitHub Pages
GitHub Pages is a static site hosting service that takes HTML, CSS, and JavaScript files straight from a repository on GitHub, optionally runs the files through a build process, and publishes a website.

JavaScript が使えるので、Cesium を入れている方もいらっしゃいました。
それはありがたい、ということでいざUP。

・public repogitory の root にソースを展開
・Settings から Pages の Source を main/(root)に変更
・クライアント用アドレスが表示される。反映されるまで数分待機。

 これだけでした。動きますね。素晴らしい。push 後の反映も数分待機が必要ですが、文句なしです。

点群タイルを一度に push するとエラーになりました。数回に分けてupすると、無事に点群を表示できました。手軽ですね。


2022年3月31日木曜日

Tiling Point Clouds (las)

Cesium ion を利用せず、CesiumJS で las を取り込みたい。座標変換で位置も合わせたい。何かないでしょうか?

検索したら、引っ掛かりました。
https://stackoverflow.com/questions/67199138/how-to-convert-las-file-to-3d-tiles-so-it-can-render-by-cesium-not-use-cesium-io

試したところ、gocesiumtiler だけが Win10 でも動作しました。
https://github.com/mfbonfigli/gocesiumtiler

Go言語ですが、ビルドするだけなので特別な知識は必要なし。インストール後にプロンプトから go build を打つだけです。作者に感謝!

変換コマンドも1行で簡単。先の静岡の点群データに対しては以下の通り。

./gocesiumtiler -i ./input -o ./output -e 2450 -maxpts 100000 -z 2.5 -geoid -folder -recursive
-e は 変換元のEPSG コードの指定を意味し、続く 2450 が JGD2000 8系のコードです。JGD2011 は含まれていませんでした。追加方法を後日探りましょう。
-z は 高さの補正。そのままでは2mほど埋まったので、2.5m高くしました。地形の入れ替えも探らないと。

できたタイルを Cesium に追加。
const tileset0 = new Cesium.Cesium3DTileset({
  url: "./output/08OF6123/tileset.json",
});
viewer.scene.primitives.add(tileset0);
これで表示されました。簡単です。
タイルにしても詳細を表示させるにはやや重いのですが、許容範囲。点群 viewer としてWebGIS を利用できるようになったのは一歩前進です。

2022年3月26日土曜日

Cesium で点群表示

点群の共有(Viewer)に Cesium が使えるかも?と思い立ち、テストしてみました。

点群は静岡県のMMSを利用。G空間情報センターに掲載されているデータです。
08OF6123.las 4GB

Cesium で共有するなら 3D tile が軽くて良さそう、ということで QGIS の出番。
レイヤーから点群レイヤーを追加→ Qgis2threejs プラグインでシーンを gltf に保存。
https://plugins.qgis.org/plugins/Qgis2threejs/

ダメでした。
表示拡大率そのままで書き出されるので、拡大した際に点群が詳細になりません。
拡大してから書き出すと、途中で落ちます。QGIS なので重い作業はダメなのでしょう。

あきらめて、Cesium ion で変換。
サーバー側での変換は体感で20分くらいでしょうか(測定していませんでした)。
位置は手合わせですね。緯度・経度ならうまくいくのでしょうか?
https://community.cesium.com/t/point-cloud-georeferencing-cesium-ion/10766
ま、アップロードが必要な時点で仕事では使えそうにないですが。

変換されたタイルを Cesium for Unreal で取り込みましたが、エラー。

[TileContentFactory.cpp:112] No loader registered for tile with content type 'application/octet-stream' and magic value 'pnts'.

まだプラグインでサポートされていないようです。
https://community.cesium.com/t/are-point-clouds-supported/12845/5

では、Cesium で。
npm start してから js に変数部分のコードを張り付けて viewer に add するだけ。と思いきや、表示されません。トークンですね。
Cesium ion にアクセスしてフルコードをGET。 Sandcastle で表示されたアクセストークンを貼り付けたら、表示されました。

 
Cesium ion での LAS の位置合わせ、Cesium での 3D タイルの標高合わせ、点の大きさ変更。この3点は今後修正したいですね。


npm

npm, yarn ともに Node.js のパッケージマネージャー。

yarn は npmでインストール。npm は Node.js のインストール段階で入ります。yarn の方が新しいとのこと。Node.js は JavaScript の実行環境です。

初心者なので、npm から。これまでの復習です。

package.json を作成(全てyesで作成)
$ npm init -y

パッケージのローカルインストール
$ npm install aaa
(同時に package.json に aaa が記載される)
Ver指定あり
$ npm install aaa@1.2.3
グローバルインストール(npm-check-updates をどこからでも使いたい場合)
$ npm install -g npm-check-updates

package.json に記載されたパッケージをインストール(別の場所に復元する場合などに利用)
$ npm install
package.json に記載されたVer.にアップデート
$ npm update

パッケージのアップデート(npm-check-updates の利用)
$ ncu -u

package.json 内の scripts.startを実行
$ npm start
("start": "node server.js" と記載されていたら、サーバーが立ち上がる)

****************************
20220331追記
Cesium で localhost を IP に変更すると、つながりませんでした。
$ node server.cjs --public=true
でつながりました。
https://community.cesium.com/t/setting-up-a-cesium-server-using-other-than-localhost/3729