仕事/実習/講義でネットワーク分析を取り上げる際によく使わせてもらっているGRASS GIS の v.net.iso コマンドですが、これの移動コストの設定方法について質問が来たので備忘録として書いておきます。
しかもQGISしばりでとのことだったのですが、3.4xでは processing の処理がコケるので2.18xでやることにします。
そんなのGRASSでやればいいんですよ!
v.net.iso のシンプルな使い方はこちらを見てみてください(資料が雑でごめんなさい)
v.net.iso の処理はデフォルトではネットワークデータであるポリラインの長さがコストとして取り扱われます。
たとえば逃げ地図のように「その距離を何分で歩けるか」ということを地図化したい場合など、距離ではない単位でコストを表現したい場合がありますよね(とはいえこの場合も距離は重要なコスト因子ですが)。
たとえばこんな単純なケースを考えてみます…とりあえずv.net.isoのコストとは、がわかればいいので地形要因とかはいったん置いときましょう。
課題:自宅から0.5時間(30分)/1時間(60分)/1.5時間(90分)で到達できる範囲をそれぞれ出力したい
設定:徒歩(時速4km) と ジョギング(時速8km)の2パターンで算出したい
これはポリラインデータに距離がm単位で格納されているlength列があるとして walkcost と jogcost 列を作ったうえで
walk_cost = length/4000
jog_cost = length/8000
を算出してこれをコストとして用いればよいです。もちろんジオメトリから直接算出してもよいです。
これはフィールド計算機で処理できます。
つまり下図のように各ポリラインフィーチャに「通過所要時間(単位:時間)」が属性値として格納されることになります。
そのうえで v.net.iso処理 を行う際には
processing で v.net.iso を選択し
ネットワークデータと自宅のポイントデータを入力したうえで
先ほどの walk_cost または jog_cost 列を
Arc forward/both direction(s) cost column (number)
に指定してやり
cost for isoline を
0.5,1.0,1.5
と求めたい時間で入力してやればよいです。
こんなかんじ。
すると徒歩の到達圏とジョギングの到達圏が求められますね。
もちろん各フィーチャ毎に制限速度や勾配などの移動コストに影響する属性があれば
それらをコストに変換する計算式を作成して新しいコスト列を作ってやればよいわけですね。
….またまだるっこしい説明をしてしまいましたが、まあよいです。
ではでは。