見出し画像

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地図にする手順を解説します。

地理院地図

地理院地図(電子国土Web)

地理院地図(屋久島)

地理院地図にアクセスして、検索ファームに「屋久島」と入力して確定します。屋久島を中心とした地図が表示されるので、左下のズームバーで縮尺を調整します。右上の「ツール」から「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:  # すべてのキューブを表示

屋久島の3D地図

解像度が低い(257x257)のですが、起伏はわかりやすく表現できます。高さ方法の縮尺を拡大すると、さらにわかりやすくなります。

次の画像は高さ方法を4倍にしてみました。

CSV_FILE = 'data/yakushima_3km.csv'
HEIGHT_SCALE = 12  # 高さスケールを4倍にする
屋久島の3D地図(高さ方向4倍)

上記の図を見ると、山の頂がどう繋がっているかがよく見て取れます。

次は、高さ方向の縮尺を元に戻して、アニメーションさせてみます。右の矢印キーでカメラを動かしてから、上下の矢印キーで陸地を動かします(実際は海キューブを逆に動かしている)。


屋久島の3D地図(アニメーション)

360度回転させると、島の形状がよくわかります。海に沈めたり浮かび上がらせたりして、遊ぶことができます。地図で遊ぶのは楽しいですね〜

今回の記事は、商業誌デビューのご報告と、3D日本地図アプリの使い方の紹介になりました。実際のプログラミングの部分は、「日経ソフトウエア2023年7月号」でご確認ください。よき地図ライフを!



前の記事
Pythonでマイクラを作る ㉑パーリンノイズで雲を実装する
次の記事
Python Panda3Dライブラリで太陽系シミュレーターを作成する|creativival (note.com)

その他のタイトルはこちら


この記事が気に入ったらサポートをしてみませんか?