ArcMapでラインシェープファイルの「接続」を確認していますか?


9

道路ネットワークを表すために使用されるArcMapのラインシェープファイルを継承しました。問題は、道路網がかなり大きく、私が次のことを行うことができないことです。

  1. 各ライン(道路セグメント)の端がエッジ、頂点、または別のライン(道路セグメント)の端に「接続」されているかどうかを通知します。そして
  2. 道路ネットワーク全体が「接続されている」かどうか、つまり、道路ネットワーク上の任意のポイントから道路ネットワーク上の他のポイントまでのルートを追跡できますか?

ArcMapでこれを実現する方法はありますか?つまり、他のラインセグメントに接続していないラインセグメントを強調表示できる機能、または上記の2つの質問に答えることができる同様の機能はありますか?

回答:


14

はい、でもそうです。ArcGisには、ノード(ノード)で接続されているアーク(ライン)の数をユーザーが確認できるラインノードトポロジがなくなりました。

確認することは1つのことですが、代わりに修正する方法はありますか?ArcMapでフィーチャクラスを開き、平面化ラインを使用すると(許容誤差を与える)、ラインはスナップされ、交差点で分割されます-多くの作業を節約できます。ラインを分割したくない場合は、Integrateツールを検討してください。ただし、非常に小さな許容値を使用するように注意してください。これにより、端が一緒にスナップされますが、ラインも一緒にスナップされます。Integrateを使用する前にバックアップ保存してください。データが破壊される可能性があります。

ここで、切断された端を見つけるには、フィーチャ頂点からポイントを使用してエンドポイントを取得し、イベント収集して、存在するエンドポイントの数を含むフィーチャクラスを提供します。この段階では、1のイベントが疑われるため、分離する必要があります。これらのうち。

接続する必要があるかどうかを確認するには、次のタスクとして、元の行に対してカウント1のイベントを使用して、(適切な許容範囲で)ニアテーブルの生成最も近い= ALLのオプションを使用し、次に要約統計を使用して、各ポイントについて、ケースタイプとしてIN_FIDを使用し、統計タイプが「COUNT」の統計フィールドとしてNEAR_FIDを使用するレコードの数。

テーブル選択を使用して、0より大きい距離を持つレコードをニアテーブルから簡単に抽出できるようにします。各イベントはそれを生成したラインを検出しますが、距離は0になります。別のライン(頂点)に適切に接続されている場合、距離も0になるため、ニアテーブルにレコードが残っているイベントはすべておそらくばらばらですが、これらは手動で表示する必要があります。


ありがとう。明日仕事に着いたら、これらの機能をチェックして報告します。
derNincompoop 2014

3
「フィーチャの頂点からポイント」には、ダングルポイントを出力するオプションがあります。これでワークフローが簡単になると思います。
クレウィス2014

すごい@klewis、それはいつ現れたの?それは確かに9.3にはありませんでした。よくわかりました!
Michael Stimson

4

別のアプローチは、MAPトポロジを使用することです。ぶら下がっているエッジを特定するVBAコードを少し叩きました。ネットワークの予期されたではなく、ネットワーク内にぶら下がっているエッジがある場合は、切断が必要です。

ぶら下がりエッジを選択する例

このコードは、VBAがインストールされ、編集モードになっていて、ポリラインレイヤーをマップトポロジに追加していることに依存しています。

Public Sub SelectDanglingPolylines()
 ' Description: Takes a polyline dataset and select all dangling polylines.
 '
 ' Requirements: You need to be in edit mode and have added the layer to a MAP TOPOLOGY,
 ' also polyline layer must be first in TOC.
 '
 ' Limitations: Large datasets take a long time to build the cache and may even fail.
 '
 ' Author: Duncan Hornby
 ' Created: 11/12/2011
 '

 ' Get map and then first layer, must be of polyline type
 Dim pMXDocument As IMxDocument
 Set pMXDocument = ThisDocument
 Dim pMap As IMap
 Set pMap = pMXDocument.FocusMap
 Dim pLayer As ILayer
 Set pLayer = pMap.Layer(0)
 Dim pFeatureLayer As IFeatureLayer
 Set pFeatureLayer = pLayer
 Dim pFeatureClass As IFeatureClass
 Set pFeatureClass = pFeatureLayer.FeatureClass
 If pFeatureClass.ShapeType <> esriGeometryPolyline Then
     MsgBox "This code works only with polylines!", vbExclamation, "Wrong data type at layer 0"
     Exit Sub
 End If

 ' Get editor and topology extension
 Dim pEditor As IEditor
 Dim pID As New UID
 Dim pTopologyExtension As ITopologyExtension
 Dim pTEID As New UID
 pID = "esriEditor.editor"
 Set pEditor = Application.FindExtensionByCLSID(pID)
 pTEID = "esriEditorExt.TopologyExtension"
 Set pTopologyExtension = Application.FindExtensionByCLSID(pTEID)
 If pTopologyExtension.CurrentTopology Is Nothing Then Exit Sub

 ' Get a MAP topology not a geodatabase topology
 Dim pMapTopology As IMapTopology
 If TypeOf pTopologyExtension.CurrentTopology Is IMapTopology Then
     Set pMapTopology = pTopologyExtension.MapTopology
 Else
     ' Not a Map Topology
     Exit Sub
 End If

 ' This is the colection that FID are added to
 Dim aColl As New Collection

 ' Build cache
 Application.StatusBar.Message(0) = "Building MAP TOPOLOGY cache, this can take a long time on large datasets..."
 DoEvents
 Dim pGeoDataset As IGeoDataset
 Set pGeoDataset = pFeatureClass
 Dim pEnvelope As IEnvelope
 Set pEnvelope = pGeoDataset.Extent
 pMapTopology.Cache.Build pEnvelope, False

 ' Identify dangling nodes and add polyline FID to collection
 Application.StatusBar.Message(0) = "Identifying dangling nodes..."
 DoEvents
 Dim pEnumTopologyParent As IEnumTopologyParent
 Dim pTopologyNode As ITopologyNode
 Dim pEnumTopologyNode As IEnumTopologyNode
 Set pEnumTopologyNode = pMapTopology.Cache.Nodes
 pEnumTopologyNode.Reset
 Set pTopologyNode = pEnumTopologyNode.Next
 While Not pTopologyNode Is Nothing
 If pTopologyNode.Degree = 1 Then
     ' As this has 1 degree it has only 1 parent polyline
     Set pEnumTopologyParent = pTopologyNode.Parents
     pEnumTopologyParent.Reset
     aColl.Add (pEnumTopologyParent.Next.m_FID) 'Adds polyline FID to collection
 End If
 Set pTopologyNode = pEnumTopologyNode.Next
 Wend

 ' Use collection to select polylines
 Application.StatusBar.Message(0) = "Selecting polylines..."
 DoEvents
 Dim pFeatureSelection As IFeatureSelection
 Set pFeatureSelection = pFeatureLayer
 Dim X As Variant
 For Each X In aColl
     pFeatureSelection.SelectionSet.Add CLng(X)
 Next
 pMXDocument.ActiveView.PartialRefresh esriViewGeoSelection, Nothing, pEnvelope
 Application.StatusBar.Message(0) = ""
 DoEvents
