Suite

Vérification de la "connexité" du fichier de formes de ligne dans ArcMap ?

Vérification de la


J'ai hérité d'un fichier de formes de lignes dans ArcMap qui est utilisé pour représenter un réseau routier. Le problème est que le réseau routier est assez vaste et il m'est impossible de :

  1. Indiquez si la fin de chaque ligne (segments de route) est « connectée » à une arête, un sommet ou la fin d'une autre ligne (segment de route ); et
  2. Indiquer si l'ensemble du réseau routier est « connecté » - c'est-à-dire, puis-je tracer un itinéraire depuis n'importe quel point du réseau routier vers n'importe quel autre point du réseau routier ?

Existe-t-il un moyen d'y parvenir dans ArcMap ? Autrement dit, existe-t-il une fonction qui me permettra de mettre en évidence des segments de ligne qui ne se connectent pas à d'autres segments de ligne, ou quelque chose de similaire qui me permettrait de répondre aux deux questions ci-dessus ?


Oui, mais en quelque sorte. ArcGis n'a plus de topologie ligne-nœud qui permet à l'utilisateur de dire combien d'arcs (lignes) sont connectés à leurs extrémités (nœuds).

Vérifier est une chose, mais que diriez-vous de réparer à la place ? Si vous ouvrez la classe d'entités dans ArcMap, puis utilisez aplanir les lignes (donnez une tolérance) et les lignes seront capturées et divisées à l'intersection - économise beaucoup de travail. Si vous ne voulez pas diviser les lignes, envisagez l'outil Intégrer mais veillez à utiliser une très petite tolérance, il accrochera les extrémités ensemble mais peut également aligner les lignes. Avant d'utiliser Intégrer garder une sauvegarde car cela peut détruire vos données !

Maintenant, pour trouver des extrémités déconnectées, utilisez Feature Vertices to Points pour obtenir les points d'extrémité, puis Collectez les événements qui vous donneront une classe d'entités avec le nombre de points d'extrémité présents. À ce stade, tout événement de 1 est suspect, vous devrez donc vous séparer. ceux-ci.

Pour déterminer s'il devrait être connecté est la tâche suivante, utilisez Générer une table proche (à nouveau avec une tolérance appropriée) et l'option de le plus proche = TOUS en utilisant les événements avec un décompte de 1 par rapport aux lignes d'origine, puis en utilisant les statistiques récapitulatives, vous pouvez trouver pour chaque point le nombre d'enregistrements en utilisant IN_FID comme champ de cas et NEAR_FID comme champ de statistiques avec un type de statistique de "COUNT".

Pour faciliter l'extraction de la table proche les enregistrements avec une distance supérieure à 0 en utilisant Table Select. Chaque événement trouvera la ligne qui l'a généré mais la distance sera 0, s'il est correctement attaché à une autre ligne (à un sommet) la distance sera également 0, donc maintenant tout événement qui a un enregistrement restant dans la table proche est éventuellement disjoints mais ceux-ci devront être visualisés manuellement.


Une autre approche consiste à utiliser la topologie MAP. J'ai renversé ce morceau de code VBA qui identifierait les bords pendants. Si vous voyez des bords pendants dans le réseau plutôt que l'attendu prend fin du réseau, il doit y avoir une déconnexion.

Le code dépend de l'installation de VBA, du mode édition et de l'ajout de la couche polyligne à la topologie de la carte.

