ネットワーク内の回線を接続するには?


15

線のシェイプファイルと別のポリゴンがあります。2本以上のラインがポリゴンと交差する場合、それらを接続(スナップ)する必要がありますが、手動デジタル化中にこれが発生しない場合があります。これらすべてのエラーを見つけて修正する必要があります。私v.cleanはGRASS GISから使用し、多くの頂点を自動的にスナップしましたが、それは良かったですが、それらの切断された線のいくつかは私が与えた許容範囲から離れており、許容範囲を大きくしすぎると他のタイプのエラーが発生し始めます。

ここに画像の説明を入力してください

何か案は?


1
ポリラインエンドポイントをポリゴンに空間的に結合し、ポリゴンごとにカウントを集計します。複数の結合されたエンドポイントを含む各ポリゴンについて、それらのエンドポイントの重心からエンドポイント自体(「星」)に放射状に広がるセグメントで構成されるポリラインを作成します。星を元のポリラインと結合します。結果をクリーンアップして、発生する自己交差を削除します。これらの各ステップは、完全な機能を備えたGISによってサポートされています(自動化できます)。私はQGISまたはGRASSの詳細に詳しくないため、このソリューションはコメントとしてのみ提供します。
whuber

しかし、すべての線がポリゴンの外側で終わることがあります
...-vascobnunes

1
これらの線は何を表していますか?川の場合、名前やストリームの順序などの追加情報でエンコードされていますか?たとえば、2つの1次ストリームが2次ストリームに流れ込む必要があるため、ネットワークは(河川ネットワークなど)に向けられていますか。検索許容度を上げて危険なスナップの問題を克服するために、スナッププロセスの背後に何らかの知性を置きたいと思うかもしれないと思います。
ホーンバイド

1
あなたのコメントは質問と矛盾しているようです。質問、共通のポリゴン内にある頂点をスナップしたいと言っているようです。頂点がポリゴンの外側にある場合、どのように処理するかの基準を指定しません!それでは、ポリゴンとポリラインの関係は正確には何ですか?
whuber

1
私はwhuberに同意します。おそらくあなたは質問を明確にする必要があります。多角形の「内側」にあるラインだけでなく、「閉じている」が、「内側」にあるが適切に結合されているラインを除外したいように聞こえますか?
ダレンは対処

回答:


7

私の問題の理解は次のとおりです。

ポリラインの終点がポリゴンと交差する場合、同じポリゴンと交差するすべての追加のポリラインの終点に(頂点を追加または調整して)ポリラインを接続する必要があります。

一部のポリラインエンドポイントは、アンダーシュートであるためポリゴンと交差しませんが、上記のように接続する必要があります。

この答えはすでに与えられたものに基づいていますが、すべてのQGISコマンドを知っているわけではないので完全ではありません-他の誰かがこれに追加することができますか?

  1. 各ポリラインについて、エンドポイント座標を抽出し(ベクトル>ジオメトリツール>ノード抽出して整理)、ポリゴン内にあるかどうかを計算します(ベクトル>リサーチツール>場所で選択)。

  2. ポリゴン内にあるポリラインエンドポイントの場合、ポリラインの端をポリゴンの中心まで延長します(ベクター>ジオメトリツール>ポリゴンセントロイドを使用して、ポリゴンの中心を抽出します。ポイントとしてポリラインの頂点を追加し、ポイントからパスへのプラグインを使用して変更されたポリラインを再構築する前に、適切な番号を付けて頂点を追加します)

    一部またはすべてのラインが正しく接続されている状況があるかもしれないと言いますが、これらの状況では(一致するポリラインの端点で識別可能)、延長するポイントとしてポリゴンの重心の代わりに一致する端点の位置を使用することを選択できますそのポリゴンの追加の未接続ポリライン。

  3. ポリラインの終点がポリゴンの外側にある場合、ポリラインの端を最も近いポリゴンの中心まで延長します。繰り返しますが、GRASS v.distanceモジュールがトリックを実行するように見えますが、最も近いポリゴンを計算するかどうかはわかりません。


