メッシュからの最寄りの避難所を算出する方法はありますか。

400 views
Skip to first unread message

みならい

unread,
Sep 30, 2023, 11:50:54 PM9/30/23
to QGIS初心者質問グループ
こんにちは。
私は現在、ある市町村について、津波避難所のデータと100mメッシュごとの老年人口分布を用いて、高齢者が避難に要する時間が長い地域を視覚化したいと考えています。
添付画像の黄色い丸が避難所です。
紫色が人口分布のメッシュなのですが、メッシュごとに、最寄りの避難所がどこなのかを算出する方法はありませんか?
メッシュごとの最寄りの避難所がわかれば、メッシュの中心点等から避難所までの直線距離を算出し、高齢者が移動するのにかかる時間を計算して、色分けをしたいと考えています。
ボロノイ分割等を用いるのでしょうか...?
色炉試行錯誤してみましたが、わかりませんでした。どうかご教授くださいm(_ _)mスクリーンショット 2023-10-01 123640.png

futoshi kidani

unread,
Oct 1, 2023, 5:20:44 AM10/1/23
to QGIS初心者質問グループ
方法はボロノイでもいいと思いますが
(実際は地形に左右されるので、必ずしも近い避難所が適当とは言えませんので
ネットワーク分析とか道路のないメッシュにフラグ立てて重み付けした後に解析するとか必要でしょうけど)
メッシュが二分割以上されたときにどう表現するか、がキモになると思います。
この辺りは、GISの使い方というより解析方法や表現方法の話になると思いますので、
もし学生さんでいらっしゃるなら、ここをしっかり考えて担当教官とディスカッションするのが大切だと思います。

さて、ボロノイ以外でやる場合ですが、私なら「最寄りのハブの距離」を使いますかね。
この場合、メッシュだとちょっとやり辛いので、
「解析にあたってメッシュの中心から避難所までの距離を対象として評価した」とか但し書きを入れたうえで
ベクタのジオメトリツールの「重心」で、メッシュの重心をポイントデータにして、
のち各避難所をハブとして「最寄りのハブの距離(ハブへの線)」で
メッシュ重心と避難所を関連付けますかね。
のち、テーブル結合でメッシュと出力されたラインデータを結合して、
シンボロジを連続値による定義にして距離を適当な閾値でグループ分けして色分けしますかね。

(なお、重心をポイントにしておけば、
余程で無い限りボロノイで解析しても2つ以上と結びつく事はないと思うので、
そちらの方法でも可。
この場合、空間結合でボロノイ分割のデータからメッシュの重心のポイントデータに
避難所の情報を与えてやって、これを元にハブ&スポーク図を作成してやれば、
距離も出せると思います。)

そのメッシュのグループがどこに避難するか、を示すアウトラインも欲しいので、
テーブル結合したメッシュデータをHubNameで融合(ディゾルブ)して
塗り潰しなしの枠として使います。

…なんかほぼ全部答えを出してしまいましたが、
てきれば試行錯誤した事を書いておいて下されば、
筋道という形でやり方を伝えられるかと思います。

なお、ハブうんちゃらのツール類は、プロセシング→ツールボックスでウィンドウを出して、
検索窓に「ハブ」と打てば出てきます。

あと、テーブル結合はレイヤプロパティにあります。
2023年10月1日日曜日 12:50:54 UTC+9 みならい:

wata909

unread,
Oct 1, 2023, 7:31:41 AM10/1/23
to QGIS初心者質問グループ
QGIS単体ではありませんが、GRASS と組み合わせてやる方法で、以下があります。
参考までに。

https://www.slideshare.net/wata909/ss-15464044

(SlideShareから、DLができなくなってますね・・・)

2023年10月1日日曜日 18:20:44 UTC+9 kidani...@gmail.com:

futoshi kidani

unread,
Oct 2, 2023, 4:52:36 AM10/2/23
to QGIS初心者質問グループ
ほぼテキストだけで書いてしまったので、一応絵もつけておきます。
①初期状態
01.jpg
②メッシュの重心を作成
02.jpg
③最寄りのハブの距離(ハブへの線)
03.jpg
④できたものをテーブル結合でメッシュに結合して色分け、ディゾルブしてアウトラインを追加
04.jpg

(…というか、このA〇cでいうところのスパイダーグラフの機能、結構探してたんですよね。こんなところにあったとは…)
2023年10月1日日曜日 18:20:44 UTC+9 futoshi kidani:

みならい

unread,
Oct 2, 2023, 9:54:38 AM10/2/23
to QGIS初心者質問グループ
kidaniさん、wataさん、お二方ともありがとうございます!
GRASS,触ったことがないので、とりあえずはQGISでやってみます。
kidaniさん、画像付きの解説ありがとうございます。
kidaniさんはじめ、このグループの方々のおかげでGISについて少しずつ理解を深めることができています。本当にありがとうございます。

2023年10月2日月曜日 17:52:36 UTC+9 kidani...@gmail.com:

みならい

unread,
Oct 4, 2023, 5:41:33 AM10/4/23
to QGIS初心者質問グループ
無事にうまく処理することができました。
もう一つだけ質問をさせていただきたいのですが、二つの属性の内容からメッシュを色分けする方法はありますか?
避難所までの距離が遠い、かつ高齢者の人口が多いところほど色の濃いメッシュとしたいのですが...
同じメッシュのレイヤを複製して、透明度を下げ、一つのレイヤごとに属性値で色を塗り、レイヤを重ねる、といった方法くらいしか思い付きません。

2023年10月2日月曜日 22:54:38 UTC+9 みならい:

futoshi kidani

unread,
Oct 4, 2023, 7:09:57 AM10/4/23
to QGIS初心者質問グループ
カテゴリ値による定義にして、値のドロップダウンボックスの右側にあるεのボタンを押すと式ダイアログが開くので、
そこで真ん中のボックスにある変数・関数リストからフィールドを選んで、 「|| 」で2つのフィールドを結合した式を作ります。
ex."距離"  ||  "-" ||  "人口"
これで距離が5で人口が10なら「5-10」というような組み合わせのカテゴリ値が出来ます。

が、この方法は、属性がテキストなどでも応用が利く代わりに、連続値として使うには難しいです。
グラデーションで設定するのを自動でやってほしいので、分類の定義を連続値による定義にして、
距離*人口のような値を作って、これを評価値にすればよいと思います。

フィールド計算機で計算してやるもよし、上記の方法を応用して、
"距離"  *   "人口" または"距離"  +   "人口"
にしてやれば、数値として扱えると思います。
もし、テキスト扱いされてうまくいかないなら、
to_real( "距離"  *   "人口" )
と文字列を数値に変換する関数でくくってやればいいと思います。

こういう変数が2つあるものは、そのまま掛けたり足したりすると、予想したような結果にならないところがあるので
どちらかの値をクラス分けするとか、桁を大きくしておくとか工夫がいるかもです。

2023年10月4日水曜日 18:41:33 UTC+9 みならい:

みならい

unread,
Oct 6, 2023, 5:32:06 AM10/6/23
to QGIS初心者質問グループ
解答ありがとうございます。 桁の調整が難しそうですが、距離×人口で新しい評価値を作ってみようと思います。
2023年10月4日水曜日 20:09:57 UTC+9 kidani...@gmail.com:
Reply all
Reply to author
Forward
0 new messages