End Sub

私はそのコードが好きです。よろしければ、その一部をコピーします。この方法で行うことの利点は、ライブであり、エラーが修正されると消えてしまうことです。悪い点は、ラインがぶら下がっている場合に表示されます-一端が接続されているか、ラインが完全に切断されているか。コードを変更して、ノードの「価数」(接続されている回線の数)またはダングリングノードのみ(表示されるのは私のワークステーションです)を表示することをお勧めします...それは素晴らしいことですが、OP VBA / VB.net機能があります。
Michael Stimson、2014

1
完全に切断されたラインを見つけるために、コードを微調整し、両端が1の価数を持つエッジを取得するか、片方の端が1でもう一方が2のようなバリエーションは、ネットワークに依存すると思いますか?
Hornbydd 14

2

これは古い投稿ですが、最も簡単な解決策は次のとおりです。

  1. ポリラインフィーチャをディゾルブします
  2. [ダングルでポイントにフィーチャ頂点を使用]オプション
  3. 空間位置で結合元のポリラインフィーチャを結果のポイントレイヤーに結合します。「Intersected by it」オプションを使用してください。

結果には、レイヤーの各行に「カウント」フィールドがあります。Countが1より大きい場合、ラインは残りのラインに「接続」されていません。

概念的には、ここでのステ​​ップ2では、1つの接続されたエッジを持つ頂点にポイントを作成します(1本の線が「入る」、0が「出る」)。「接続された」ネットワーク内の各ラインには最大1つのそのような頂点があるため、1を超えるラインはネットワークの一部ではなく、したがって「接続された」ものではありません。


この方法では、多くの誤検知が発生します。道路がT字路に通じているとします。Tの上部には2つのぶら下がり頂点があります。フィーチャを2つカウントしてから、再び道路ネットワークと交差させる場合、接触していないのはアイランドです。
2017

実際、私が上で書いた2番目の交差点では、孤立した道路しか見つかりません。ネットワークに複数の部分があるかどうかはわかりません
2017

1

これは、友人と協力して、Model BuilderとGephiを使用して思いついた方法です。ステップ1リンク/エッジのテーブルを作成するArcModel(必要に応じて、すべてのラインにノードを追加します)ステップ2リンク/エッジのGephiインポートとコンポーネントIDの追加ステップ3 ArcModelがコンポーネントIDを元のラインに追加します

Step1スクリーンショット ステップ1すべての入力フィーチャを受け取り、それらを交差点で分割して、ネットワークノードが存在することを確認し、Gephiにインポートするテーブルを作成します。手順は次のとおりです。プロセス:フィーチャーからライン(複数の入力を取得できます)プロセス:マルチパートからシングルパートプロセス:ジオメトリの修復プロセス:開始と終了の座標の追加(ジオメトリ属性の追加)プロセス:フィールド「ソース」の追加プロセス:フィールド「ターゲット」の追加プロセス:「ソース」を計算(startXおよびstartYとして)プロセス:「ターゲット」を計算(終了XおよびendYとして)プロセス:フィールドを削除(混乱を避けるために余分なフィールドをクリーンアップ)プロセス:GDBテーブルからCSV

Step2Gephi_Screenshot ステップ2 Gephiプロセス(無料ダウンロード)-ソースおよびターゲットの名前付きノードフィールドをリンクとしてCSV出力をインポート-計算コンポーネントを無向として実行(統計ツールの下)-ノードのData LaboratoryからCSVをエクスポート(ノードIDおよびコンポーネントIDを含む)

ステップ3:Gephi出力を取得し、コンポーネント/ネットワーク属性を元の行に追加します。コンポーネントでシンボル化

この後のクリーンアップは、回線に沿って切断が発生している場所、および切断が有効な現実世界の分離なのか単なるデータの欠陥なのかを調べる手動プロセスになる可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.