見出し画像

地理院地図のタイルを流用して3DCGを作る

はじめに

 初級者が、3DCGプログラミングに挑戦する記事の第二回です。前回は、3DCGと立体視のライブラリの紹介でした。今回は、タイル地図に関連するライブラリの紹介です。

開発環境

 C言語+OpenGLです。pngとttfの処理のためにSDL2を使用しています。その他ファイルの解析器は、自前で用意しました。pbfは楽しかったですが、mvtとGeoJsonは苦痛でした。

タイル地図

 魅力的な記事を書くためには、魅力的な3Dモデルが不可欠です。しかし、自ら用意するには能力が不足しています。
 そこで、国土地理院の地理院タイルを利用することにしました。地理院タイルは、出典表示だけで利用可能なので使い勝手がいいです。ありがとう国土地理院!
 表示できるタイルの種類は、ラスタータイルと、ベクタータイルです。

ラスタータイル

 ビットマップ形式のタイルです。

地理院タイル

標準地図、淡色地図、土地条件図、写真

 技術的には画像なら何でも表示できます。しかし、地図は著作物なので権原の制限を受けます。

数値タイル

 pngファイルに数値が格納されたタイルです。無効値が中央に設定されているためクランプができないスバラシイ形式です。

標高タイル
 数値として標高が格納されています。サンプリング間隔は、5mメッシュと10mメッシュに対応しています。5mメッシュのタイルがない部分は、10mメッシュのタイルで補完しています(タイル境界の不整合を解消するために補間が必要なのですが未実装です)。

盛り上がる富士山

 数値を基にして色を付けることもできます。

標高による色付け(みんな大好き"Matlab Jet"も)

ベクタータイル

 点(地名等)、線(道路等)、および多角形(建物等)の位置情報等が格納されたタイルです。PostScriptを簡略化したような形式と言えば分かり易いでしょうか。

地理院ベクトルタイル

 mvtから情報を取り出して表示します。mvtは、タイルから線がはみ出しているスバラシイ形式です。

多角形(建物と水面)、赤線(道路)、青線(鉄道)および文字(地名)

 建物を領域として認識しているので、色だけでなく高さ等も変更することができます。

蒲郡に訪れる都市化の波

 

GeoJsonタイル

 GeoJsonから情報を取り出して表示します。GeoJsonは、文字列と数字の別をつけられないスバラシイ形式です。

地形分類図ベクトルタイル
 
地理院より提供されているGeoJson形式のベクタータイルです。

匂坂(天竜川左岸の地形分類)

地理情報以外のタイル

 地理院タイルと同じタイル座標系のタイルも表示できます。

気象レーダー

三浦半島から関東平野を望む(ポアソンディスクサンプリングによる点表示)

 気象庁の利用規約によれば、気象レーダーの情報は、必ずスバラシイWebサイト経由で取得しなければなりません。それに従い十分毎に人力で取得したので欠損が多々ありチカチカしてます。

その他のデータ

 緯度と経度が分かっていればデータを載せることができます。

まとめ

 今回は、タイル地図のライブラリについて説明しました。苦労したのは座標の取扱いです。特に、段階的詳細度を実装したので複雑になってしまいました。

発展の方向性

プラトー
 3DCGプログラミングを続ける上で、一番欲しい情報は、都市部のDSM(建物の高さ)です。
 プラトーから生成できそうなのですが、それにはXMLの解析器を書かなければなりません。しかし、解析器は好きな分野なので、3DCGに戻れなくなりそうです。
 DSMタイルの提供が兵庫県以外でも始まることを祈るしかありません。

地域メッシュ
 所謂GISのまねごとをするには、各種の統計情報が必要になります。これらの統計情報は、一般的に、地域メッシュで提供されますが、地域メッシュは地理院タイルと互換性がありません
 そこで、地域メッシュへの対応をそのうち検討したいと思います。

電子国土基本図
 地理院ベクトルタイルは、地物に識別子が付されていない、隣接タイルで線が繋がらないなど使い難い点が多いです。例えば、国道16号のみを表示、或いは多摩川水系のみを表示と言ったことが非常に難しいです。
 なので、利用規約が許せば、電子国土基本図に切替えたいと思います。


 次回は、シミュレーション関連のライブラリについて説明する予定です。私と私のPCの能力では、シミュレーションは難易度が高いので、ほとんど何もできていません。

地理院タイルを加工して作成

古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。