ArcMap'te çizgi şekil dosyasının "bağlılığını" kontrol ediyor musunuz?


9

ArcMap'te bir yol ağını temsil etmek için kullanılan bir çizgi şekil dosyasını devraldım. Sorun şu ki, karayolu ağı oldukça büyük ve benim için imkansız:

  1. Her satırın ucunun (yol bölümleri) bir kenara, tepe noktasına veya başka bir satırın sonuna (yol bölümü) "bağlı" olup olmadığını belirtin; ve
  2. Tüm yol ağının "bağlı" olup olmadığını söyle - yani, yol ağındaki herhangi bir noktadan yol ağındaki başka bir noktaya kadar bir rota izleyebilir miyim?

ArcMap'te bunu başarmanın bir yolu var mı? Yani, diğer çizgi parçalarına bağlanmayan çizgi parçalarını vurgulamama izin verecek bir fonksiyon var mı, yoksa yukarıdaki iki soruya cevap vermeme izin verecek benzer bir şey var mı?

Yanıtlar:


14

Evet, ama bir çeşit. ArcGis artık kullanıcının uçlarında (düğümlerde) kaç arkın (çizgilerin) bağlı olduğunu söyleyebilmesini sağlayan hat düğümü topolojisine sahip değil.

Kontrol etmek bir şey, ama bunun yerine düzeltmeye ne dersiniz? Özellik sınıfını ArcMap'te açar ve planarize çizgileri kullanır (tolerans verir) ve çizgiler kesişme noktasında yakalanır ve bölünür - çok iş tasarrufu sağlar. Çizgileri bölmek istemiyorsanız, Entegre aracını düşünün, ancak çok küçük bir tolerans kullanmaya dikkat edin, uçları birbirine yapıştıracaktır, ancak çizgilerin de birbirine yapışmasını sağlayabilir. Entegre kullanmadan önce verilerinizi yok edebileceği için yedek tutun !

Şimdi, bağlantısı kesilen uçları bulmak için uç noktaları almak için Özellik Noktalarını Noktalara kullanın ve sonra size mevcut bitiş noktalarının sayısı ile bir özellik sınıfı verecek olan Olayları Toplayın , bu aşamada 1 olayı şüphelidir, bu yüzden ayırmanız gerekir. bunlar dışarı.

O olmadığını çalışmak için gereken bağlanacak sonraki iştir, kullanım civarında Tablo üret (uygun bir tolerans ile tekrar) ve opsiyon yakın = TÜM sonra kullanarak, özgün çizgileri karşı 1 sayısı ile beraber olayları kullanarak Özet İstatistikleri bulabilirsiniz her bir nokta için IN_FID'i vaka alanı ve NEAR_FID istatistik türü "COUNT" olan istatistik alanı olarak kullanan kayıt sayısı.

Yakın tablodan çıkarmayı kolaylaştırmak için Tablo Seçimi kullanılarak 0'dan daha büyük bir mesafeye sahip kayıtlar . Her olay, onu oluşturan çizgiyi bulur, ancak mesafe 0 olur, başka bir hatta (tepe noktasında) düzgün şekilde bağlanırsa, mesafe de 0 olur, bu nedenle artık yakın tabloda kalan bir kaydı olan herhangi bir olay muhtemelen ayrıktır, ancak bunların manuel olarak görüntülenmesi gerekir.


Teşekkürler. Yarın işe gidip rapor verdiğimde bu işlevi kontrol edeceğim.
derNincompoop

3
"Vertice to Point Özelliği", Dangle Noktalarının çıktısını alma seçeneğine sahiptir. Bunun iş akışınızı kolaylaştıracağını düşünüyorum.
klewis

Vay be @klewis, ne zaman ortaya çıktı? Kesinlikle orada 9.3 değildi. İyi tespit!
Michael Stimson

4

Başka bir yaklaşım MAP topolojisini kullanmaktır. Sarkan kenarları belirleyecek olan bu biraz VBA kodunu devirdim. Eğer sarkan kenarları görürseniz içinde yerine beklenenden daha ağın uçları ağının daha sonra bir kopukluk olması gerekir.

Sarkan kenarları seçme örneği

Kod, VBA'nın kurulu olmasına, düzenleme modunda olmasına ve harita topolojisine çoklu çizgi katmanı eklemenize bağlıdır.

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

Bu kodu beğendim, sakıncası yoksa bunun birkaç bitini kopyalayacağım; Bu şekilde yapmanın yararı, canlı olması ve hatalar giderildikçe ortadan kaybolmalarıdır, kötü kısım, bir çizgi sarkıyorsa, gösteriliyor - bir ucun bağlı olup olmadığı veya hattın tamamen kesilmiş olması. Eğer "değer" düğüm (kaç bağlı hatları) veya sadece sarkan düğümleri (bu benim iş istasyonu tekrar çıkıyor!) Düğüm görüntülemek görüntülemek için kod değiştirebilir miyim ... Bu harika olurdu ... ama sadece OP VBA / VB.net özelliğine sahiptir.
Michael Stimson

