TOPIC 21|QGISを用いた災害リスク情報の可視化と分析[1/2]|土地利用現況ごとに面積計算をする
このトピックでは、QGISを使って、PLATEAUの3D都市モデルを分析する方法を示します。「PLATEAU QGIS Plugin」を用いて取り込んだレイヤに対して、さまざまな解析処理をすることで、「山林」「住宅用地」などの土地利用現況ごとの面積を求めたり、浸水想定区域や土砂災害警戒区域の可視化、そして、建築物から避難所までの直線距離を求めたりできます。
PLATEAUには、建築物や起伏などの形状のデータ以外にも、さまざまな地理空間データが収録されており、GISソフトウェアを使うことで、さまざまな分析ができます。このトピックでは、オープンソースのGISであるQGISを使って、PLATEAUの3D都市モデルを分析する方法を示します。実例として、「山林」「住宅用地」などの土地利用現況ごとの面積を求めたり、浸水想定区域や土砂災害警戒区域の可視化、そして、建築物から避難所までの直線距離を求めたりする方法を解説します。まずは、土地利用現況ごとに面積計算する方法を説明します。
このトピックの内容は「PLATEAUのデータを活用しよう!初心者向けQGISハンズオン」(2023年度PLATEAU Hands-on アーカイブ動画)でも制作方法をハンズオン形式で紹介しています。
【目次】
21.3.2 CityGML形式ファイルをまとめてインポートする
21.1 _ このトピックの見どころ
このトピックは、「TOPIC20 QGIS Pluginを使って3D都市モデルを可視化する」の応用編です。前のトピックでは、QGISに「PLATEAU QGIS Plugin」を追加し、PLATEAUのCityGML形式ファイルを読み込むまでを説明しました。
このトピックでは、読み込んだデータのうち、とくに属性データに着目し、土地利用現況ごとの面積計算や災害リスクがある地域の可視化、建築物から避難所までの直線距離の算出方法を説明します。
主な見どころは、以下のとおりです。
●土地利用現況ごとの面積の算出
「田」「畑」「山林」「住宅用地」などの土地利用現況ごとの面積を求めます。PLATEAUの3D都市モデルには、こうしたデータが「土地利用モデル」として格納されています。
これを使えば、土地利用現況を地図上で色分けして可視化できるのはもちろん、QGISの解析機能を使って、そのデータ数や面積を求めることができます。
●災害リスクの可視化
地方公共団体は、「水防法」や「土砂災害警戒区域等における土砂災害防止対策の推進に関する法律」に基づき、浸水想定区域や土砂災害警戒区域を定めています。都市によっては、これらの属性が、「災害リスク情報」としてPLATEAUの3D都市モデルに格納されています。
災害リスク情報は、建築物単位で設定されており、PLATEAU QGIS Pluginで建築物のCityGML形式ファイルを読み込むと、それらが別のレイヤとして取り込まれます。これらをQGISで分析することで、災害リスクごとに色分けして可視化できます。
●避難所との距離の計算
地方公共団体によっては、避難所の名前と場所(経緯度)をCSV形式のデータとして独自に提供しているところがあります。こうしたCSVデータは、QGISで読み込んでレイヤとして扱うことができます。
QGISには、2つのレイヤ間で、最も近いもの同士を直線で結んで対応付ける「最近傍結合」という機能があります。この機能を使って、「地方公共団体が提供する指定避難所のレイヤ上の地物(=指定避難所)」と「PLATEAUの3D都市モデルから取り込んだ建築物レイヤの地物(=それぞれの建築物)」とで最短のものを対応付け、それぞれの建築物から、最寄りの避難所の直線距離を求めることができます。
21.2 _ 想定する環境と事前準備
このトピックの想定環境は、「TOPIC20 QGIS Pluginを使って3D都市モデルを可視化する」と同じです。次の環境を想定します。
・QGIS 長期安定版「QGIS 3.28 LTR」
・PLATEAU QGIS Plugin バージョン0.0.2
例として扱う地域は、静岡県沼津市です。あらかじめCityGML形式のデータをダウンロードし、展開しておいてください。
【メモ】
静岡県沼津市では、第1.0版のCityGMLと、第2.0版のCityGMLの2種類を提供しています。このトピックで用いるのは、第2.0版です(PLATEAU QGIS Pluginは、第1.0版には対応していません。データを読み込むことはできますが、災害リスク情報などが欠落してしまいます)。また沼津市の3D都市モデルには2020年度版と2021年度版のデータがありますが、このトピックで用いるのは2021年度版です。
【3D都市モデル(Project PLATEAU)沼津市(2021年度)】
https://www.geospatial.jp/ckan/dataset/plateau-22203-numazu-shi-2021/
以下では、このCityGML形式のデータを用いて、①土地利用現況ごとの面積計算、②災害リスクの可視化、③避難所までの直線距離の算出、の3つの例を見ていきますが、それぞれ、次の要件を満たす都市であれば、他の都市であっても、同じように操作できます。
①土地利用現況ごとの面積計算
土地利用モデル(luse)が提供されていること。
②災害リスクの可視化
津波や河川氾濫などの災害リスクが建築物モデルに付与されていること。
③避難所までの直線距離の算出
該当都市の地方公共団体などが、避難所の名前や位置を示すCSV形式データなどを配布していること。
PLATEAU のデータには避難所の位置は含まれていません。どの都市に、どのようなデータが含まれているのかについては、「整備都市の属性リスト」を参照してください。
21.3 _ 土地利用現況ごとに面積計算をする
まずはひとつ目の課題、「土地利用現況ごとに面積計算をする」から進めます。
21.3.1 _ 仕組みと考え方
PLATEAUの3D都市モデルでは、都市計画基礎調査の土地利用現況を土地利用モデルとして提供しています。このモデルは、高さを持たないLOD1のデータで、「田」「畑」「山林」「住宅用地」などをLandUseという地物型で表現したものです。詳細な仕様は、「3D都市モデル標準製品仕様書」の「4.8 土地利用モデルの応用スキーマ」に記載されています。
同仕様書の「表4-53 土地利用モデル(LOD1)の取得イメージ」にありますが、それぞれの土地に「田」「畑」などの区分が、luse:classという属性に設定されています。QGISにおいて、この属性でグループ化して面積を集計する操作をすることで、それぞれの総面積がわかります。
QGIS上で面積を求めるときは、ひとつ重要なポイントがあります。それは経緯度の座標系である地理座標系ではなく、メートル単位の座標系である投影座標系に変換するという点です。
PLATEAUの3D都市モデルは「EPSG:6697」もしくは「EPSG:6698」(高さがない場合)を用いています。面積を求める操作をするときは、これを平面直角座標系に変換します。平面直角座標系は、地域によって原点が異なる19種類の座標系があり、8系に該当する静岡県沼津市では「EPSG:6676」を用います。
座標系に関する詳細は、「TOPIC 3|3D都市モデルデータの基本[4/4]|CityGMLの座標・高さとデータ変換」を参照してください。
21.3.2 _ CityGML形式ファイルをまとめてインポートする
まずは、土地利用現況のCityGML形式ファイルをまとめてインポートします。
土地利用現況のファイルは、udxフォルダの下のluseフォルダに格納されています。ここでは、沼津市内全域の、それぞれの土地利用現況ごとの面積を求めたいと思います。そこで、luseフォルダに含まれているすべてのCityGML形式ファイルをインポートします。
複数のファイルをまとめて読み込む場合は、PLATEAU QGIS Pluginの「バッチプロセスで実行」という方法を使います。具体的な手順は、以下のとおりです。
【手順】土地利用現況に関する複数のCityGML形式ファイルをまとめてインポートする
[1]PLATEAU QGIS Pluginを起動する
[プロセシング]メニューから[ツールボックス]を開きます。[Project PLATEAU]の配下の[PLATEAU 3D都市モデルを読み込む]をダブルクリックして、PLATEAU QGIS Pluginを起動します。
[2]バッチプロセス画面に切り替える
1つのファイルを読み込むダイアログボックスが表示されるので、[バッチプロセスで実行]をクリックして、複数ファイルを選択できる画面に切り替えます。
[3]複数ファイルを選択する
図21-6の画面が表示されるので、[PLATEAU CityGMLファイル]の下の[オートフィル]のドロップダウンをクリックして、[ファイル選択]をクリックします。
複数ファイルを選択できる画面が表示されたら、udxフォルダの配下のluseフォルダのファイルすべてを選択し、[開く]をクリックします。
[4]オプションを設定する
すると、選択したファイルが1行ごとに設定されます。これらに対して、オプションなどを変更します。
ひとつずつ設定してもよいですが、一番上の行の値だけを設定し、残りは全部同じ値で埋める操作をすると効率的です。
まずは、一番上の行のオプションを次のように設定します。
【メモ】
ここで指定しているEPSG:6676は、平面直角座標系の8系(新潟県、長野県、山梨県、静岡県において用いる座標系)のことです。後述する操作で面積を求めるため、ここでは平面直角座標系に変換しておきます。
・読み込むLOD | [最も単純なLODのみを読み込む] |
・地物を構成する部分ごとにレイヤを分ける | No |
・3次元データを強制的に2次元化する | No |
・既存の同名レイヤに追記する | Yes |
・変換先CRS | [EPSG:6676 - JGD2001/Japan Plane Rectangular CS VIII] |
変換先CRSに該当の項目がないときは、その右のボタンをクリックして、「6676」を検索して見つかったものを選択します。
一番上の行の値を設定したら、[オートフィル]のメニューから[フィルダウン]を選択します。すると、それより下の行が、同じ値に設定されます。
[5]実行する
[実行]ボタンをクリックします。すると、すべてのファイルが読み込まれます。[閉じる]をクリックして、ウィンドウを閉じます。
【メモ】
なお、オートフィルから複数ファイルを追加すると2行目が空欄となります。そのまま実行すると黄色のバーで「Wrong or missing parameter value: PLATEAU CityGMLファイル(row 2)」と表示されますが、プラグインの実行上、とくに問題ありません。2行目の[PLATEAU CityGMLファイル]が設定されていないため、アラートが出ているだけです。
21.3.3 _ 土地利用現況ごとに着色する
インポートすると、図21-12のようにLandUseというレイヤができます。
単色表示なので、まずは、土地利用現況ごとに色分けしてみましょう。これは前のトピックで操作したように、カテゴリ値によるスタイルを設定すれば実現できます(「TOPIC 20 20.5.2 属性に応じてスタイリングする」を参照)。
【手順】区分別に着色する
[1]レイヤのプロパティを開く
[LandUse]レイヤを右クリックして[プロパティ]を選択し、レイヤのプロパティを開きます。
[2]カテゴリ値による定義に変更する
[シンポロジ]タブをクリックして開き、ドロップダウンリストで[カテゴリ値による定義(categorized)]に変更します。土地利用現況は「class」という属性に設定されているため、[値(value)]で、これを選び、[分類]をクリックします。すると分類一覧が表示されるので、[OK]をクリックします。
以上の設定をすると、土地利用現況ごとに色分けされます。
21.3.4 _ 土地利用現況ごとの面積を求める
このように土地利用現況にはclass属性が付いているので、class属性ごとにグループ化して面積を求めれば、土地利用現況ごとの面積を求めることができます。
◾️土地利用現況の数を取得する
まずは手始めに、土地利用現況における、「山林」「住宅用地」などのそれぞれのデータ数をカウントしてみます。プロセシングツールの「属性の基本統計量」から操作します。
【メモ】
土地利用現況におけるそれぞれのデータ数をカウントしていますが、この操作は、さまざまな用途に応用できます。例えば、建築物のデータについて、高さの条件を指定して同等のことをすれば、「何メートル以上の建築物は、いくつかあるのか」などを調査するのに使えます。
【手順】土地利用現況の数をカウントする
[1]属性の基本統計量を開く
[プロセシングツールボックス]から、[ベクタ解析]の下にある[属性の基本統計量(レイヤ出力)]をダブルクリックして開きます。
プロセシングツールボックスでは、検索ボックスに項目名を入力すると絞り込まれるので、「属性の」など一部を入力して探すのがよいでしょう。
【メモ】
プロセシングツールボックスが表示されていないときは、[プロセシング]メニューの[ツールボックス]をクリックしてください。
[2]数をカウントする
属性の基本統計量のウィンドウが開いたら、次のように入力し、[実行]をクリックします。実行が終わったら、[閉じる]をクリックしてウィンドウを閉じてください。
・入力ベクタレイヤ
対象のレイヤです。すでに土地利用モデルを取り込んでいる[LandUse]レイヤを選択します。
・集計する属性
和を求める属性を指定します。空にしておくと、総和ではなく、数がカウントされるので、ここでは空のままにしておきます。
・カテゴリ分けする属性
グループ化する属性を指定します。classごとに分類したいので、classを選択します。[・・・]をクリックすると、属性を選択できます。
・カテゴリ別の統計量
結果の保存先を選択します。何も指定しなければ、新しく一時スクラッチレイヤが作られ、そこに保存されるので、ここではそのままにしておきます。
・出力レイヤ
結果の保存先を選択します。何も指定しなければ、新しく一時スクラッチレイヤが作られ、そこに保存されるので、ここではそのままにしておきます。
実行が完了すると、[カテゴリ別の統計量]という新しいレイヤが作成されます。右クリックして属性テーブルを開くと、図21-19のように、カウント数が表示されます。
◾️土地利用現況別の面積を求める
この仕組みを応用して、土地利用状況別の面積を求めます。
QGISでは、「ジオメトリ属性の追加」という操作をすると、地物に対して、面積や周長を追加できます。あらかじめこれらを計算しておき、いま説明した「基本統計量」の機能を用いて、その総和を求めます。
ただし面積や周長を求める際、QGISで不正なジオメトリ(幾何形状)として判定される地物が含まれていると正しく計算できません。そうしたことがないよう、最初に次の手順[1]から[3]にあるようにジオメトリの修復操作をしてから、作業をします。
【手順】土地利用現況別の面積を求める
[1][ジオメトリを修復]を開く
まずは、ジオメトリの修復から始めます。[プロセシングツールボックス]から、[ベクタジオメトリ]の下にある[ジオメトリを修復]をダブルクリックして開きます。
[2]修復方法と出力レイヤを選択する
ジオメトリを修復ウィンドウが表示されたら、次の項目を選択し、[実行]をクリックして実行します。
・入力レイヤ
対象のレイヤです。すでに土地利用モデルを取り込んでいる[LandUse]レイヤを選択します。
・修復方法
修復する方法です。デフォルトの[構造]のままにしておきます。
・出力レイヤ
結果の保存先を選択します。何も指定しなければ、新しく一時スクラッチレイヤが作られ、そこに保存されるので、ここではそのままにしておきます。
[3]レイヤ名を変更する
「出力レイヤ」という名前のレイヤとして出力されます。以降の操作をわかりやすくするため、名前を変更しておきます。右クリックして[レイヤの名前を変更]を選択し、「LandUse-fix」に変更します。
[4]ジオメトリ属性を追加する
ジオメトリを修復したLandUse-fixレイヤに対して、面積と周長を求めていきます。
プロセシングツールボックスから[ベクタジオメトリ]の配下の[ジオメトリ属性を追加]をダブルクリックして開きます。
次のように設定し、[実行]をクリックします。実行が終わったら[閉じる]をクリックして、ウィンドウを閉じます。
・入力レイヤ
対象のレイヤです。いま生成したジオメトリ修復済みの[LandUse-fix]レイヤを選択します。
・計算に利用する座標参照系(CRS)
計算のときに使う座標参照系を選択します。ここでは[レイヤのCRS]を選択し、レイヤに設定されているものと同じものを使います。
【メモ】
これまでの操作では、[LandUse-fix]レイヤには、8系の平面直角座標系である「EPSG:6676]が設定されているため、メートル単位で計算されます。面積や周長は、投影座標系でないと正しく計算できないので注意してください。
・出力レイヤ
結果の保存先を選択します。何も指定しなければ、新しく一時スクラッチレイヤが作られ、そこに保存されるので、そうしておきます。
[5]属性テーブルを確認する
[出力レイヤ]という新しいレイヤに、結果が出力されます。右クリックして、[属性テーブル]を開きます。
すると「area」と「perimeter」が追加されることがわかります。前者が「面積」、後者が「周長」です。
[6]総和を求める
あとは「用途別の数を取得する」で実行した操作と同様に、「属性の基本統計量」を使って、このareaの総和を、classでグループ化したものを求めます。
プロセシングツールボックスから[ベクタ解析]の下にある[属性の基本統計量(レイヤ出力)]を開き、次のように入力して[実行]をクリックします。実行が終わったら、[閉じる]をクリックしてウィンドウを閉じます。
・入力ベクタレイヤ
対象のレイヤです。面積を示す属性であるareaが追加された[出力レイヤ]を選択します。
・集計する属性
areaの総計を求めたいので、[area]を選択します。
・カテゴリ分けする属性
グループ化する属性を指定します。classごとに分類したいので、classを選択します。[・・・]をクリックすると、属性を選択できます。
・出力レイヤ
結果の保存先を選択します。何も指定しなければ、新しく一時スクラッチレイヤが作られ、そこに保存されるので、ここではそのままにしておきます。
[7]結果を確認する
もうひとつ別の「カテゴリ別の統計量」のレイヤが作られます。右クリックして[属性テーブルを開く]を選択し、属性テーブルを確認すると、area属性の集計結果が表示されます。合計は「sum」の項目で、これが面積の総和です。
【文】
久納敏矢(株式会社MIERUNE)、大澤文孝