宇宙の小箱

宇宙 xR への扉

このページでは,xRや様々なCG制作等のコンテンツに宇宙関連データを活用していただくための,各種情報を取り揃えて参ります.

お品書き

ここに掲載された各コンテンツの利用条件は,編集当時の情報に基づいて参考情報として添えられたものであり,最新の状況を反映しているとは限りません. このページの説明文の如何に関わらず,各コンテンツ提供元の規約に則ってご利用ください. それらの規約は,サイト全体に共通する規約であることもあれば,個々の素材毎に設定されている場合もあります. 詳細が不明の場合は,各コンテンツ提供元で用意された窓口へ個別にお問い合わせください.

「かぐや」地形データのトリセツ(CG制作用)

ここではCG制作を想定して,PythonやUnityでの簡易的な取り込み方法を解説しています.

学術目的でご利用の場合や,専門的な知識を必要とされる場合等は,DARTS/KAGUYA(SELENE)月周回衛星「かぐや(SELENE)」サイトをご参照ください.

アクセス先
かぐや(SELENE)データアーカイブ
検索方法
  1. データセット名(部分一致→ドロップダウンリストから選択)を選択
  2. 緯度・経度の範囲を入力
  3. 「検索実行」ボタンを押す
例: アポロ11号の場合: 北緯0.67416度 東経23.47314度
検索方法(地図から選択する場合の操作)
  1. 「地図選択」ボタンを押す
  2. 手形ボタンで地図を移動
  3. 範囲選択ボタンで範囲を選択
  4. 「選択範囲決定」ボタンを押す
※拡大表示して地図が消えた時は,地図の右上「+」を押して,Base Layerとして「LROC-WAC」にチェックを入れると,詳細な地図が表示されます.

地形データの例

地形データは,PDS3形式で提供されています.
(1) データセット名: SELENE MOON TC 5 SLDEM2013 V1.0 (SLDEM2013)
https://darts.isas.jaxa.jp/pub/pds3/sln-l-tc-5-sldem2013-v1.0/
例: アポロ11号着陸地点 (DTM_MAP_01_N01E023N00E024SC)
サンプル画像 (オリジナル画像@DARTS)
データファイル
ラベルファイル
(2) データセット名: SELENE MOON TC 5 DTM MAP SEAMLESS V2.0
https://darts.isas.jaxa.jp/pub/pds3/sln-l-tc-5-dtm-map-seamless-v2.0/
例: アポロ11号着陸地点 (DTM_MAPs02_N03E021N00E024SC)
サンプル画像 (オリジナル画像@DARTS)
データファイル
ラベルファイル

地形データの取り扱い方法

PDS3に準拠した地形データ(ラベルファイルとデータファイルが揃っているもの)であれば,同じように処理できると考えられます.ここでは「かぐや」のデータを例にしてご紹介します.

ラベルファイル(.lbl)の解釈

主なラベル情報の例
ラベル情報説明解釈
SAMPLE_TYPE = MSB_INTEGER画素タイプBig endian 符号付き整数
SAMPLE_BITS = 161画素のビット長16 bits (2 octets)
BANDS = 1バンド数1
LINES = 4096縦方向の画素数4096
LINE_SAMPLES = 4096横方向の画素数4096
OFFSET = 0.000000オフセット0 (オフセット無し)
SCALING_FACTOR = 1.000000倍率1 (拡大・縮小無し)
UNIT = "METER"単位メートル
参考解説: How can the terrain data from KAGUYA be read into a program?

DTM_MAP_01_N01E023N00E024SC.img を読み込むためのサンプルコードと実行結果

Python サンプルコード
import numpy as np
import matplotlib.pyplot as plt


# lblファイルの下記の記述を参照
#   SAMPLE_TYPE = MSB_INTEGER  ... Big endian符号付き整数
#   SAMPLE_BITS = 16           ... 1画素あたり16bits
data = np.fromfile('DTM_MAP_01_N01E023N00E024SC.img', dtype='>i2')

# lblファイルの以下の記述より配列の形を変更
#   BANDS = 1
#   LINES = 4096
#   LINE_SAMPLES = 4096
BANDS = 1
LINES = 4096
LINE_SAMPLES = 4096
image = data.reshape(BANDS, LINE_SAMPLES, LINES)

# lblファイルの以下の記述より、データ加工なしにそのまま使う
#   OFFSET = 0.000000
#   SCALING_FACTOR = 1.000000

# データを表示(最初のバンドを表示)
plt.imshow(image[0], cmap='gray')
plt.show()
実行結果
Unity: MoonVRAssetで取り込んだ形状モデルのレンダリング例

DTM_MAPs02_N03E021N00E024SC.img を読み込むためのサンプルコードと実行結果

Python サンプルコード
import numpy as np
import matplotlib.pyplot as plt


# lblファイルの下記の記述を参照
#   SAMPLE_TYPE = MSB_INTEGER  ... Big endian符号付き整数
#   SAMPLE_BITS = 16           ... 1画素あたり16bits
data = np.fromfile('DTM_MAPs02_N03E021N00E024SC.img', dtype='>i2')

# lblファイルの以下の記述より配列の形を変更
#   BANDS = 1
#   LINES = 10800
#   LINE_SAMPLES = 10800
BANDS = 1
LINES = 10800
LINE_SAMPLES = 10800
image = data.reshape(BANDS, LINE_SAMPLES, LINES)

# lblファイルの以下の記述より、データ加工なしにそのまま使う
#   OFFSET = 0.000000
#   SCALING_FACTOR = 1.000000

# 濃淡がはっきりしないため平均値周辺を使って濃淡を出す
AVERAGE = -1882.145583
delta = np.abs(AVERAGE) * 0.5
# データを表示(最初のバンドを表示)
plt.imshow(image[0], cmap='gray', vmin=AVERAGE-delta, vmax=AVERAGE+delta)
plt.show()
実行結果
Unity: MoonVRAssetで取り込んだ形状モデルのレンダリング例

お品書き

ここに掲載された各コンテンツの利用条件は,編集当時の情報に基づいて参考情報として添えられたものであり,最新の状況を反映しているとは限りません. このページの説明文の如何に関わらず,各コンテンツ提供元の規約に則ってご利用ください. それらの規約は,サイト全体に共通する規約であることもあれば,個々の素材毎に設定されている場合もあります. 詳細が不明の場合は,各コンテンツ提供元で用意された窓口へ個別にお問い合わせください.

関連サイト