Python Panda3Dライブラリで3D地図を作成する
商業誌デビューの経緯
以前、Processing (Python Mode)で3D日本地図を作成する記事を書きました。
この記事が日経ソフトウエアの編集長さんの目にとまり、特集記事として執筆する機会を与えていただきました。初めての商業誌への執筆です❤️
↓↓↓ 栄えある25周年記念号の第5特集に載せていただきました。↓↓↓
Panda3Dライブラリへの乗り換え
雑誌記事としてリライトするときに、Processing (Python Mode)が、問題になりました。Pythonのバージョンが2.7で止まっているからです。編集長さんからの提案もあり、PythonのPanda3Dライブラリを使うことになりました。
Panda3Dライブラリは、Pythonで3Dゲームやアプリケーションを作成するためのオープンソースのフレームワークです。ゲーム用途に開発されているので、アニメーション機能が充実しています。Python3に対応しており、今でも活発に開発が続いています。
Panda3Dに乗り換えて、私的な感想ですが、Processing (Python Mode)の方が日本語情報もたくさんあり、初心者向きかと思います。Panda3Dの方は初めは大変かもしれませんが、Python3に対応している点が大きいです。Pythonのライブラリと自由に組み合わせた、より高度な創作が可能です。Processingを使っている方も触って欲しいと思っています。
日本各地の3D地図を作ってみよう(屋久島編)
雑誌に掲載した「3D日本地図アプリ」は、地理院地図から日本各地の標高データをダウンロードして、3D地図にすることができます。2023年5月27日のブラタモリで「屋久島」が紹介されていたので、屋久島を3D地図にする手順を解説します。
地理院地図
地理院地図にアクセスして、検索ファームに「屋久島」と入力して確定します。屋久島を中心とした地図が表示されるので、左下のズームバーで縮尺を調整します。右上の「ツール」から「3D」→「小」と進みます。
次に、標高ファイルをダウンロードします。
WebGL用ファイルの「ダウンロード」をクリックすると、モーダルウインドウが開くので、標高ファイルを「ダウンロード」します。以上で、「ダウンロード」ファルダーに「dem.csv」が保存されました。このファイルを「yakushima_3km.csv」とリネームしておきます。このCSVファイルを中身を確認します。
地図データの中身
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,…
標高データをテキストエディタで覗いてみましょう。一行の巨大なデータが読み取れました。地図データの正体は、66049個の数字の並びでした。257の2乗は66049ですから、サイズ257x257の地図を作成できることがわかります。先頭に「0」が並んでいるのは、地図の左上の部分が海になっているので、標高0という意味です。陸地の部分だけ正の数字(小数)で表されることになります。このデータを3D日本地図アプリで3D化します。
3D日本地図(屋久島)
yakushima_3k.csvをdataフォルダーに移動してから、japan_map_kansei.pyを以下のように修正し、実行します。
CSV_FILE = 'data/yakushima_3km.csv' # 屋久島の標高データを読み込む
HEIGHT_SCALE = 3 # 高さスケールを3にする
...
class MakeMap(ShowBase):
def __init__(self, title):
....
# if i * 0.65 + j > 140: # 日本(離島を除く)のみを表示
if True: # すべてのキューブを表示
解像度が低い(257x257)のですが、起伏はわかりやすく表現できます。高さ方法の縮尺を拡大すると、さらにわかりやすくなります。
次の画像は高さ方法を4倍にしてみました。
CSV_FILE = 'data/yakushima_3km.csv'
HEIGHT_SCALE = 12 # 高さスケールを4倍にする
上記の図を見ると、山の頂がどう繋がっているかがよく見て取れます。
次は、高さ方向の縮尺を元に戻して、アニメーションさせてみます。右の矢印キーでカメラを動かしてから、上下の矢印キーで陸地を動かします(実際は海キューブを逆に動かしている)。
360度回転させると、島の形状がよくわかります。海に沈めたり浮かび上がらせたりして、遊ぶことができます。地図で遊ぶのは楽しいですね〜
今回の記事は、商業誌デビューのご報告と、3D日本地図アプリの使い方の紹介になりました。実際のプログラミングの部分は、「日経ソフトウエア2023年7月号」でご確認ください。よき地図ライフを!
前の記事
Pythonでマイクラを作る ㉑パーリンノイズで雲を実装する
次の記事
Python Panda3Dライブラリで太陽系シミュレーターを作成する|creativival (note.com)
その他のタイトルはこちら
この記事が気に入ったらサポートをしてみませんか?