กำลังตรวจสอบ "connectness '' ของ line shapefile ใน ArcMap หรือไม่


9

ฉันรับสืบทอดรูปร่างไฟล์บรรทัดใน ArcMap ที่ใช้เพื่อแสดงเครือข่ายถนน ปัญหาคือเครือข่ายถนนค่อนข้างใหญ่และเป็นไปไม่ได้ที่ฉันจะ:

  1. บอกได้ว่าจุดสิ้นสุดของแต่ละบรรทัด (ส่วนถนน) เป็น "เชื่อมต่อ" กับขอบจุดสุดยอดหรือจุดสิ้นสุดของอีกบรรทัดหนึ่ง (ส่วนถนน) และ
  2. บอกว่าเครือข่ายถนนทั้งหมดเป็น "เชื่อมต่อ" - เช่นฉันสามารถติดตามเส้นทางจากจุดใด ๆ ในเครือข่ายถนนไปยังจุดอื่น ๆ ในเครือข่ายถนนได้หรือไม่

มีวิธีที่จะทำให้สำเร็จใน ArcMap หรือไม่? นั่นคือมีฟังก์ชั่นที่จะทำให้ฉันสามารถเน้นส่วนของเส้นที่ไม่เชื่อมต่อกับส่วนของเส้นตรงอื่น ๆ หรือสิ่งที่คล้ายกันที่จะช่วยให้ฉันตอบคำถามสองข้อข้างต้นได้หรือไม่?

คำตอบ:


14

ใช่ แต่การจัดเรียงของ ArcGis ไม่มีโทโพโลยีของ line-node ที่ทำให้ผู้ใช้สามารถบอกจำนวนอาร์ค (บรรทัด) ที่เชื่อมต่อที่ปลาย (โหนด) ของพวกเขา

เพื่อตรวจสอบเป็นสิ่งหนึ่ง แต่จะแก้ไขแทนได้อย่างไร หากคุณเปิดคลาสคุณลักษณะใน ArcMap จากนั้นใช้บรรทัดภาพถ่าย (ให้ความทนทาน) และเส้นจะถูกหักและแยกที่จุดตัด - ช่วยประหยัดงานได้มาก หากคุณไม่ต้องการแยกบรรทัดให้พิจารณาเครื่องมือรวมแต่ต้องระมัดระวังในการใช้ความอดทนน้อยมากมันจะรวมปลายทั้งสองเข้าด้วยกัน แต่สามารถทำให้ทั้งสองเส้นรวมกันได้ ก่อนที่จะใช้งานรวมทำการสำรองข้อมูลเพราะมันสามารถทำลายข้อมูลของคุณได้!

ตอนนี้การค้นหาจุดเชื่อมต่อสิ้นสุดใช้จุดยอดคุณลักษณะเพื่อรับจุดสิ้นสุดแล้วรวบรวมกิจกรรมซึ่งจะให้คลาสคุณลักษณะพร้อมจำนวนจุดสิ้นสุดที่มีอยู่ในขั้นตอนนี้เหตุการณ์ใด ๆ ที่ 1 เป็นสิ่งต้องสงสัยดังนั้นคุณจะต้องแยกจากกัน เหล่านี้ออก

ที่จะทำงานออกว่ามันควรจะเชื่อมต่อเป็นงานต่อไปใช้สร้างใกล้โต๊ะ (อีกครั้งกับความอดทนที่เหมาะสม) และตัวเลือกของที่อยู่ใกล้ = ทั้งหมดโดยใช้เหตุการณ์ที่เกิดขึ้นกับการนับ 1 กับสายเดิมแล้วใช้สถิติสรุปคุณสามารถหาได้ สำหรับแต่ละจุดจะนับจำนวนระเบียนโดยใช้ IN_FID เป็นฟิลด์เคสและ NEAR_FID เป็นฟิลด์สถิติที่มีสถิติเป็นประเภท "COUNT"

