Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[FOSS4G 2023 Japan@FUKUI] 他天体におけるCesium の活用 ― C...

[FOSS4G 2023 Japan@FUKUI] 他天体におけるCesium の活用 ― Cesium を使って小惑星に行こう ―

★このスライドは、FOSS4G 2023 Japan@FUKUI の発表資料です★

世間一般のGISソフトはOSS、プロプライエタリも含め地球上を対象としていることが多いです。
Cesium も基本的には地球上での使用を想定していますが、実は他天体で使用することも考慮されている設計になっています。
今回は Cesium における他天体(リュウグウ)での活用事例についてご紹介いたします。 しかしながら、 Cesium における他天体での活用事例が少ないためか、問題が発生した時の情報収集が難しく、手探りで解決策を模索しましたので、その辺のTIPSをお話いたします。

発表者: 和山 亮介(株式会社ノーザンシステムサービス 研究開発部)
キーワード: Cesium、他天体、はやぶさ2、小惑星リュウグウ、JADE(JAXA Asteroid Data Explorer)

More Decks by ノーザンシステムサービス | Northern System Services

Other Decks in Technology

Transcript

  1. 目次 2 • 自己紹介 • JADEってなあに • 試行錯誤の軌跡 • 改修1:

    画像の撮影範囲(フットプリント)を Cesium で表示する • 改修2: 地名(POI)が正しく表示されるようにする • 改修3:撮影画像を天体表面に貼り付け表示可能にする • まとめ
  2. • JAXAが打上げた小惑星探査機 • 小惑星リュウグウを探査後、地球に帰還 (サンプルリターン) • 試料から水の成分・アミノ酸を発見 (2022) [1] するなど、さまざまな研究成果が発表

    • 現在は拡張ミッションで別の小惑星に向けて飛行中 4 小惑星探査機「はやぶさ2」 今回は、その「はやぶさ2」と GIS に関するトピックをご紹介します 画像: © JAXA/ISAS [1] Eizo Nakamura et al., On the origin and evolution of the asteroid Ryugu: A comprehensive geochemical perspective, Proceedings of the Japan Academy, Series B, 2022, 98, 6, pp. 227-282, Released on J-STAGE June 10, 2022, Online ISSN 1349-2896, Print ISSN 0386- 2208, https://doi.org/10.2183/pjab.98.015, https://www.jstage.jst.go.jp/article/pjab/98/6/98_PJA9806B-01/_article/-char/en 研究成果はメディアでも注目 (出典: NHK)
  3. JADEってなあに JADE (JAXA Asteroid Data Explorer) [1] 6 • 探査機「はやぶさ2」が取得した

    小惑星リュウグウの データを表示・検索するシステム • Cesium ベースなので 2D/3D 表示ができる • 元データ(ONC画像)は オープンデータ [2] (政府標準利用規約 第2.0版) リュウグウをぐりぐり回せる3Dビュー 説明しよう! © ISAS/JAXA [1] Kikuchi H. et al. (2023) LPSC, Abstract #2001. (https://www.hou.usra.edu/meetings/lpsc2023/pdf/2001.pdf) [2] https://www.darts.isas.jaxa.jp/planet/project/hayabusa2/list.html
  4. 10 実際の 撮影範囲 検索領域 この検索領域 でもヒットする 改修項目1: フットプリントの表示 改修前 •

    撮影範囲(フットプリント)のポリゴンデータはあるが、一部のポリゴンが壊れている • この結果、フットプリントの表示・範囲検索が正しく動作しない 撮影範囲にかかわらず、範囲検索がヒットしてしまう 大きな岩の付近で、 ポリゴンの辺が自己交差している (部分拡大) 岩
  5. したいこと • 経度0度をまたぐ部分・飛び地も含めて、表示し、正しく範囲検索可能にする 経度チャネル 緯度チャネル FITSデータ(多チャネル画像) WKT ポリゴン 改修項目1: フットプリントの表示

    元画像チャネル (グレースケール) ※ GeoTIFFなどの一般的なデータと異なり、 各画素に経度・緯度が付与されている DB (PostGIS) 11
  6. 最初のアイディア 画素を2D平面にプロットして、ポリゴン化すればいいんじゃない? 改修項目1: フットプリントの表示 問題点 1. 図法の性質上、極付近では点群が疎になり、ポリゴンが形成されない 2. 図法の性質上、地図の両端(経度0度[1])でポリゴンが分割される 3.

    遠距離から撮影した画像では、点群が疎になり、ポリゴンが形成されない このあたりの点群が薄いので ポリゴンができない 両端でポリゴンが分割される [1] リュウグウの経度軸は0度~360度をとり、東経・西経をもつ地球(-180~180度)とは異なる。 点群密度が 画像によって 異なる 13
  7. 利用した OSSライブラリ 第2のアイディア モルワイデ図法なら、極付近でも点群が疎になりにくいのでは? →点群をモルワイデ図法に再投影して、ポリゴンを生成してから、 投影法を戻す 改修項目1: フットプリントの表示 正距円筒図法 モルワイデ図法

    ポリゴン 生成 正距円筒図法に 再投影して WKTへ変換 ※ 点群の重心を再投影後の中心にする ※ ランベルト正積方位図法も試したが、 正距円筒図法への再投影時にポリゴンが どうしても壊れるので却下 ※ アルファシェイプの パラメータ(α)は 点群密度に応じて 動的に変更 FITS データ AstroPy [1] NumPy [2] PyProj [6] Cartopy [3] AlphaShape [4] Shapely [5] ゴ [1] AstroPy (https://www.astropy.org/) [2] NumPy (https://numpy.org/) [3] Cartopy (https://github.com/SciTools/cartopy) [4] AlphaShape (https://github.com/bellockk/alphashape) [5] Shapely (https://github.com/shapely/shapely) [6] PyProj (https://github.com/pyproj4/pyproj) 14
  8. 改修項目1: フットプリントの表示 第2のアイディア 点群をモルワイデ図法に再投影して、ポリゴンを生成してから、 投影法を戻す (モルワイデ図法なら、極付近でも点群が疎になりにくいはず…) 正距円筒図法に投影 モルワイデ図法に 再投影 正距円筒図法に戻すと…

    いい感じのポリゴンができた! ポリゴン生成 こ れ で 完 成 じ ゃ な い ぞ よ も う ち っ と だ け 続 く ん じ ゃ その他の工夫 • 正距円筒図法に戻したとき、経度0度をまたぐ辺が壊れる → Proj の +over オプションを使って再投影し、Shapely の make_valid() 関数でポリゴンを修復 地図からはみ出したポリゴンは、Shapely で整形 • 経度0度で分割線が生じる → ポリゴンを LINESTRING に変換し、後処理で除去 15
  9. 改修項目1: フットプリントの表示 だが、さらなる問題が… ① Cesium でポリゴンが正常に表示されない • 楕円体設定が地球以外のときだけ、ポリゴン表示が崩れる • 複雑で大きいポリゴンのみ起こる

    (POIはなぜか問題なし[後述]) • 輪郭線(LINESTRING)だけなら表示できるので、 輪郭線だけの表示に変更 ② 輪郭線が地面に埋もれる • 楕円体設定が地球以外のときに、線を地面に這わせると (Cesium の clampToGround)、地面に埋もれる • clampToGround を解除して、 輪郭線の各頂点に高さ情報(Z座標)を与えることで解決 地球以外の楕円体では ポリゴンが崩壊 輪郭線表示は OKなんだけどね… 残念ながら、この方法も完璧ではありません。 各頂点に高さ情報を付与すると、地面に隠れるはずの 輪郭線が表示される場合があります。うーむ… 地面に這わせる設定 埋もれる 頂点に高さ情報を与えると きれいに輪郭線が出ます ここは地平線の陰に なるはずなのに 透視できる 埋もれている 見えるように なった 16 他天体では崩壊 地球だとOKなのだが…
  10. 改修項目1: フットプリントの表示 経度0/360度には 線が表示されない 外周線のみ表示 フットプリント表示 (3D) 線が地形に 埋もれない 領域検索(2D)

    撮影範囲内のみ 検索結果にヒットする いくつもの試行錯誤と工夫を経て… フットプリントが正しく表示・検索できるようになった 17
  11. 改修項目2: 画像貼り付け機能 • リュウグウの撮影画像を地図上に表示する • Cesiumの画像レイヤーで表示するため、天体を撮影した画像を 円筒図法で展開された画像に変換 • 撮影画像の各画素に緯度経度情報が保持されていることから、 緯度、経度、画素値の点群データを作成

    • 点群データをグラフ描画ライブラリmatplotlib[1]で展開図にプロット 経度 緯度 撮影画像(位置情報を含む多次元データ) X Y Z 111.920 78.928 0.001 113.036 79.115 0.001 113.695 79.333 0.001 114.014 79.577 0.001 114.222 79.830 0.001 … 点群データ (X:経度 Y:緯度 Z:画素値) matplotlibで プロット 生成画像 [1] Python向けのグラフ描画ライブラリ https://matplotlib.org/ 19
  12. 改修項目2: 画像貼り付け機能 撮影距離が遠い撮影画像 点群が疎な展開画像 解像度を調整して生成した展開画像 22 • 解決法①:解像度を下げる • 撮影画像の写っている天体の大きさに基づいて生成画像の解像度を調整することで、

    撮影距離が遠いものについては解像度を下げる • デメリット: • 解像度が小さいためプロットされる点の円が目立ってしまう • 被写体の天体の大きさに基づいて解像度を調整するため、 撮影距離が遠いもののみについての対応 (極付近の点群が疎になる画像は解像度が高くなりこの手法では対応できない)
  13. 改修項目2: 画像貼り付け機能 • 解決法①:解像度を下げる • 撮影画像の写っている天体の大きさに基づいて生成画像の解像度を調整することで、 撮影距離が遠いものについては解像度を下げる • デメリット: •

    解像度が小さいためプロットされる点の円が目立ってしまう • 被写体の天体の大きさに基づいて解像度を調整するため、 撮影距離が遠いもののみについての対応 (極付近の点群が疎になる画像は解像度が高くなりこの手法では対応できない) 極付近が含まれる撮影画像 極付近の点群が疎な展開画像 解像度を調整して生成した展開画像 画像内で 疎密が異なると 対応できない 23
  14. 改修項目2: 画像貼り付け機能 • 解決法②:点群を補間する • 地図作成ツールGMT[1]のnearneighborで点群を補間してGridデータ化 • 補間時のパラメータは簡易的に点群密度を計算して動的に調整 • この手法であれば遠距離から撮影した画像も極付近の画像も対応可能

    • デメリット: • あまりにも点間の距離が空いていると補間できない • 補間により表示される領域が一回り大きくなるため、撮影領域の線と重ねるとはみ出す場合がある • 今回はこちらの手法を採用 撮影距離が遠い撮影画像 点群が疎な展開画像 点群を補間して生成した展開画像 [1] the Generic Mapping Tools 本来は地図を描画するツールだが、Gridデータを操作する機能が充実しているため、データの変換や生成に使うこともある https://www.generic-mapping-tools.org/ 24
  15. 改修項目2: 画像貼り付け機能 • 解決法②:点群を補間する • 地図作成ツールGMT[1]のnearneighborで点群を補間してGridデータ化 • 補間時のパラメータは簡易的に点群密度を計算して動的に調整 • この手法であれば遠距離から撮影した画像も極付近の画像も対応可能

    • デメリット: • あまりにも点間の距離が空いていると補間できない • 補間により表示される領域が一回り大きくなるため、撮影領域の線と重ねるとはみ出す場合がある • 今回はこちらの手法を採用 [1] the Generic Mapping Tools 本来は地図を描画するツールだが、Gridデータを操作する機能が充実しているため、データの変換や生成に使うこともある https://www.generic-mapping-tools.org/ 極付近の点群が疎な展開画像 点群を補間して生成した展開画像 極付近が含まれる撮影画像 25
  16. 改修項目2: 画像貼り付け機能 • 生成した画像をCesiumの SingleTileImageryProvider[1]で地図上に表示 • DBに保存されている撮影領域の座標値から表示範囲を取得 撮影画像 2D地図上に画像表示 3D地図上に画像表示

    [1] 表示範囲を指定して1枚の画像を地図上に表示するCesiumの機能 https://cesium.com/learn/cesiumjs/ref-doc/SingleTileImageryProvider.html 画像を天体表面に貼り付けて表示できるようになった🎉🥳 26
  17. したいこと 地名やクレーターなどを表すラベルやポリゴン等が地形に埋まっている → 地形に沿うような表示に調整したい 改修項目3: 地名の位置ずれ修正 そ ん な ふ

    う に 考 え て い た 時 期 が 私 に も あ り ま し た 実 装 は 秒 殺 …… ! 地 形 に 沿 わ せ る 機 能 は セ シ ウ ム に あ る ……… クレーターを示すポリゴン が地形に埋まってしまって いる [1] 「このネタ、過去のFOSS4Gで見たことあるな…」とお気づきの方は、素晴らしい記憶力をお持ちです。当社は、9年前の FOSS4G 2014 Tokyo でも同じ刃牙ネタを使っていました [1] 28
  18. 消えたポリゴンを探してみると、 とんでもなく遠いところに表示 されてる この辺に リュウグウ 改修項目3: 地名の位置ずれ修正 • 原因としては、 ポリゴンが元のWGS84の設定、つまり

    地球の楕円体上に表示される 設定になっていることが考えられる • しかし楕円体の設定は リュウグウの値で設定されていることを 確認済み クレーターの ポリゴン 30
  19. • 調査したところ、楕円体の設定をWGS84以外に設定しても 内部の計算をWGS84で行っている部分があるらしい • CesiumのWGS84の値をリュウグウの楕円体に書き換えて対応 クレーターを 地形に沿って 表示できるようになった! 改修項目3: 地名の位置ずれ修正

    31 もう 1 つのオプションは、Cesium.Ellipsoid.WGS84 の定 義を変更して、Callipso と一致するようにすることです。 そうすれば、すべてが正常に機能します。 that way everything will just work. Cesiumの開発者も言及
  20. 難題を乗り越えて JADEは無事に公開されました! https://jade.darts.isas.jaxa.jp/ JADEへのアクセスはこちらから または 「JAXA JADE」で検索 FOSS4Gライブラリの 管理者・開発者様に感謝!🙏🙇 他天体ならではの

    知見が得られました JAXA様にも感謝! 33 大学や研究機関の研究者からは 高頻度にアクセスしていただき 高い評価を得ています 使いやすくなった 他天体でも 作ってほしい
  21. 1. Cesium で他天体を表示することはできる 2. ただしCesiumの一部機能は壊れる(Issue にもない!) 3. 点群からのポリゴン生成・画像補完時は、疎な点群と極付近に気を付ける 4. ハードコードされた地球を前提とする定数に注意!

    他天体を含めた2D/3D地図を使ったWebアプリ開発は、 ノーザンシステムサービスにご用命ください! 最後に…教訓 改修内容の発表について、JAXA様にご快諾いただきました。 感謝申し上げます! 34