QGISでGRASSを使った解析を行う方法

1,018 views
Skip to first unread message

Chi Kobayashi

unread,
May 18, 2021, 2:50:58 AM5/18/21
to QGIS初心者質問グループ
初めて質問させていただきます。

あるレイヤ内のポイントから、別のレイヤ内で1番近いポイントまでの道のりを計算したいです。それぞれのレイヤについて、ポイントは複数あります。

このグループの過去の内容から、GRASSのv.net.distanceがよさそう、というお答えを拝見し、試したのですが、実行しても、「次のレイヤは正しく生成されませんでした。」と表示されてしまい、何も出てきません。
「ネットワーク距離の出力」において、「アルゴリズムの終了後、出力ファイルを開く」のチェックを外すと、エラーは出てきませんが、生成物はありません。

GRASSをよく理解できていないのですが、GRASS内の解析方法を使うにあたり、何か事前準備や手順があるのでしょうか。
または、データの方に問題があるのでしょうか。

windowsでQGIS Desktop  3.16.6 with GRASS 7.8.5を使用しています。
不勉強でお恥ずかしいのですが、よろしくお願いします…

福岡

unread,
May 18, 2021, 4:15:14 AM5/18/21
to QGIS初心者質問グループ
Chi Kobayashi 様

こんにちは

ご投稿なさった内容には詳しくないのですが、GIS実習オープン教材のネットワーク分析で提供されている「network.zip」をダウンロードして「v.net.distance」を試してみました。
試してみた内容としては、新たにポイントのshapeファイルを追加(地物は1つだけ)して「hospital」への経路探索を実行したものです。

GIS実習オープン教材-ネットワーク分析-

私の環境はWindows10Pro 64bitのQGIS3.16.6ですが、問題なく実行されました。

問題が発生する原因を特定することはできませんが、データのCRSについて言及が無かったので、このことについてはチェックなさった方が良いように感じました。

チェックポイントとしては、
1 CRSが投影座標系になっているか。
  「ノードをネットワークにつなぐ閾値(地図の単位)」がデフォルトで「50」になっています。
  これは投影座標系(単位:m)を想定していると思われますので、地理座標(単位:度)だと不都合が生じると思います。
2 各レイヤのCRSは統一されているか
  解析作業を行う場合には、CRSがバラバラですとトラブルが発生することがあります。

これで不具合が解消しない場合には、エラーログを貼り付けることをお勧めします。
エラーログは原因を特定する材料になりますので、上級者の方から適切な助言を受けとる可能性が高まります。

2021年5月18日火曜日 15:50:58 UTC+9 Chi Kobayashi:

Chi Kobayashi

unread,
May 18, 2021, 8:44:48 AM5/18/21
to QGIS初心者質問グループ
福岡様

お返事ありがとうございます。
私も同じファイルをダウンロードして実行してみたのですが、うまくいきませんでした…。
CRSは、EPSG:6669 JGD2011/Japan Plane Rectangular CS I でそろえています。

いじっているうちに一度だけできたようなのですが、うっかりその時の設定を消してしまいまたできなくなってしまいました。
もし解決策をご存じの方がいらっしゃいましたら、ご教授いただけますと幸いです…

以下エラーログです。

QGIS version: 3.16.6-Hannover
QGIS code revision: bfd36fddc9
Qt version: 5.11.2
GDAL version: 3.1.4
GEOS version: 3.8.1-CAPI-1.13.3
PROJ version: Rel. 6.3.2, May 1st, 2020
プロセシングアルゴリズム...
アルゴリズム 'v.net.distance' を開始しています...
入力パラメータ:
{ '-g' : False, '-l' : False, 'GRASS_MIN_AREA_PARAMETER' : 0.0001, 'GRASS_OUTPUT_TYPE_PARAMETER' : 0, 'GRASS_REGION_PARAMETER' : None, 'GRASS_SNAP_TOLERANCE_PARAMETER' : -1, 'GRASS_VECTOR_DSCO' : '', 'GRASS_VECTOR_EXPORT_NOCAT' : False, 'GRASS_VECTOR_LCO' : '', 'arc_backward_column' : '', 'arc_column' : '', 'arc_type' : [0,1], 'flayer' : 'hos.shp|layername=hos', 'from_cats' : '', 'from_where' : '', 'input' : 'pa.shp|layername=pa', 'node_column' : '', 'output' : 'TEMPORARY_OUTPUT', 'threshold' : 50, 'tlayer' : 'hos.shp|layername=hos', 'to_cats' : '', 'to_type' : [0], 'to_where' : '' }

