見出し画像

【実習編】~兵庫県オープンデータ「DSM」をQGISで描画しよう~

I. はじめに

今回も引き続き、兵庫県が2020年1月に公開した「全県土分の高精度3次元データ」を扱っていきます。

前回のnoteではCS立体図のデータを使用しました。CS立体図は最初から位置情報を持ったラスタ形式(geotiff)であったため、QGISで読み込めばすぐに描画できる扱いやすいデータでした。また、CS立体図のダウンロードファイルの中にはラスタ形式のDEMも一緒に入っているため、DEMもそのままQGISで利用することができました(※1)。

さて、今回のnoteで扱うのはDSMです。DSMとは数値表層モデル(Degital Surface Model)のことで、地表面の高さを表したデータです。標高データのDEMに対し、DSMは建物や樹木といった地物の高さを含んでいる点で異なります。

※1 DEMには投影情報が無かったため、「投影法の定義」をしなければなりませんでしたが。


II. データの入手

前回同様、下記のリンクから兵庫県の数値地形データダウンロードページにアクセスしましょう。そして、2番目のリンクからDSMのデータ提供ページに移動します。

画像1

DSMも兵庫県内を分割して提供されています。IndexmapからIDの割り振りを確認し、ダウンロードしたい地域のメッシュIDを確認しましょう。ここでは、平地の方が地面の高さと建物の高さのコントラストが分かりやすいので、メッシュID「05OF89」を選択しました。これは神戸市中央区の南京町やポートタワーがあるあたりです。

ダウンロードしたZIPファイルを展開すると、場所によりますが80MB程度のテキストファイルが4つ入っています。中を見ると、次のような3列で構成された数字の羅列が300万行にわたって記述されています(※2)。

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

1列目はY座標(経度)、2列目はX座標(緯度)、3列目は高度となっています(※3)。各列はスペースによって区切られています。このようなXY座標と高度(Z値)からなるテキストファイルのことを「xyzファイル」と呼ぶこともあります(※4)。また、この座標値は平面直角座標系の第V系に基づいて算出された値となっています。

※2 Excel(2007~)が読み込むことができる行数の最大は約104万行なので、Excelでは処理できないデータですね。
※3 平面直角座標系では座標の値を緯度・経度とは呼ばず、原点からのX座標、Y座標で表します。更に、ややこしいことに、X軸は南北方向(縦)、Y軸は東西方向(横)であり、数学でお馴染みのX軸、Y軸とは逆になっていることに注意しなければなりません。
※4 xyzファイルを、拡張子を「.xyz」として保存する人もいます。「.xyz」は、普通はアプリケーションと関連付けされていないのでダブルクリック等で開くことができませんが、中身はテキストなのでメモ帳などにドラッグ&ドロップすれば開きます。一部のGISソフトやCAD系のソフトウェアでは、「.xyz」を3次元座標の点群データフォーマットとしてサポートしています。


III. DSMデータをQGISで開く

それではまず、ダウンロードしたテキストファイルを読み込んでみましょう。QGISを開き、メニューバーの「レイヤ」から「レイヤの追加」→「CSVテキストレイヤの追加」を選択します(※5)。新しく開いたウィンドウで、読み込みファイルに、先ほどダウンロードしたテキストファイルの1つを指定します。そして、下記のように設定したら、[ 追加 ] をクリックします。

--  設定  --
・エンコーディング・・・SJIS
・ファイル形式・・・カスタム区切り→空白
・レコードとフィールドのオプション・・・
  「最初の行はフィールド名」のチェックを外す
・ジオメトリ定義・・・
  Xフィールドにfield_1、Xフィールドにfield_2、ジオメトリのCRSに「EPSG:2447」を指定(※6)