それが問題解決の合理的根拠です。Alexgleithからの回答で、私もそのようなことをしました。しかし、「ポリラインのその端を最も近いポリゴンの中心まで延長する」という操作にこだわっていました。質問は今、どうすればいいですか?v.clean.snapをポリゴンの重心に使用すると、終点ではない頂点が移動します
...-vascobnunes

1つのアプローチは、ポリラインを説明されているようにポイントに変換し、必要に応じて、既存の開始ポイントまたは終了ポイントの位置に応じて、指定されたラインの開始または終了に追加ポイントを追加することです。追加されるポイントの位置はポリゴンの重心であり、ポイントはポリラインの開始点または終了点に配置するために、-1または1000000の頂点シーケンス番号で属性付けられます。これにより、Points to Pathツールを使用してポリラインを再構築できるようになります
アンディハーフット

2

いくつかのカスタムアルゴリズムを使用してそれを行うことができると思います...どのように実装したいかを確認しますが、動作すると思います。

各線に対して、各終点に対して、終点の頂点に対して多角形の点を作成し、それを多角形にリンクします。

次に、各ポリゴンについて、複数のラインの終点がリンクされている場合、それらをすべて平均座標、またはおそらくポリゴンの重心にマージ(移動)します。

それは非常に簡単です。ただし、標準の演算子では使用できません。ArcGISでコーディングに数日かかると思います。

別のメモ、投稿した画像では、線の1つが多角形の外側にあります...各端点の頂点に最も近い頂点を見つけるだけで、これをより簡単に処理できます。必要に応じて、頂点が一方向にのみスナップされるようにします)、頂点の平均位置に移動できます。


1

興味深い問題!スナップを自動的に実行する方法を考えることはできませんが、少なくとも手動で修正する必要がある領域を特定する手順は次のとおりです。

  • ラインレイヤーに新しい列を追加し、すべてのフィーチャに対して「1」に設定します。
  • [ベクター]> [位置による属性の結合]で、ターゲットレイヤーをポリゴンレイヤーに設定し、ラインレイヤーを結合レイヤーとして設定します。次に、「交差する機能の概要を取得」を選択し、「合計」をクリックします。出力ファイルの場所を指定し、「OK」。
  • 結果のポリゴンファイルは元のポリゴンレイヤーになりますが、いくつかの追加フィールドがあります。SUMフィールドは必要なものです。2の場合、ズームして機能を手動でスナップできることを意味します。

状況(機能の数、この状況にある数とそうでない数など)によっては、これにより時間を節約できます。

編集:合計2のポリゴンを使用してラインレイヤーのサブセットを作成し、他のフィーチャを変更しないように、許容値が大きいポリゴンでクリーンアップを実行することもできます。


私はすでにそのようなことをしていました。さらに、v.netを使用してラインのノードを取得し、ノードに一致するポリゴンの空間選択を行いました。これを使用して修正する多くのエラーを見つけましたが、まだ3つの大きな問題があります。2)場合によっては、線またはノードがポリゴンに「触れない」原因となるすべてのエラーが表示されません。3)エラーではないエラーが表示されます。2つの回線が適切に接続されている場合、それらも選択されます。
vascobnunes

0

エンドポイントを取得したら、ポリゴンの重心を施設として、近くのラインのエンドポイントをターゲットとして、スパイダーダイアグラムを作成します。スパイダーダイアグラム分析を実行すると、各ポリラインのセグメントが作成されます。

これは、ポリゴンの外側で終了する場合でも機能します。QGISでこれを行う方法はわかりませんが、申し訳ありませんが、私はよく知っているESRIの製品でこれを行います。それは、whuberが最初の返信で「スター」を構築するよう提案したときに理解したことです。

QGISでこのような分析を実行する方法を知っている人がここにいると確信しています


4
GIS Stack Exchangeへようこそ!あなたの答えは、投票者や疑惑者を引き付けていることに気づきました。これは、質問者が使用しているテクノロジー(GRASS / QGIS)の代替案を提案したためです。私の推奨事項は、回答ではなくコメントなどの提案を浮かび上がらせ、質問者が興味を持っていると思われる場合は、情報を回答に転送することです。
PolyGeo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.