質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
QGIS

QGISは、オープンソースの地理情報システムです。無料でありながら、GISに必要な地理空間情報の作成・編集・可視化・解析といった多くの機能を備えています。さらに、無料のプラグインで機能追加を行うことも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

2327閲覧

QGIS上でnetworkxを使い最短経路を取得したい

mochiii

総合スコア0

QGIS

QGISは、オープンソースの地理情報システムです。無料でありながら、GISに必要な地理空間情報の作成・編集・可視化・解析といった多くの機能を備えています。さらに、無料のプラグインで機能追加を行うことも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/08/25 00:20

編集2020/08/25 01:18

前提・実現したいこと

QGIS,Pythonともに初心者です。
QGISにて、nx.has_pathを用いて最短距離の検索を試みております。

エラーメッセージ

Traceback (most recent call last): File "C:\PROGRA~1\QGIS3~1.14\apps\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<string>", line 22, in <module> File "C:\PROGRA~1\QGIS3~1.14\apps\Python37\lib\site-packages\networkx\algorithms\shortest_paths\generic.py", line 40, in has_path nx.shortest_path(G, source, target) File "C:\PROGRA~1\QGIS3~1.14\apps\Python37\lib\site-packages\networkx\algorithms\shortest_paths\generic.py", line 170, in shortest_path paths = nx.bidirectional_shortest_path(G, source, target) File "C:\PROGRA~1\QGIS3~1.14\apps\Python37\lib\site-packages\networkx\algorithms\shortest_paths\unweighted.py", line 223, in bidirectional_shortest_path raise nx.NodeNotFound(msg.format(source, target)) networkx.exception.NodeNotFound: Either source [4000526.346593578, 305276.0959658007, 1413147649, 138.836068, 36.129911] or target [4000423.8004078707, 305864.23483348615, 1413147088, 138.842625, 36.129105] is not in G

該当のソースコード

Python

1import networkx as nx 2 3layer = iface.activeLayer() ###現在のレイヤを取得 4features = layer.getFeatures()  ###レイヤ内の地物を取得 5 6G = nx.read_shp(str(iface.mapCanvas().currentLayer().source())) ##レイヤをグラフとして取得 7 8for f in features: 9 atrib = f.attributes() 10 if atrib[2] == 4585630021: ###始点ノードを取得 11 a = f.attributes() 12 if atrib[2] == 2815748288: ###終点ノードを取得 13 b = f.attributes() 14 15print(str(a)) 16print(str(b)) 17 18Shotest_Route = nx.has_path(G, source = a, target = b)

試したこと

現在使用しているQGISのグラフは図のようにノードとエッジに分かれており、これが原因だと考えてこれらを合成しようとベクタレイヤのマージを行いましたが、データ形式の違いからか合成できません。
次に両レイヤの属性の空間結合を試しましたが結合後のレイヤにノードが表示されません。
イメージ説明

ソースコード3行目のレイヤの取得にはエッジのレイヤを選択しております(ノードのレイヤを取得しても同じエラーでした)。

補足情報(FW/ツールのバージョンなど)

QGIS3.14
python3.7.0

QGIS上でコードエディタを開いてPythonを書き込んでおります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問