FOSS4G KANSAI 2019のハンズオン「QGISで地域防災!」の資料です。
QGISで地域防災 オープンデータとプロセッシングツールで津波避難の準備をしよう1
View Slide
QGISバージョン3から、多くの機能が「プロセッシングツール」に統合されました。様々な分析をプロセッシングツールで行うことができます。今回は、プロセッシングツールを使って津波避難について、分析・可視化をしてみます。 また、複数のプロセッシングツールを自動で実行する「グラフィカルモデラー」も利用してみます。2
<このハンズオンの想定>みなさんは、福祉施設の管理を行う業務をしています。もし南海トラフ地震が発生し、津波避難をしなければいけなくなったときのために、避難訓練を行います。まずは、利用者が津波到達までに逃げられる範囲は1000mだということがわかりました。各施設から1000mの範囲に、津波発生時の避難場所がどこにあるのか確認します。もし避難所がなかったときはどうしたらいいでしょう?行政に要請する?新たな避難場所を独自に考える?そういうことを検討するために、オープンデータとQGISを使って、まずは現状を地図で確認してみましょう。3
<注意事項>このハンズオンで利用しているデータは、処理の時間等も考慮し、兵庫県の東部の一部(西宮市、尼崎市、芦屋市)のデータになっています。元のデータが基本的にオープンデータです。自分で入手することも可能ですので、ご自分の住む街が必要な場合は、各自入手してください。また、避難の範囲(このハンズオンでは1000m)は、あくまでも例です。実際の津波到達時間、避難距離はわかりませんので、実務で行う場合は、実際の値をご自分で調査してください。4
津波浸水域内の福祉施設から一定距離内の避難場所を探す5
6
準備7
材料● 福祉施設(国土数値情報)● 避難場所(G空間情報センター)● 津波浸水域(兵庫県オープンデータ)● 道路ライン(OpenstreetMap)8
ハンズオンフォルダ「津波避難」の「津波避難_兵庫県一部.gpkg」にレイヤが保存されています。9
QGISを起動してください10
メニューに「プロセッシング」が無い方は、教えて下さい。11
<背景図をレイヤに追加します>フォルダ「津波避難」の「OSM_兵庫県.jpg」をQGISにドラッグ&ドロップ12
<背景図をレイヤに追加します>座標参照系を選択します。「WGS84(EPSG:4326)」を選択します。13
<ベクタレイヤを追加します>フォルダ「津波避難」の「津波避難_兵庫県一部.gpkg」をQGISにドラッグ&ドロップ14
<ベクタレイヤを追加します>「全て選択」ボタンをクリックして、「OK」ボタンをクリックします。1215
<ベクタレイヤを追加します>地図に必要なレイヤが表示されます。16
<ベクタレイヤを追加します>レイヤの順番を確認しましょう。17
<プロジェクトを保存します> ボタンをクリックしてプロジェクトを保存します。フォルダ「津波避難」に保存しましょう。ファイル名はわかりやすく「津波避難場所」としましょう。18
ここまでで失敗している方や、途中で強制終了してしまった人などは、フォルダ「津波避難」にある「バックアップ_津波避難場所.qgz」ですべてのレイヤを表示した状態の地図を表示することができます。19
分析20
・・・これからの作業の説明1. 津波浸水範囲に入っている福祉施設のみを抽出2. 津波浸水域外の避難場所を抽出3. 2で抽出したデータから「津波」が対象の避難場所を抽出4. 1で抽出した福祉施設から道路に沿った避難可能距離の範囲を計算5. 4の範囲内にある避難場所をカウント21
<津波範囲内の福祉施設を抽出>津波浸水想定範囲の中にある福祉施設を抽出します。22
<津波範囲内の福祉施設を抽出>メニュー「プロセッシング」→「ツールボックス」を選択します。23
<津波範囲内の福祉施設を抽出>ツールボックスの「ベクタ選択」→「場所による抽出」を選択します。24
<津波範囲内の福祉施設を抽出>抽出するレイヤに「福祉施設」、空間的関係は「交わる」、比較対象レイヤは「津波浸水範囲」を選択し「実行」。福祉施設ポイント津波浸水範囲25
<津波範囲内の福祉施設を抽出>津波浸水範囲のポリゴンに不正があるので、処理に失敗します。一度閉じます。26
<津波範囲内の福祉施設を抽出>この赤い点の部分が不正なジオメトリです。(プロセッシングツール「有効性チェック」で確認できます。)27
<津波浸水範囲の修正をします>ジオメトリに不正のあった津波浸水範囲を修正して、分析に使えるようにします。28
<津波浸水範囲の修正をします>検索に「修正」と入力し、「ジオメトリの修正」を選択します。29
<津波浸水範囲の修正をします>入力レイヤは「津波浸水範囲」を選択し「実行」ボタンをクリック。津波浸水範囲30
<津波浸水範囲の修正をします>新しい一時レイヤが作成されます。31
<津波浸水範囲の修正をします>「F2」キーを押して、名前をわかりやすく修正します。「修正津波範囲」と入力しましょう。32
<津波浸水範囲の修正をします>一応ファイルに保存しておきます。レイヤ横の「 」をクリックして、ファイルに保存します。フォルダ「津波避難」の「津波避難_兵庫県一部.gpkg」を指定「修正津波範囲」と入力33
<津波浸水範囲の修正をします>紛らわしいので、もともとの津波浸水範囲は削除します。12レイヤを選択してから、クリック34
<再度、津波範囲内の福祉施設を抽出>修正した津波浸水範囲を利用して、再度津波浸水範囲内の福祉施設を抽出します。35
ツールボックスの「ベクタ選択」→「場所による抽出」を選択します。<再度、津波範囲内の福祉施設を抽出>36
<再度、津波範囲内の福祉施設を抽出>抽出するレイヤに「福祉施設」、空間的関係は「交わる」、比較対象レイヤは「修正津波範囲」を選択し「実行」。福祉施設ポイント修正津波範囲37
<再度、津波範囲内の福祉施設を抽出>新しくレイヤが作成されるので、「F2」キーでレイヤ名を変更します。「抽出福祉施設」としましょう。38
<津波浸水範囲の修正をします>一応ファイルに保存しておきます。レイヤ横の「 」をクリックして、ファイルに保存します。フォルダ「津波避難」の「津波避難_兵庫県一部.gpkg」を指定「抽出福祉施設」と入力39
<津波浸水範囲の修正をします>紛らわしいので、もともとの福祉施設は削除します。12レイヤを選択してから、クリック40
<津波範囲外の避難場所を抽出>津波浸水範囲の外の避難場所を抽出します。41
ツールボックスの「ベクタ選択」→「場所による抽出」を選択します。<津波範囲外の避難場所を抽出>42
<津波範囲外の避難場所を抽出>抽出するレイヤに「避難場所」、空間的関係は「離れた」、比較対象レイヤは「修正津波範囲」を選択し「実行」。避難場所ポイント修正津波範囲43
<津波範囲外の避難場所を抽出>新しいレイヤが作成されます。今回は次の処理にも使用するため、レイヤはそのままにします。44
<対象が「津波」の避難場所を抽出>避難場所の対象が「津波」に対応している避難場所のみを抽出します。45
ツールボックスの「ベクタ選択」→「属性による抽出」を選択します。<対象が「津波」の避難場所を抽出>46
属性データの「津波」フィールドに「◎」が入力されているデータを抽出します。<対象が「津波」の避難場所を抽出>47
入力レイヤに「出力レイヤ」、属性選択に「津波」、演算子は「=」、値に「◎」を入力し、「実行」します。<対象が「津波」の避難場所を抽出>出力レイヤ津波=◎48
新しくレイヤが作成されるので、「F2」キーでレイヤ名を変更します。「抽出避難場所」としましょう。<対象が「津波」の避難場所を抽出>49
一応ファイルに保存しておきます。レイヤ横の「 」をクリックして、ファイルに保存します。フォルダ「津波避難」の「津波避難_兵庫県一部.gpkg」を指定「抽出避難施設」と入力<対象が「津波」の避難場所を抽出>50
紛らわしいので、もともとの避難場所と一時レイヤは削除します。12レイヤを選択してから、クリック<対象が「津波」の避難場所を抽出>51
<福祉施設から一定の距離を算出>福祉施設から、避難できる一定距離を道路に沿って算出します。今回は福祉施設から1kmの範囲を算出します。52
ツールボックスの「ネットワーク解析」→「サービスエリア(始点レイヤ)」を選択します。<福祉施設から一定の距離を算出>53
ネットワークを表すレイヤに「OSM道路」、始点を含むレイヤに「抽出福祉施設」、計算するパスの種類は「最短」、求めたい旅行コストに「1000」を入力し、「実行」します。<福祉施設から一定の距離を算出>OSM道路抽出福祉施設最短100054
1000mの範囲がラインレイヤで作成されます。<福祉施設から一定の距離を算出>55
施設ごとの1000mの範囲をポリゴンにします。プロセッシングツールの検索に「凸」(とつ)と入力して、「ベクタジオメトリ」の「凸包」を選択します。<福祉施設から一定の距離を算出>1256
入力レイヤに「サービスエリアの出力」を選択し、「実行」をクリックします。<福祉施設から一定の距離を算出>サービスエリアの出力57
新しいレイヤで福祉施設から1000m範囲のポリゴンができます。<福祉施設から一定の距離を算出>58
新しくレイヤが作成されるので、「F2」キーでレイヤ名を変更します。「1000m範囲」としましょう。<福祉施設から一定の距離を算出>59
<1000m範囲内の避難場所をカウント>福祉施設から、1000mの範囲の中に避難場所があるか確認するために、範囲内のポイントをカウントします。60
プロセッシングツールの検索に「点の数」と入力して、「ベクタ解析」の「ポリゴン内の点の数」を選択します。<1000m範囲内の避難場所をカウント>1261
ポリゴンレイヤに「1000m範囲」、点レイヤに「抽出避難場所」を選択し、「実行」します。<1000m範囲内の避難場所をカウント>1000m範囲抽出避難場所62
新しくレイヤが作成されるので、「F2」キーでレイヤ名を変更します。「避難場所カウント」としましょう。<1000m範囲内の避難場所をカウント>63
一応ファイルに保存しておきます。レイヤ横の「 」をクリックして、ファイルに保存します。フォルダ「津波避難」の「津波避難_兵庫県一部.gpkg」を指定「避難場所カウント」と入力<1000m範囲内の避難場所をカウント>64
属性テーブルを表示して、避難所の数を確認します。フィールド名をクリックすると、並び替えることができます。<1000m範囲内の避難場所をカウント>65
今回利用したプロセッシングツール66
67<ジオメトリの修正> ジオメトリ(レイヤの地物)にGIS上のエラーが有る場合に、プロセッシングツールの処理ができずエラーになります。 その場合このコマンドを実行すると、修正した新しいレイヤを作成します。 ジオメトリエラーは主にポリゴンレイヤで発生し、同じ点に複数のノードがあったり、図形が交差していたりする場合が該当します。
68<場所による抽出> 2つのレイヤを比較して、重なっている、重なっていないなどの条件に合致する地物を抽出して新しいレイヤを作成します。 同じような機能で、地物を選択するだけの「場所による選択」があります。
69<属性による抽出> レイヤの属性値で地物を抽出して、新しいレイヤを作成します。 同じような機能で、地物を選択するだけの「属性による選択」があります。
70<サービスエリア> ある地点からラインに沿って指定した距離の範囲を新しいレイヤで作成します。 移動時間を指定することもできます。
71<凸包> 選択したレイヤの地物ごとの凸包(凹んだ部分を省略した範囲)を作成します。 地物ごとではなく同じ属性を持つグループで凸方を作成したいときには、「最小境界ジオメトリ」を使用します。
72<ポリゴン内の点の数> ポリゴンレイヤに重なるポイントレイヤの、ポリゴンの範囲内のポイントの数をカウントし、新しいポリゴンレイヤを作成します。そのレイヤの属性テータにポイントの数を記録します。
グラフィカルモデラーを使ってプロセッシング処理を自動化73
74グラフィカルモデラーとは?グラフィカルモデラーは、プロセッシングツールの複数のコマンド処理を一度に自動でできるようにする機能です。データ分析を行うために、たくさんの処理を行う必要がある場合に、同じようなデータ(例えば市町村ごととか)に対して同じ処理を何度も行うのは大変です。そこで、グラフィカルモデラーを使うことで、一度で処理を完了することができます。
・・・今回自動化する処理1. 津波浸水範囲に入っている福祉施設のみを抽出2. 津波浸水域外の避難場所を抽出3. 2で抽出したデータから「津波」が対象の避難場所を抽出4. 1で抽出した福祉施設から道路に沿った避難可能距離の範囲を計算5. 4の範囲内にある避難場所をカウント75
1. 「ジオメトリの修正」で津波浸水範囲を修正2. 「場所による抽出」で修正津波浸水範囲の中の福祉施設を抽出3. 「サービスエリア(始点レイヤ)」で福祉施設から1000mのラインを作成4. 「凸包」で1000mラインの範囲を作成76プロセッシングツールの順序
77
78実際に実行してみますのでまずはご覧ください
<グラフィカルモデラーの画面>79
80
81名前:モデルの名前グループ:モデルをプロジェクトに登録するときの グループ名
82これをクリックすると、プロセッシングツールボックスに追加される。(このプロジェクトでのみ有効)
83レイヤや数値など、プロセッシングツールを実行するためのアイテムをモデラーに追加します。
84
85プロセッシングツールのコマンドを選択します。
86
<モデルを作ってみよう>87
88メニューの「プロセッシング」→「グラフィカルモデラー」を選択します。<モデルを作ってみよう>
89「モデル名」を入力します。今回は「避難範囲算出」と入力しましょう。<モデルを作ってみよう>
<アイテムを追加>90レイヤアイテムとして「津波浸水範囲レイヤ」、「福祉施設レイヤ」、「道路レイヤ」、数値入力用アイテムで「避難距離」をモデルに追加します。
91津波浸水範囲レイヤをアイテムに追加します。「入力」タブをクリックして、「ベクタレイヤ」をダブルクリックします。<アイテムを追加>21
92パラメーター名に「津波浸水範囲」と入力し、ジオメトリタイプを「ポリゴン」にします。「OK」ボタンをクリックします。<アイテムを追加>
93モデルにアイテムが追加されます。<アイテムを追加>
94福祉施設レイヤをアイテムに追加します。ふたたび「ベクタレイヤ」をダブルクリックします。<アイテムを追加>
95パラメーター名に「福祉施設」と入力し、ジオメトリタイプを「ポイント」にします。「OK」ボタンをクリックします。<アイテムを追加>
96モデルにアイテムが追加されます。<アイテムを追加>
97道路レイヤをアイテムに追加します。ふたたび「ベクタレイヤ」をダブルクリックします。<アイテムを追加>
98パラメーター名に「道路」と入力し、ジオメトリタイプを「ライン」にします。「OK」ボタンをクリックします。<アイテムを追加>
99モデルにアイテムが追加されます。<アイテムを追加>
100数値を入力する「避難距離」をアイテムに追加します。「数値」をダブルクリックします。<アイテムを追加>
101パラメーター名に「避難距離」と入力し、数値型を「integer」(整数値)にします。その他はそのままでいいです。「OK」ボタンをクリックします。<アイテムを追加>
102モデルにアイテムが追加されます。<アイテムを追加>
<画面からはみ出したら>103
104モデルが画面からはみ出したら、 ボタンをクリックすると画面の中に収まります。(もしくは画面を広げます)<画面からはみ出したら>
105モデルを個別にドラッグで動かすこともできます。<画面からはみ出したら>
<「ジオメトリの修正」の追加>106津波浸水範囲レイヤに不正なジオメトリがあるので、「ジオメトリの修正」を行って修復します。処理結果は、次の処理に使用しますが、レイヤとして出力はしません。
107「アルゴリズム」タブをクリックして、検索に「修正」と入力し、「ジオメトリの修正」をダブルクリックします。<「ジオメトリの修正」の追加>213
108Descriptionはそのままでもいいですが、あとあとわかりやすいように「津波範囲 ジオメトリ修正」とします。入力レイヤに「津波浸水範囲」アイテムを選択します。<「ジオメトリの修正」の追加>わかりやすく変更
109「OK」ボタンをクリックすると、モデルにコマンドが追加されます。<「ジオメトリの修正」の追加>
<「場所による抽出」の追加>110津波浸水範囲の中にある、福祉施設を抽出します。処理結果は、うまくできているか確認するため、レイヤに出力します。
111検索に「場所による」と入力し、「場所による抽出」をダブルクリックします。<「場所による抽出」の追加>21
112Descriptionはそのままでもいいですが、あとあとわかりやすいように「福祉施設 場所による抽出」とします。入力レイヤに「福祉施設」アイテムを選択します。<「場所による抽出」の追加>わかりやすく変更
113空間的関係から抽出方法を選択します。 をクリックして、「交わる」を選択して、「OK」ボタンをクリックします。<「場所による抽出」の追加>21
114比較対象のある地物のあるレイヤでジオメトリ修正した津波浸水範囲「'出力レイヤ' from algorithm '津波範囲 ジオメトリの修正'」を選択します。<「場所による抽出」の追加>修正処理した津波浸水範囲
115レイヤを地図に出力する場合は、出力レイヤにレイヤ名を入力します。ここでは「出力福祉施設」と入力します。<「場所による抽出」の追加>出力するレイヤ名
116「OK」ボタンをクリックすると、モデルにコマンドが追加されます。<「ジオメトリの修正」の追加>
117うまくできているか試してみましょう。 ボタンをクリックすると、モデルを実行できます。<「ジオメトリの修正」の追加>
118「津波浸水範囲」「福祉施設」「道路」を選択します。「避難距離」はまだ使用しないので、入力しません。「実行」ボタンをクリックすると、処理が開始されます。<「ジオメトリの修正」の追加>
119正しく処理ができているか確認します。※元の福祉施設レイヤを非表示にして、新しいレイヤを一番上に表示します。<「ジオメトリの修正」の追加>
120きちんと作成されていることが確認されたら、作成した福祉施設の一時レイヤは削除してください。Point!
<「サービスエリア」の追加>121抽出した福祉施設から、道路に沿って指定した距離の新しいラインを作成します。処理結果は、うまくできているか確認するため、レイヤに出力します。
122「ネットワーク解析」→「サービスエリア(始点レイヤ)」をダブルクリックします。<「サービスエリア」の追加>
123Descriptionはそのままでもいいですが、あとあとわかりやすいように「避難距離 サービスエリア(始点レイヤ)」とします。ネットワークを表すベクタレイヤに「道路」アイテムを選択します。わかりやすく変更<「サービスエリア」の追加>
124開始点を含むベクタレイヤに「'出力レイヤ' from algorithm '福祉施設 場所による抽出'」を選択します。(前の処理で出力した一時レイヤ)<「サービスエリア」の追加>
125求めたい旅行コストで、数値のアイテムを選択します。 をクリックして、「モデル入力」を選択します。そして、「避難距離」アイテムを選択します。<「サービスエリア」の追加>
126レイヤに計算したラインを出力するので、サービスエリアの出力(線)に「避難ライン」と入力します。<「サービスエリア」の追加>
127「OK」ボタンをクリックすると、モデルにコマンドが追加されます。<「サービスエリア」の追加>
128うまくできているか試してみましょう。 ボタンをクリックすると、モデルを実行できます。<「サービスエリア」の追加>
129「津波浸水範囲」「福祉施設」「道路」を選択します。「避難距離」は「1000」と入力します。(1kmの距離を計算)「実行」ボタンをクリックすると、処理が開始されます。<「サービスエリア」の追加>
130正しく処理ができているか確認します。※避難ラインの色を見やすく変更しています。<「サービスエリア」の追加>
<モデルの保存>131作成したモデルを保存します。ファイルにも保存できますし、プロジェクトに保存することもできます。
132ファイルに保存する場合は、ツールバーの ボタンをクリックします。<モデルの保存>
133プロジェクトに保存する場合は、ツールバーの ボタンをクリックします。<モデルの保存>
134プロジェクトに保存した場合は、プロセッシングツールボックスから利用することができます。<モデルの保存>
<時間があれば・・・>135
136時間があれば次の作業もモデルに追加してみましょう。1. 「凸包」で避難ラインの範囲を作図します。2. 「避難場所」をレイヤに追加します。3. 「場所による抽出」で津波範囲の外にある避難場所を抽出します。4. 「ポリゴン内の点の数」で1.で作成した範囲内の3.で抽出した避難場所をカウントします。
137
138