ArcMap에서 선 모양 파일의 "연결성"을 확인하고 있습니까?


9

도로 네트워크를 나타내는 데 사용되는 ArcMap에서 선 모양 파일을 상속했습니다. 문제는 도로 네트워크가 상당히 커서 다음과 같은 일이 불가능하다는 것입니다.

  1. 각 선의 끝 (도로 세그먼트)이 가장자리, 정점 또는 다른 선의 끝 (도로 세그먼트)에 "연결되어 있는지"확인하십시오. 과
  2. 전체 도로 네트워크가 "연결"되어 있는지 확인하십시오. 즉, 도로 네트워크의 어떤 지점에서 도로 네트워크의 다른 지점까지의 경로를 추적 할 수 있습니까?

ArcMap에서 이것을 수행하는 방법이 있습니까? 즉, 다른 선분에 연결되지 않은 선분 또는 위의 두 질문에 대답 할 수있는 유사한 선분을 강조 할 수있는 기능이 있습니까?

답변:


14

예, 그러나 일종의. ArcGis는 더 이상 라인 노드 토폴로지를 가지지 않으므로 사용자는 끝 (노드)에 몇 개의 아크 (라인)가 연결되어 있는지 알 수 있습니다.

확인하는 것은 한 가지이지만 대신 고치는 방법은 무엇입니까? ArcMap에서 피처 클래스를 연 다음 평면화 선 (공차 부여)을 사용하면 선이 교차하여 스냅되어 분할되므로 많은 작업이 절약됩니다. 선을 분할하지 않으려면 도구 통합 을 고려 하되 매우 작은 공차를 사용하도록주의하십시오. 끝이 서로 스냅되지만 선이 서로 스냅되도록 할 수 있습니다. Integrate를 사용하기 전에 데이터를 파괴 할 수 있으므로 백업보관 하십시오!

이제 연결이 끊긴 끝점을 찾으려면 Feature Vertices to Points 를 사용 하여 끝점을 얻은 다음 이벤트수집 하여 존재하는 끝점 수를 가진 기능 클래스를 제공합니다.이 단계에서 1의 이벤트는 의심되므로 분리해야합니다. 이것들.

이 경우 해결하기 위해 해야 연결하는 다음 작업입니다, 사용 의 가까이에 테이블을 생성 (적절한 허용 오차 다시)과의 옵션 가까운 = ALL 다음 사용하여 원래의 라인에 대한 하나의 수와 함께 이벤트를 사용하여 요약 통계를 찾을 수 있습니다 각 포인트에 대해 통계 유형이 "COUNT"인 IN_FID를 케이스 필드로 사용하고 NEAR_FID를 통계 필드로 사용하는 레코드 수.

근거리 테이블에서 테이블 선택을 사용하여 거리가 0보다 큰 레코드를 쉽게 추출 할 수 있습니다 . 각 이벤트는 그것을 생성 한 라인을 찾을 수 있지만 거리는 0이 될 것입니다. 정점에서 다른 라인에 올바르게 연결되면 거리도 0이되므로 가까운 테이블에 레코드가 남아있는 이벤트는 분리 될 수 있지만 수동으로보아야합니다.


감사. 내일 출근해서 다시보고하면이 기능을 확인하겠습니다.
derNincompoop

3
"피처 정점 대 점"에는 매달려 포인트를 출력하는 옵션이 있습니다. 이것이 워크 플로우를 단순화 할 것이라고 생각합니다.
klewis

와우 @klewis, 언제 나타 났나요? 9.3에는 없었습니다. 잘 발견되었습니다!
Michael Stimson 21

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

마음에 들지 않으면 그 코드를 좋아합니다. 이 방법으로 그 일을의 장점은 점입니다 라이브 한쪽 끝을 연결 또는 라인이 완전히 분리되어 있는지 여부 - 오류가 수정 될 때 그들이 나쁜 부분은 선이 표시됩니다 다음 매달려되는 경우 퀘스 트 로그에서 사라질 것이다. 코드를 변경하여 노드 "valence"(연결된 라인 수) 또는 매달려있는 노드 (나의 워크 스테이션이 다시 나옵니다!)를 표시하는 것이 좋습니다. VBA / VB.net 기능이 있습니다.
Michael Stimson