เพื่อให้เช่นสารสกัดจากตารางง่ายใกล้ระเบียนที่มีมากขึ้นในระยะที่มากกว่า 0 โดยใช้ตารางที่เลือก แต่ละเหตุการณ์จะค้นหาบรรทัดที่สร้างขึ้น แต่ระยะทางจะเป็น 0 หากแนบอย่างถูกต้องกับอีกบรรทัดหนึ่ง (ที่จุดสุดยอด) ระยะทางก็จะเป็น 0 ดังนั้นตอนนี้เหตุการณ์ใด ๆ ที่มีระเบียนที่เหลืออยู่ในตารางใกล้คือ อาจแยกจากกัน แต่สิ่งเหล่านี้จะต้องดูด้วยตนเอง


ขอบคุณ ฉันจะตรวจสอบฟังก์ชั่นเหล่านี้เมื่อฉันไปทำงานในวันพรุ่งนี้และรายงานกลับ
derNincompoop

3
"Feature Vertice to Point" มีตัวเลือกในการส่งออกห้อยคะแนน ฉันคิดว่านี่จะทำให้เวิร์กโฟลว์ของคุณง่ายขึ้น
klewis

Wow @klewis สิ่งนั้นปรากฏขึ้นเมื่อใด ไม่แน่นอนใน 9.3 เห็นดี!
Michael Stimson

4

อีกวิธีคือการใช้ MAP topology ฉันเคาะรหัส 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

1
หนึ่งสามารถปรับแต่งรหัสและรับขอบที่มีความจุ 1 ที่ปลายทั้งสองเพื่อหาเส้นที่ตัดการเชื่อมต่ออย่างสมบูรณ์หรือรูปแบบเช่น 1 ที่ 1 สิ้นสุดและ 2 ที่อื่น ๆ ขึ้นอยู่กับเครือข่ายฉันเดา?
Hornbydd

2

นี่เป็นบทความเก่า แต่ฉันคิดว่าวิธีที่ง่ายที่สุดคือ:

  1. ละลายคุณสมบัติโพลีไลน์ของคุณ
  2. ใช้จุดยอดคุณลักษณะเพื่อแต้มด้วยตัวเลือกห้อย
  3. เข้าร่วมโดยตำแหน่งเชิงพื้นที่คุณลักษณะรูปหลายเหลี่ยมดั้งเดิมของเลเยอร์จุดผลลัพธ์ ใช้ตัวเลือก "ตัดกันโดย"

ผลลัพธ์จะมีฟิลด์ "Count" สำหรับแต่ละบรรทัดในเลเยอร์ของคุณ หากการนับมีค่ามากกว่า 1 เส้นจะไม่ "เชื่อมต่อ" กับส่วนที่เหลือของบรรทัด

แนวคิด: ขั้นตอนที่ 2 ที่นี่สร้างจุดที่จุดยอดที่มีขอบเชื่อมต่อเดียว (หนึ่งบรรทัด "เข้า", ศูนย์ "ออกไป") เนื่องจากแต่ละบรรทัดภายในเครือข่าย "ที่เชื่อมต่อ" จะมีจุดสุดยอดดังกล่าวสูงสุด 1 เส้นเส้นที่มีมากกว่า 1 เส้นนั้นไม่ได้เป็นส่วนหนึ่งของเครือข่ายดังนั้นจึงไม่ใช่ "เชื่อมต่อ"


วิธีนี้ก่อให้เกิดผลบวกปลอมหลายอย่าง สมมติว่าถนนนำไปสู่ทางแยกที ส่วนบนของเสื้อจะมีจุดยอดสองจุดที่ห้อยอยู่ หากคุณใช้คุณสมบัติที่มีจำนวนสองจากนั้นตัดมันอีกครั้งด้วยเครือข่ายถนนสิ่งที่ไม่ได้สัมผัสคือเกาะ
woot