g.region n=0.0 s=0.0 e=0.0 w=0.0
v.net -s input=net60a3b45838b1921 points=vector_60a3b2e318d3d8 output=bufnet60a3b4945329222 operation=connect threshold=50.0 arc_layer=1 node_layer=2
v.net -s input=bufnet60a3b4945329222 points=vector_60a3b2e3aa15b9 output=net60a3b4945329223 operation=connect threshold=50.0 arc_layer=1 node_layer=3
v.db.connect -o map=net60a3b4945329223 table=vector_60a3b2e318d3d8 layer=2
v.db.connect -o map=net60a3b4945329223 table=vector_60a3b2e3aa15b9 layer=3
v.net.distance input=net60a3b4945329223 arc_type="line,boundary" to_type="point" from_layer="2" to_layer="3" output=outputfb1a84327e364e5c98556ac46c082fc3 --overwrite
v.out.ogr type="line" input="outputfb1a84327e364e5c98556ac46c082fc3" output="C:/Users/AppData/Local/Temp/processing_bNnHEH/5a5ce4fd05b24fd8b9d7c118800ff110/output.gpkg" format="GPKG" layer=1 -c --overwrite
Starting GRASS GIS...
警告: マップセットの平行ロックはウィンドウズではサポートされていません。
一時ファイルを削除しています...
Executing <C:\Users\AppData\Local\Temp\processing_bNnHEH\grassdata\grass_batch_job.cmd> ...
C:\Users\Documents>chcp 932 1>NUL
C:\Users\Documents>g.region n=0.0 s=0.0 e=0.0 w=0.0
エラー:北は南より大きくないといけません
C:\Users\Documents>v.net -s input=net60a3b45838b1921 points=vector_60a3b2e318d3d8 output=bufnet60a3b4945329222 operation=connect threshold=50.0 arc_layer=1 node_layer=2
エラー:ベクトルマップ <net60a3b45838b1921> が見つかりません
C:\Users\Documents>v.net -s input=bufnet60a3b4945329222 points=vector_60a3b2e3aa15b9 output=net60a3b4945329223 operation=connect threshold=50.0 arc_layer=1 node_layer=3
エラー:ベクトルマップ <bufnet60a3b4945329222> が見つかりません
C:\Users\Documents>v.db.connect -o map=net60a3b4945329223 table=vector_60a3b2e318d3d8 layer=2
エラー:Vector map <net60a3b4945329223> not found in current mapset
C:\Users\Documents>v.db.connect -o map=net60a3b4945329223 table=vector_60a3b2e3aa15b9 layer=3
エラー:Vector map <net60a3b4945329223> not found in current mapset
C:\Users\Documents>v.net.distance input=net60a3b4945329223 arc_type="line,boundary" to_type="point" from_layer="2" to_layer="3" output=outputfb1a84327e364e5c98556ac46c082fc3 --overwrite
エラー:ベクトルマップ <net60a3b4945329223> が見つかりません
C:\Users\China Kobayashi\Documents>v.out.ogr type="line" input="outputfb1a84327e364e5c98556ac46c082fc3" output="C:/Users/China Kobayashi/AppData/Local/Temp/processing_bNnHEH/5a5ce4fd05b24fd8b9d7c118800ff110/output.gpkg" format="GPKG" layer=1 -c --overwrite
エラー:ベクトルマップ <outputfb1a84327e364e5c98556ac46c082fc3> が見つかりません
C:\Users\China Kobayashi\Documents>exit
Execution of <C:\Users\AppData\Local\Temp\processing_bNnHEH\grassdata\grass_batch_job.cmd> finished.
Cleaning up default sqlite database ...
Cleaning up temporary files...
続行するには何かキーを押してください . . .
実行は2.65秒で完了しました
結果:
{'output': <QgsProcessingOutputLayerDefinition {'sink':TEMPORARY_OUTPUT, 'createOptions': {'fileEncoding': 'System'}}>}

出力レイヤの読み込み
次のレイヤは正しく生成されませんでした。
• C:/Users/AppData/Local/Temp/processing_bNnHEH/5a5ce4fd05b24fd8b9d7c118800ff110/output.gpkg
QGISメインウィンドウの"ログメッセージパネル"をチェックすると、アルゴリズムの実行に関する詳細情報が表示されます。
2021年5月18日火曜日 17:15:14 UTC+9 福岡:

福岡

unread,
May 18, 2021, 7:46:59 PM5/18/21
to QGIS初心者質問グループ
Chi Kobayashi 様

こんにちは

ログから原因を推定するのには力不足ですので、私のできることとして、プロジェクトファイルを含めて試してみたファイルセットを添付いたします。
プロジェクトファイルから読み込んで、正常に動作するか試してみてくださいませんでしょうか?