1
하나는 코드를 조정하고 양쪽 끝이 1 인 가장자리를 가져와 완전히 분리 된 줄을 찾거나 다른 쪽 끝의 1과 2와 같은 변형을 찾을 수있는 네트워크에 달려 있습니까?
Hornbydd

2

이것은 오래된 게시물이지만 가장 간단한 해결책은 다음과 같습니다.

  1. 폴리 라인 피처 분해
  2. 매달려있는 점에 피처 정점 사용 옵션
  3. 공간 별 결합 원래 폴리 라인 피쳐를 결과 점 레이어에 배치합니다. "Intersected by it"옵션을 사용하십시오.

결과는 레이어의 각 줄에 대해 "수"필드를 갖게됩니다. Count가 1보다 크면 라인이 나머지 라인에 "연결되지"않습니다.

개념적으로 : 여기서 2 단계는 연결된 단일 모서리 (한 줄 "가는", 0은 "나가는")로 정점에 점을 만듭니다. "연결된"네트워크 내의 각 라인은 최대 1 개의 정점을 가지므로, 1보다 많은 라인은 네트워크의 일부가 아니므로 "연결된"것이 아닙니다.


이 방법은 많은 오탐 (false positive)을 생성합니다. 도로가 T 교차점으로 연결된다고 가정 해보십시오. T의 상단 부분에는 두 개의 매달린 정점이 있습니다. 개수가 2 개인 지형지 물을 가져다가 도로 네트워크와 다시 교차하면 섬에 닿지 않는 지형지 물입니다.
woot

사실, 위에서 쓴 두 번째 교차점은 고립 된 도로 만 찾습니다. 네트워크에 여러 부분이
있는지는

1

다음은 Model Builder와 Gephi를 사용하여 친구의 도움으로 얻은 방법입니다. 1 단계 ArcModel 링크 / 에지 테이블 생성 (원하는 경우 모든 라인에 노드 추가) 2 단계 Gephi 링크 / 에지 가져 오기 후 컴포넌트 ID 추가 3 단계 ArcModel은 컴포넌트 ID를 원래 라인에 다시 추가

1 단계 1 단계 모든 입력 기능을 교차점에서 분리하여 네트워크 노드가 있는지 확인하고 Gephi로 가져올 테이블을 만듭니다. 프로세스 : 피쳐 투 라인 (여러 입력 가능) 프로세스 : 멀티 파트에서 싱글 파트로 프로세스 : 지오메트리 복구 : 시작 끝 좌표 추가 (지오메트리 속성 추가) 프로세스 : 필드 "소스"추가 프로세스 : 필드 "대상"추가 프로세스 : "소스"계산 (startX 및 startY) 프로세스 : "대상"계산 (끝 X 및 endY) 프로세스 : 필드 삭제 (혼란을 피하기 위해 추가 필드 정리) 프로세스 : GDB 테이블을 CSV로

Step2Gephi_ 스크린 샷 2 단계 Gephi 프로세스 (무료 다운로드)-소스 및 대상으로 명명 된 노드 필드를 링크로 사용하여 CSV 출력 가져 오기-계산 된 구성 요소를 경로가 지정되지 않은 상태로 실행 (통계 도구에서)-노드에 대한 데이터 연구소에서 CSV 내보내기 (노드 ID 및 구성 요소 ID 포함)

3 단계 : Gephi 출력을 가져 와서 원래 행에 구성 요소 / 네트워크 속성 추가 프로세스 : 테이블-테이블 (지난 데이터베이스에 고유 한 objectID를 구성하기 위해 가장 최신 Gephi 출력) 프로세스 : 결합 필드 (구성 요소 번호를 행에 채우기 위해 Gephi 출력과 결합 된 소스 노드 값) 구성 요소로 상징

이 시점 이후의 정리는 회선을 따라 단절이 발생하는 위치와 단절이 유효한 실제 분리인지 아니면 데이터 결함인지 검사하는 수동 프로세스 일 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.