※5 「CSVテキストレイヤの追加」とありますが、「.txt」ファイルも読み込むことができます。区切り文字さえ正しく指定すれば問題ありません。
※6 データ提供ウェブサイトに「測地成果2000 平面直角座標系第V系」と書かれており、これに該当するEPSGコードが2447です。最新の測地系は2011年の東北地方太平洋沖地震によるズレを補正した「測地成果2011」で、それに準拠した平面直角座標系第V系は「EPSG:6673」になりますが、このデータは以前の測地系に準拠して作成されているようです。

画像2

テキストファイルをQGISに追加すると、真っ黒の長方形がキャンバスに表示されます。拡大すると、これらがポイントデータであることが確認できます。これがいわゆる点群データと呼ばれるもので、1mメッシュ間隔でポイントが表示されています。

画像3

レイヤのプロパティを開き、シンボロジから高度で色分けしてみましょう。分類方法を「段階に分けられた」に変更し、カラムを「field_3」に指定します。シンボルではストロークスタイルを「ペンなし」に変更し、シンボルの縁を描かないように設定します。モードを「等間隔」に設定し分類を追加しましょう(※7)。

※7 本来なら「自然なブレイク」の方が良いのですが、フィーチャ数が膨大にあるため分類区間の計算に非常に時間が掛かります。ここでは、簡単な確認のための色分けなので、計算時間が短時間で済む「等間隔」を選択し、分類数を多めにして描画しました。

画像4

色分けを設定した図を見ると、高度からなんとなく家形(建物を真上から見た形状のこと)を読み取ることができます。また、海側から山側に向かってなだらかに標高が高くなっていることも分かります。一方、高度は建物の高さと標高の両方の値を含むため、標高と建物高さの差を指定した分類の色から判断できない場所もあります。

画像5

QGISでは、見かけ上ラスタのように表現されていますが、拡大すればポイントです。このような面的な傾向を描く場合は、本来ならばラスタ形式に変換したデータを使用したいですね。そこで、次章ではDSMをgeotiffに変換する方法を紹介します。


IV. DSMテキストファイルをgeotiffに変換する

QGISには、ベクトル形式をラスタ形式に変換する機能があります。前章で読み込んだテキストファイルは、ポイントデータ扱いとなっているので表面上はベクトル形式となっています。しかし、メモリ上に一時保存されたデータであるためか、このデータに対してラスタ形式への変換を行おうとするとエラーが出ることが多いので、いったんシェープファイルとしてエクスポートしておきましょう(※8)。
シェープファイルへのエクスポートはレイヤを右クリックし、「エクスポート」→「名前を付けて保存」です。

※8 つまり、ここではtxt→shp→tiffという変換を行っていきます。ここで、shpは中間ファイルなのでtiffを作ったら用済みです。にもかかわらず、実はshpが一番ファイルサイズが大きく処理が重いファイルとなっています。shpを介する処理工程は無駄ですね。GDAL等のコマンドベースで処理をすれば、txtからtiffに直接変換できます。「無駄」とか「面倒」といったものぐさな気持ちが、コマンドを覚える動機になったりします。

画像6

シェープファイルとなったポイントデータをレイヤに追加したら、テキストファイルのポイントレイヤはもう不要なので削除しておきましょう。

次に、このポイントデータをラスタ形式に変換します。メニューバーの「ラスタ」から「変換」→「ベクタのラスタ化」を選択します。新しく開いたウィンドウでパラメータを設定していきましょう。設定は以下の通りです。

--  設定  --
・入力レイヤ・・・ポイントデータを指定
・焼き込み値の属性(フィールド)・・・高さのフィールド(field_3)
・出力ラスタサイズの単位・・・地理単位
・水平方向の解像度・・・1(元のDSMが1mメッシュ単位なので)
・鉛直方向の解像度・・・1(元のDSMが1mメッシュ単位なので)
・出力領域・・・右のボタンをクリックし、「レイヤの領域を使う」を選択
・出力バンドに指定のnodata値を割り当てる・・・-9999
・出力ファイル・・・保存先とファイル名を指定

画像7

