Cloud Optimized Point Cloud(COPC)の作成と表示方法

ドローン画像のフォトグラメトリで作成した点群データをブラウザで快適に表示できるCOPC形式の点群データの作成と表示をやってみました。

copc.io

las、lazファイルの用意

地理座標系(緯度、経度)以外で書き出したlasファイルもしくはlazファイルの点群データを用意します。高度は楕円体高です。(標高になっている場合は補足で説明している方法で変換します。)

COPCへの変換

変換方法は2通りあります。

その1

QGIS3.26以降を用意します。las、lazファイルを画面にドラッグするとxxx.copc.lazのようなファイルが出来上がります。今のところファイル名に日本語は使えません。

その2

PDALを使用します。WindowsならQGIS3.26をインストールした際に入るOSGeo4Wで利用できます。
OSGeo4Wで以下のコマンドを実行しするとlazをcopcに変換できます。

pdal translate -i xxx.laz -o xxx.copc.laz --writers.copc.forward=all

COPCファイルのアップロード

どこかのWEBサーバーにCOPCに変換したファイルをアップロードします。WEBサーバーではCORSを受け付けるように.htaccessを以下のように設定しておきます。

Header set Access-Control-Allow-Origin "https://viewer.copc.io"

COPCデータの表示

https://viewer.copc.io
にアクセスしてデータボタンからAdd point cloudを押してcopcファイルのURLを貼り付けます。
もしくは以下のように直接URLを指定してアクセスします。
https://viewer.copc.io/?copc=https://www.example.com/xxx.copc.laz

  • Ctrlを押しながらドラッグで回転できます。
  • 色はデフォルトでElevationになっているのでパネルからRGBに変更すると実際の色で表示できます。
  • 点のサイズを変えたり、表示数(Point budget)を変えたりすると見た目の詳細さが変わります。

COPC Viewerについて

以下によるとオープンソースではないようです。見た目はなんとなくCesiumっぽいので、そのCOPC対応版なのかな?と思ってみたり。
https://hobu.co/copc-viewer.html

補足 lazが標高になっている場合

手元にある点群データが平面直角座標系10で高さは標高値となっている場合の変換方法です。COPC Viewerの地形データは楕円体高となっているため高さを合わせるためにはcopcのデータも楕円体高に変換しておく必要があります。(点群データの高さは一般的には楕円体高なんですかね?知りません)

PDALのパイプライン用のファイルを以下のように作成します。

  • xxx.lazは読み込むファイル
  • 最初のin_srsは平面直角座標系10(epsg:6678)のproj指定にgeoidgridを追加したもの。geoidgridで指定しているgtxファイルはこちらで説明しているものを使用。
  • 最初のout_srsはEPSG:6667(緯度、経度、楕円体高)。ここで一旦、平面直角座標系10の標高を緯度経度の楕円体高に変換する。
  • 次のout_srsはEPSG:6678(平面直角座標系10)。これで楕円体高の平面直角座標系10になる。ただ、EPSG:6678は2D用なので3D用には別のものがある気がするけど分かりません。(EPSG:6678+224みたいな感じ??)
  • 最後にwriters.copcでcopcに変換します。

pipeline.json

[
{
"type" : "readers.las",
"filename" : "xxx.laz"
},
{
"type":"filters.reprojection",
"in_srs":"+proj=tmerc +lat_0=40 +lon_0=140.833333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +geoidgrids=D:/PDAL/jp_gsi_gsigeo2011.gtx",
"out_srs":"EPSG:6667"
},
{
"type":"filters.reprojection",
"in_srs":"EPSG:6667",
"out_srs":"EPSG:6678"
},
{
"type" : "writers.copc",
"filename" : "xxx.copc.laz"
}
]

pdal pipeline pipeline.json で変換を実行します。