念のため、手順を書いておきます。

1 添付ファイルをダウンロードして、解凍する。
2 解凍したファイルは2バイト文字がパスに入ると正常動作しないので、デスクトップなどにダイレクトに置く。
3 QGISを立ち上げて、プロジェクトファイルを読み込む。
  私は昨日バージョンを上げたばかりなので、お使いのバージョンとの比較で警告が表示されるかもしれませんが、無視してください。
4 プロセッシングツールの「GRASS-ベクタ(v.*)-v.net.distance」を立ち上げる。
5 設定は次のようにして、実行する。
v.net.distance.png

これで正常動作するのであればファイルセットの関係、動作しないのであればQGIS本体の関係と原因を切り分けることができると思います。

2021年5月18日火曜日 21:44:48 UTC+9 Chi Kobayashi:
network.zip

Chi Kobayashi

unread,
May 19, 2021, 7:36:34 PM5/19/21
to QGIS初心者質問グループ
福岡様

お返事ありがとうございます。
お送りいただいたデータを用いて新規にファイルを立ち上げて実行したところ、正常に走ってくれました!
どうやらデータの問題のようです。

ラインデータがよくないようなのですが、その理由がまだわからないので、また利用の仕方を考えてみようと思います。

考えてくださり、本当にありがとうございました。助かりました。



2021年5月19日水曜日 8:46:59 UTC+9 福岡:

sakuya_izayoi

unread,
May 19, 2021, 9:15:36 PM5/19/21
to QGIS初心者質問グループ
もしかしたら、ラインデータに変なところで交差が発生しているか、座標が重複したりしている可能性もあります。
プロセッシングツールの検索ボックスから
「修正」
で検索をして
「ベクタジオメトリ」→「ジオメトリの修正」
から修正すれば良いかもしれません。

2021年5月20日木曜日 8:36:34 UTC+9 Chi Kobayashi:

福岡

unread,
May 20, 2021, 2:29:45 AM5/20/21
to QGIS初心者質問グループ
皆様へ

こんにちは

たまたま人にQGISを教える機会があって、その際の実習として会社周辺の略図をつくることにしています。
簡単な道路網ですが、仕上がりのサンプルを用意していましたので、これを使って試してみました。
うーん、エラーが発生します。(x_x)

そこでGIS実習オープン教材のデータと見比べ、解析に使うポイントとラインの先頭フィールドを「id」とし、そこに他の地物とダブらない番号を振ったところ、無事実行されました。

もしかすると次の作業を行ってから解析すると、うまく行くかもしれません。

1 フィールド計算を使って、関数「$id」で番号を振る(フィールド名は「id」とする)。
2 プロセッシングツールの「ベクタテーブル - 属性のリファクタリング」で「id」を先頭に移動する。

2021年5月20日木曜日 10:15:36 UTC+9 sakuya_izayoi:

Chi Kobayashi

unread,
May 20, 2021, 5:28:04 AM5/20/21
to QGIS初心者質問グループ
皆様

アドバイスいただき、またお時間も使っていただいてありがとうございます。
自分の方でもひたすらいろいろなものを変えて実験したところ、目的の1つの組み合わせで無事実行できました!!泣
実験の結果、私にはエラーの原因として考えられるものは以下です。

(1)ラインデータの状態
sakuya_izayoi様のアドバイスを拝見して、道路データをいじりました。
ジオメトリデータの修正、さらに、GRASSに含まれているv.clear(交差点など分岐で道を分解する)を行いました。
後者を使うと、道路に分岐があっても1本にカウントされてしまうことがなくなり、変に遠回りになることがなくなるのだと思います。
(2)文字化けの削除または不要な座標の削除?
不注意でお恥ずかしいばかりなのですが、マルチポイントデータの名称に文字化けが含まれてしまっていたようで、不要だったのでID以外の情報をすべて削除しました。その際に、投影座標系でない元のデータの座標もあったので一緒に消してしまいました。
⇒福岡様が書いていらしたIDのお話と合わせて考慮したらよいのかもしれません!

また、閾値を超えてラインデータから離れているポイントは無視されるようなので、これは考えて設定しなければなと思いました。

以上を踏まえても、いまだにエラーを吐くデータがあり、なかなかかなわないなあと思っています笑
とりあえず、最も欲しかったものが出せたのは良かったです…非常に便利なツールです。
本当に助かりました。ありがとうございました。


2021年5月20日木曜日 15:29:45 UTC+9 福岡:
Reply all
Reply to author
Forward
0 new messages