正しくパラメータを設定し処理を実行すると、10~30秒程度でラスタが生成されレイヤに追加されます。画像を見ると、白黒ですがなんとなく家形が白っぽく表示されています。

画像8

プロパティを開き、シンボロジのレンダリングタイプを「単バンド疑似カラー」に変更し、カラーランプを選択すると、高さの値をカラーを用いて表現できます。
また、レンダリングタイプを「陰影図」にすると影が付き、立体感のある表現ができます。

画像9

DSMラスタのレイヤを右クリックから複製し、それぞれ描画設定を「陰影図」と「単バンド疑似カラー」に変更、混合モードを「オーバーレイ」にすれば、カラーを使いつつ立体感を強調した地図が描けます。

画像10


V. DSMを使って3Dの都市景観図を描く

作成したDSMラスタを使って、3D図を描いてみましょう。QGIS2threejsを開き(※9)、レイヤのDEM部分でDSMラスタ(下図では出力ファイル)にチェックを入れます。すると、建物をなぞったようになんとなくサーフェイスがデコボコします。手前には阪神高速やハーバーハイウェイの高架橋も確認できますね。

画像11

一度QGISのウィンドウに戻り、XYZ Tilesから地理院地図の全国最新写真(シームレス)を読み込んでみましょう(※10)。

空中写真はレイヤの一番上に配置します。追加できたら、再びQGIS2threejsに戻りましょう。先ほど追加した空中写真がサーフェイス上にドレープされ(※11)、都市景観っぽい図を描くことができました。QGIS2threejsに表示されない時は、[ F5 ] キーを押してリロードします。

画像12

※9 QGIS2threejsはプラグインツールです。インストールしていない無い場合は、メニューの「プラグイン」から入手します。QGIS2threejsの導入についてのnoteはこちら。また、QGISの3Dビュー機能(メニューバーの「ビュー」→「新しい3Dビュー」)を利用しても3Dを描くことができます。
※10 XYZ Tilesに空中写真図が登録されてない場合は、XYZ Tilesを右クリックし、「新しい接続を選択」を開きます。ウィンドウで名前を適当に入力、URLに「https://cyberjapandata.gsi.go.jp/xyz/seamlessphoto/{z}/{x}/{y}.jpg」をコピペして [ OK ] をクリックします。地理院タイルの詳細情報は下記リンクを参照。XYZ Tilesの登録方法の詳細は過去noteのこちら
※11 ドレープとは、3Dサーフェイス上にレイヤを表示させることを意味します。もともとは掛け布や垂れ布、布生地が作るひだを意味する言葉で、GISでは布を被せるようなイメージからこの言葉が使われています。


VI. おわりに

今回は、兵庫県が公開する1mメッシュDSMをgeotiffに変換し、建物等を含む地表の起伏をQGISで表示しました。陰影図を使うと、建物はもちろん、道路や線路などに見られる僅かな起伏さえもはっきりと確認でき、改めてこのようなデータが無料で公開されていることの凄さを実感できます。

また、3Dビュー機能を用いれば、DEMと同様に地表面を立体的に表すことができました。下図は複数のメッシュ区画のDSMをgeotiffにし、それらをマージして3Dビューに利用して描いた、神戸から六甲山地方面を見た広域の3D景観図です。平地と山地のコントラストは3Dを使うと映えますね。

画像13

一方、立体的に立ち上がった建物を拡大してみると、垂直にそびえるような無機質な立体感はなく、斜めにボコボコとしています。地形の起伏であれば気にならないですが、建物はもう少しシャープな立体として描きたいですよね。
しかし、QGIS2threejsやQGISの3Dビュー機能では、「サーフェイスの立ち上げ」という方法で攻める限りは、このあたりが限界だと思います。

次回は、建物の3D化について、DSMと他のデータを組み合わせた別のアプローチ方法を紹介したいと思います。




記事の内容でもそれ以外でも、地理やGISに関して疑問な点があれば、可能な限りお答えしたいと思います。