三次元地理空間情報がウェブに乗らなければならない、とは言っても、三次元地理空間情報には、ざっと挙げても、次のようなさまざまな種類がある。
- DEM data
- CAD data
- point cloud
- triangle mesh (polygon mesh, with or without texture)
ここは分割統治法を適用するべきである。また、ウェブ上に実装がある技術のみをまずは狙うべきである。
このエントリでは、三角形メッシュデータ triangular mesh data のウェブ用フォーマットとして、下記 URL で紹介されている quantized-mesh-1.0 terrain format について研究する。
原典
座標系及びタイル分割方法
OSGeo TMS の global-geodetic 方式で四分木分割する。地球儀を相手にしなければならない一方、いずれにせよ座標変換をしなければならないので、そのままレンダリングできるウェブメルカトルではなく、極までカバーする global-geodetic 座標系を採用したことは合理的であろう。
タイル命名方法
OSGeo TMS に準拠しているので、TMS 方式の命名方法に従う。すなわち、y軸は南から北に上がるタイプであり、XYZ とは逆になる。いずれにせよ、そもそも座標系が global-geodetic であることから、XYZ と混ぜて使っても混乱は少ないと思う。
タイルコンテンツの形式
little endian のバイナリデータが gzip 圧縮されたものであるという。メッシュデータを格納するための座標の表現には、データ量を少なくするためにジグザグエンコーディングが使われているという。
ジグザグエンコーディングは、TopoJSON や MVT (mapbox/mapnik vector tile) でも使われていたと思う。
座標値は0〜32767に正規化されている(unsigned short)。これも MVT などで散見される手法である。絶対座標ではなくて、タイル内座標を使う。タイル名側にジオリファレンス情報が入っているので、絶対座標を使うことは非効率であるだけでなく、直交性を損なう。なので、タイル内座標を使うのは非常に合理的であると思う。
Content-Type としては application/vnd.quantized-mesh,application/octet-stream という。
関係するフォーマット
heightmap-1.0 というフォーマットもある。こちらはメッシュではなくてラスタ的なフォーマットであるように見える。
https://cesiumjs.org/data-and-assets/terrain/formats/heightmap-1.0.html