อันที่จริงจุดตัดที่สองที่ฉันเขียนไว้ด้านบนพบถนนที่แยกได้ มันจะไม่พบว่าเครือข่ายที่มีหลายส่วน
woot

1

นี่เป็นวิธีที่ฉันคิดขึ้นมาโดยใช้ความช่วยเหลือจากเพื่อนบางคนโดยใช้ Model Builder และ Gephi ขั้นตอนที่ 1 ArcModel สร้างตารางของลิงก์ / ขอบ (เพิ่มโหนดในทุก ๆ บรรทัดที่ทับซ้อนกันถ้าต้องการ) ขั้นตอนที่ 2 การนำเข้าลิงค์ / ขอบ Gephi จากนั้นเพิ่ม ID ส่วนประกอบขั้นตอนที่ 3 ArcModel เพิ่ม ID คอมโพเนนต์กลับไปที่บรรทัดเดิม

Step1screenshot ขั้นตอนที่ 1 ใช้คุณลักษณะการป้อนข้อมูลทั้งหมดแยกออกที่จุดตัดเพื่อให้แน่ใจว่ามีโหนดเครือข่ายอยู่และสร้างตารางที่จะนำเข้าสู่ Gephi นี่คือขั้นตอน: กระบวนการ: คุณสมบัติถึงบรรทัด (สามารถรับได้หลายอินพุต) กระบวนการ: Multipart ถึง Singlepart กระบวนการ: ซ่อมแซมกระบวนการทางเรขาคณิต: เพิ่มจุดเริ่มต้นปลายประสาน (เพิ่มแอตทริบิวต์ทางเรขาคณิต) กระบวนการ: เพิ่มฟิลด์ "แหล่งที่มา" กระบวนการ: เพิ่มฟิลด์ "เป้าหมาย" กระบวนการ: คำนวณ "แหล่งที่มา" (เป็น startX & startY) กระบวนการ: คำนวณ "เป้าหมาย" (ตามสิ้นสุด X & endY) กระบวนการ: ลบเขตข้อมูล (ล้างเขตข้อมูลเพิ่มเติมเพื่อหลีกเลี่ยงความสับสน) กระบวนการ: ตาราง GDB เป็น CSV

Step2Gephi_Screenshot ขั้นตอนที่ 2 กระบวนการ Gephi (ดาวน์โหลดฟรี) - นำเข้าเอาต์พุต CSV พร้อมแหล่งที่มาและเป้าหมายชื่อโหนดฟิลด์เป็นลิงก์ - เรียกใช้คอมโพเนนต์ที่คำนวณเป็นไม่ได้บอกทิศทาง (ภายใต้เครื่องมือสถิติ) - ส่งออก CSV จากห้องปฏิบัติการข้อมูลสำหรับโหนด (รวมถึง ID โหนดและรหัสองค์ประกอบ)

ขั้นตอนที่ 3: ใช้เอาต์พุต Gephi และเพิ่มแอ็ตทริบิวต์ส่วนประกอบ / เครือข่ายไปยังบรรทัดต้นฉบับกระบวนการ: ตารางไปที่ตาราง (นำเข้า Gephi เอาต์พุตไปยัง Geodatabase เพื่อจัดโครงสร้าง objectID เฉพาะที่ไม่ซ้ำกัน) กระบวนการ: เข้าร่วมฟิลด์ (ค่าโหนดต้นทาง เป็นสัญลักษณ์ตามส่วนประกอบ

การล้างข้อมูลหลังจากจุดนี้น่าจะเป็นกระบวนการตรวจสอบด้วยตนเองในกรณีที่การยกเลิกการเชื่อมต่อเกิดขึ้นตามเส้นและหากการยกเลิกการเชื่อมต่อเป็นการแยกข้อมูลในโลกแห่งความจริงที่ถูกต้องหรือมีข้อบกพร่องของข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.