時間が無い方向け4秒(起動込み)で読めるオチ…
こんなすごいオープンデータから、こんな3DをQGISでつくれます
はじめに
先日兵庫県さんから県全域範囲分かつ1m精度の高さデータ(DSM/DTM)が無償公開されました。つまり、オープンデータとしてどなたでもこのデータを使えます。
準備段階から中の方にいろいろお話を伺っていたこともあり、関係者のみなさま大変お疲れさまでした。
今回の偉業は日本におけるオープンデータ史の一項目に記されるでしょう🎊。
さて、すげえすげえ!といってそのまま屁をこいて寝るのも何なので、この記事ではQGISをちょこっと使って、神戸三ノ宮周辺の街を再現してみます。
高さデータ(DSM)の準備
まず三宮周辺のデータをダウンロードしてきます。
今回のデータは兵庫県全域を3000メッシュに分割しており、欲しい位置のメッシュIDがファイル名になります。
![](https://i.imgur.com/Q52Vj9H.png =300x) |
---|
各メッシュの図示はこちらにpdfがあります。
pdfを目で読み解くのもちょっとつらいという方向けに、GISデータはこちらに掲載されています。WGS84にしたGeoJSONはこちらに作っておきました。
ついで老婆心ながら、qgis2webプラグインを使ってインデックスファイルの索引webコンテンツ作っといたんで、地図からメッシュIDを検索したいかたはこちらをどうぞ(ちょっと読み込み遅いですがご勘弁を)
※qgis2webプラグインの使い方は手前味噌ながらこちらの後半に書いています。バージョンアップされててさらに使いやすくなってますが、基本的に同じです。
インデックスを参照すると三宮周辺は05OF892
というメッシュ番号になります。このメッシュのDSMデータをデータサイトからダウンロードしますが、メッシュIDは国土基本図郭5000単位数面で4メッシュごとにまとめられているので、ページ内では末尾の一桁を削った05OF89
を探してみます。たくさんファイルがあるので、ページ内のテキスト検索を行って対応リンクを探すことをおすすめします。
ダウンロードし、解凍すると当該地区周辺のテキスト入っています。
中身はそれぞれヘッダなしの300万行くらいのxyzデータで、こんな内容になっています
(1mメッシュ中心点なので、XYは0.5mとなっていますね)
78000.500 -145499.500 2.72
78001.500 -145499.500 2.23
78002.500 -145499.500 2.22
78003.500 -145499.500 2.40
78004.500 -145499.500 2.07
78005.500 -145499.500 2.24
78006.500 -145499.500 2.31
78007.500 -145499.500 35.60
※05OF892
だけを処理してもよいですし、ついでにまとめてやっつけてみたいという方は、例えばコマンドプロンプトで当該フォルダにcdで移動後
copy *.txt all.txt
とやるとマージされたテキストが生成されますので、このテキストデータから処理をしていっても良いかもしれませんね。
高さデータ(DSM)の変換
ここまでxyzのテキストデータができれば、ふだん使い慣れていらっしゃる3D系のツールやgdalやスリコギや高枝剪定バサミ等であれこれいじってひっぱたいていただいても構いませんし、アレな拙記事三次元点群データをQGISでひり出してみたを参照にしてくださってもよいです。なお投影法はEPSG:2447(JGD2000 / Japan Plane Rectangular CS V)ですので、お間違えなく!
※…さっき気づいたのですが、DSM(数値表層モデル)なので船もちゃんと計測されています(笑)とれたてデータならではですね。
建物形状データの準備
では、街並み3D化のための高さデータが揃いました。これをこのままqgis2threejsプラグインなどで一発で3D化だぜ!なんてやってみると…
…蔵王の樹氷にあらわれたイカール星人がうっかり5万ガロンのイカ墨をぶちまげたような絵面になってしまいちょっとあまりエレガントではないですね。
もう少しスッキリさせるためにやり方はいろいろあるのですが、今回はオープンデータ縛りということで、OpenStreetMapの建物矩形データにこのDSM(高さ)データを空間結合して表示してみます。
データを持ってくるやり方も様々ですが、とりあえずOpenStreetMapデータマイニングツールであるOverpass turboを使ってDLしてきます。
今回は三ノ宮エリアでbuilding = yes
のwayデータを引っ張ってきます。サンプルはこちらです。
サンプルコードを表示させたら、お好きなエリアに移動後、[実行]を押します。ちょっとサイズが大きいとツッコまれますが、[OK]を押して、[エクスポート]→GeoJSON形式でダウンロードしましょう。
ダウンロードしたデータをQGISで表示するとこのようになります。
このあと、GeoJSONのままだと次の処理が上手く回らないことがあるので、SHPファイルに変換して任意の場所に保存して下さい。
建物データに高さをもたせる
OpenStreetMapのデータにも一部ビルなどの高さが入っていたりするのですが、今回はQGISのゾーン統計ツールを使って、建物矩形内のDSMデータの統計計算を行わせて高さのデータをもたせます。
「厳密な建物の高さ」を希求していくとキリがないのですが、今回はそのラスタ内での中央値を「建物高さ」とします。
※ビルの屋上に500mの脱出用ロケットが設置してある場合とかもあるので建物矩形内の「最大値」などはアレですし、気になる方はいろいろ試行錯誤してください(雑)
QGISのプロセッシングツールボックスの検索窓に zonal
などを入力すると、[ゾーン統計量ツール]がヒットしますので、こちらを起動します
ラスタレイヤ…今回作成したDSM
分析ゾーンのベクタレイヤ…建物矩形SHPデータ
計算する統計量…「中央値」のほかにいろいろいじりたい方は平均とか最大値を選択しておいてもよいかもしれません
これで実行してみると、建物矩形データの属性右端にmean,median,maxなどの項目が計算結果として追加されます。
これで建物矩形にDSMデータ取り込まれました。
Qgis2threejsで3次元化
ではこのデータをもとに、QGIS上での3次元化をさっくり作成してくれるQgis2threejsプラグインで表示してみましょう(プラグインの導入方法などはQGIS+プラグインインストールなどでググってください)
詳細な使い方はこちらにいろいろと掲載されていますが、とりあえず、さきほどの建物矩形と地理院さんの空中写真等をQGISのマップキャンバスに表示させた後、Qgis2threejsを起動して、ビューウインドウでの建物レイヤのプロパティを下記のようにします。
Obeject type…Extruded(ポリゴン押し出し型)
Style-Height…_median(今回ゾーン統計で算出した[高さ中央値のフィールド]、[max]とかでもOK)
そうすると…にょきにょきと建物が立ち上がります、おめでとうごさいます。
(マップキャンバスの範囲が広いとパソコンが火を吹きそうになるので、まずは小さな範囲で試してみることをおすすめします)
実際に触ってみたい方に
こちらにデモおいてます、ぐりぐり動かしましょう。
まとめ
今回は建物のみでしたが、高架道路/鉄道はラインのデータをちょっと工夫すればできるかもしれません(傾斜とかどうするんだろう…)なんかいい方法が見つかったら教えて下さい。
また、市街地だけでなく、例えば山奥の街と防災リスク(土砂災害や浸水エリア)のレイヤを重ねたりして、よりわかりやすいビジュアルにも使えるかなあ、などと考えていました。
これだけ精密なデータですと、防災分野だけでなく、窪地や水流の計算も高精度になり、農林業への貢献もすごくあると思います。
あと、今回使ったQgis2threejsからは、3Dプリンタに出力するためのglTFファイルに書き出すことも可能です。そのため、ちょっとした博物館などでの展示にも精密な地形や街の模型が作成できます。
参考 : 3Dプリンタで地形模型の作成(東京大学GIS実習オープン教材)
税金をもとに官民両方の様々なかたのご苦労によってしっかりしたデータを作っていただいたのですから、多くの活用が増え、地域社会にさらに大きな形で還元されるとよいですね。
重ね重ねになりますが、関係者の皆様、今回の作業大変お疲れさまでした。
ここまで読んでくださったすてきなジオギークはどんどんこれらのデータを使い倒して、いい成果ができたらぜひ兵庫県企画県民部科学情報局情報企画課高度情報化班さんまでお知らせするとよいかもしれません。
もちろんこんなアクションは決して義務でも法律でもないのですが、OpenData Ecosystemの観点からオープンデータによって創られた「よいこと」を蓄積・共有・循環させていくことで、「やっぱりオープンにしたほうが良いよね!」と、さらにすんごいオープンデータが様々な地域から出てくるきっかけにもなりますしね😘
この記事のライセンス
この記事はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際 ライセンス)の元で公開します、どうぞどうぞ。