Public Sub SelectDanglingPolylines() ' Description : prend un jeu de données polyligne et sélectionne toutes les polylignes pendantes. : Les grands ensembles de données prennent beaucoup de temps pour créer le cache et peuvent même échouer."Auteur : Duncan Hornby 'Créé : 12/11/2011"Obtenir la carte puis la première couche, doit être de type polyligne Dim pMXDocument As IMxDocument Set pMXDocument = ThisDocument Dim pMap As IMap Définir pMap = pMXDocument.FocusMap Dim pLayer As ILayer Définir pLayer = pMap.Layer(0) Dim pFeatureLayer As IFeatureLayer Définir pFeatureLayer = pLayer Dim pFeatureClass As IFeatureClass Définir pFeatureClass = pFeatureLayer.FeatureClassly Puis "Ce code ne fonctionne qu'avec les polylignes !", vbExclamation, "Type de données incorrect au niveau de la couche 0" Exit Sub End If ' Obtenir l'éditeur et l'extension de topologie Dim pEditor As IEditor Dim pID As New UID Dim pTopologyExtension As ITopol ogyExtension Dim pTEID As New UID pID = "esriEditor.editor" Set pEditor = Application.FindExtensionByCLSID(pID) pTEID = "esriEditorExt.TopologyExtension" Set pTopologyExtension = Application.FindExtensionByCLSID(pTEIDs'ThenExtension) If SubCurrentTopologyExtension. La topologie MAP n'est pas une topologie de géodatabase Dim pMapTopology As IMapTopology If TypeOf pTopologyExtension.CurrentTopology Is IMapTopology Then Set pMapTopology = pTopologyExtension.MapTopology Else ' Pas une topologie de carte Exit Sub End If ' Ceci est la collection As New que FID est ajoutée Build cache Application.StatusBar.Message(0) = "Création du cache MAP TOPOLOGY, cela peut prendre beaucoup de temps sur des ensembles de données volumineux… " DoEvents Dim pGeoDataset As IGeoDataset Set pGeoDataset = pFeatureClass Dim pEnvelope As IEnvelope Set pEnvelope = pGeoDataset.Extent pMacheapTopology. .Build pEnvelope, False ' Identifiez les nœuds pendants et ajoutez le FID polyligne à la collection Application.StatusBar.Message(0) = "Identi en éliminant les nœuds pendants… " DoEvents Dim pEnumTopologyParent As IEnumTopologyParent Dim pTopologyNode As ITopologyNode Dim pEnumTopologyNode As IEnumTopologyNode Set pEnumTopologyNode = pMapTopology.Cache.Nodes pEnumTopologyNodeopT de pEnumTopologyNode. a 1 degré il n'a qu'une seule polyligne parent Set pEnumTopologyParent = pTopologyNode.Parents pEnumTopologyParent.Reset aColl.Add (pEnumTopologyParent.Next.m_FID) 'Ajoute la polyligne FID à la collection End If Set pTopologyNode = pEnumTopologyNode Application.Next Wend polylines' .StatusBar.Message(0) = "Sélection de polylignes… " 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 esriView, NothingGeoView pEnvelope Application.StatusBar.Message(0) = "" DoEvents End Sous

C'est un vieux post, mais je pense que la solution la plus simple est de :

  1. Dissoudre votre entité polyligne
  2. Utiliser les sommets d'entités aux points avec l'option Dangle
  3. Joignez par emplacement spatial l'entité polyligne d'origine à la couche de points résultante. Utilisez l'option "Intersectée par elle".

Le résultat aura un champ "Count" pour chaque ligne de votre calque. si le Count est supérieur à 1, la ligne n'est pas "connectée" au reste des lignes.

Conceptuellement : l'étape 2 crée ici des points aux sommets avec une seule arête connectée (une ligne « entrée », zéro « sortie »). Étant donné que chaque ligne du réseau "connecté" aura au plus 1 tel sommet, toute ligne avec plus de 1 ne fait pas partie du réseau et n'est donc pas "connectée".


Voici une méthode que j'ai trouvée, avec l'aide de quelques amis, en utilisant Model Builder et Gephi. Étape 1 ArcModel créant une table de liens/arêtes (ajout de nœuds à chaque chevauchement de ligne si vous le souhaitez) Étape 2 Importation Gephi des liens/arêtes puis ajout des ID de composant Étape 3 ArcModel ajoute les ID de composant à la ligne d'origine

Étape 1 Prend toutes les entités en entrée, les divise aux intersections pour s'assurer qu'un nœud de réseau est présent et crée une table à importer dans Gephi. Voici les étapes : Processus : Entité en ligne (peut prendre plusieurs entrées) Processus : Multipartie en une seule partie Processus : Réparer la géométrie Processus : Ajouter les coordonnées de début et de fin (Ajouter des attributs de géométrie) Processus : Ajouter le champ « Source » Processus : Ajouter le champ « Cible » Processus : Calculer la « Source » (comme startX et startY) Processus : Calculer la « Cible » (comme end X et endY) Processus : Supprimer les champs (nettoyer les champs supplémentaires pour éviter toute confusion) Processus : Table GDB en CSV

Étape 2 Processus Gephi (téléchargement gratuit) -Importez la sortie CSV avec les champs de nœud nommés Source et Target en tant que liens -Exécutez les composants calculés comme non dirigés (sous Outils statistiques) -Exportez le CSV depuis Data Laboratory pour les nœuds (incluez l'ID de nœud et l'ID de composant)

Étape 3 : Prend la sortie Gephi et ajoute l'attribut de composant/réseau aux lignes d'origine Processus : Table à Table (ingérer la sortie Gephi dans la géodatabase pour structurer les ID d'objet uniques) Processus : Join Field (Valeurs de nœud source jointes à la sortie Gephi pour remplir le numéro de composant aux lignes) Symboliser par composant

Le nettoyage après ce point sera probablement un processus manuel consistant à examiner où les déconnexions se produisent le long des lignes et si la déconnexion est une séparation valide du monde réel ou simplement un défaut de données.