1
Bir kod tweak ve tamamen bağlantısı kesilmiş bir çizgi bulmak için her iki ucunda 1 değerlik kenarları olsun, ya da 1 ucunda 1 ve diğer 2 gibi varyasyonlar, sanırım ağa bağlıdır?
Hornbydd

2

Bu eski bir yazı, ama bence en basit çözüm:

  1. Çoklu çizgi özelliğinizi çözme
  2. Dangle seçeneğiyle Unsur Noktalarını Noktalara Kullan
  3. Mekansal Katıl Orijinal çoklu çizgi özelliğini ortaya çıkan noktalar katmanına yerleştirin. "Kesiştiği nokta" seçeneğini kullanın.

Sonuç, katmanınızdaki her satır için bir "Sayım" alanına sahip olacaktır. Sayım 1'den büyükse, satır satırların geri kalanına "bağlı değildir".

Kavramsal olarak: Buradaki 2. Adım, tek bağlantılı kenarı olan köşe noktalarında noktalar oluşturur (bir çizgi "giriyor", sıfır "çıkıyor"). "Bağlı" ağdaki her satırda en fazla 1 bu tepe noktası olacağından, 1'den fazla olan herhangi bir satır ağın bir parçası değildir ve bu nedenle "bağlı" değildir.


Bu yöntem birçok yanlış pozitif üretir. Diyelim ki bir yol T kavşağına gidiyor. T'nin üst kısmında iki sarkan köşe olacaktır. Özellikleri iki sayıyla alır ve daha sonra yol ağıyla tekrar kesişirseniz, dokunmayanlar adalardır.
woot

Aslında, yukarıda yazdığım ikinci kesişme sadece izole yolları bulur. Ağın birden fazla parçası olup olmadığını
öğrenmez

1

Model Builder ve Gephi kullanarak bazı arkadaşlarımın yardımıyla bulduğum bir yöntem. Adım 1 ArcModel bağlantı / kenar tablosu oluşturma (istenirse her satır çakışmasına düğüm ekleme) Adım 2 Bağlantıları / kenarları Gephi içe aktarma ve ardından bileşen kimliklerini ekleme Adım 3 ArcModel bileşen kimliklerini orijinal hatta geri ekler

Step1screenshot Adım 1 Tüm giriş özelliklerini alır, bir ağ düğümü bulunduğundan emin olmak için bunları kavşaklara böler ve Gephi'ye aktarılacak bir tablo oluşturur. Adımlar şunlardır: İşlem: Özellik Satırına (birden çok girdi alabilir) İşlem: Tek Parçalı Çok Parçalı İşlem: Onarım Geometri İşlemi: Başlangıç ​​Bitiş koordinatları ekle (Geometri nitelikleri ekle) İşlem: Alan Ekle "Kaynak" İşlem: Alan Ekle "Hedef" İşlem: "Kaynak" hesapla (startX & startY olarak) İşlem: "Hedef" hesapla (X ve endY sonunda) İşlem: Alanları sil (karışıklığı önlemek için fazladan alanları temizle) İşlem: GDB Tablosundan CSV'ye

Step2Gephi_Screenshot Adım 2 Gephi süreci (ücretsiz indirme) - Bağlantı olarak Kaynak ve Hedef olarak adlandırılan düğüm alanlarıyla CSV çıktısını içe aktarma - Hesaplanan Bileşenleri Yönlendirilmemiş Olarak Çalıştır (İstatistik araçları altında) - Düğümler için Veri Laboratuvarı'ndan CSV'yi dışa aktarma (düğüm kimliği ve bileşen kimliği dahil)

Adım 3: Gephi çıktısını alır ve orijinal satırlara bileşen / ağ niteliği ekler İşlem: Tablodan Tabloya (benzersiz nesne kimliklerini yapılandırmak için Gephi çıktısını Geodatabase'e alın) İşlem: Birleştirme Alanı (Bileşen numarasını satırlara doldurmak için Gephi çıktısıyla birleştirilen kaynak düğüm değerleri) Bileşene göre sembolize etme

Bu noktadan sonra yapılan temizleme, büyük olasılıkla bağlantı kesilmelerinin hatlar boyunca nerede meydana geldiğini ve bağlantı kesmenin geçerli bir gerçek dünya ayrımı mı yoksa sadece bir veri hatası mı olduğunu incelemek için manuel bir işlem olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.