2014-01-15 5 views
-1

У меня есть сеть дорог с некоторыми обвисшими узлами и некоторыми зацикленными дорогами. Я удалил болтающиеся дороги, и теперь я также хочу удалить зацикленные дороги. Может ли кто-нибудь сказать мне мотыгу, могу ли я это сделать. Заранее спасибо (:Извлечение автодорожной сети в ArcGIS

ответ

0

1) Нахождение петель в сети автомобильных дорог: Для дорог, которые образуют 3/4 петли используют формулу извилина (расстояние между концами линии/длина). Формула Питон:

!Shp_lngth!/math.pow(math.pow(!X_Start! - !X_End! , 2) + math.pow(!Y_Start! - !Y_End!, 2), 0.5) > 2 

Для петель, которые только в конце дороги (как Тупик луковиц) использовать инструмент Создать маршрут и найти дороги со значениями MMonotonicity, которые 4 или выше.

2) Нахождение Висячие Узлы в дорожной сети: Используйте этот код

using System; 
using System.Collections.Generic; 
using ESRI.ArcGIS.Geodatabase; 
using ESRI.ArcGIS.Carto; 
using System.Windows.Forms; 
using ESRI.ArcGIS.esriSystem; 
using ESRI.ArcGIS.EditorExt; 


namespace KalkulatorAddin 
{ 
    public class TestButton : ESRI.ArcGIS.Desktop.AddIns.Button 
    { 
     public TestButton() 
     { 
     } 

     protected override void OnClick() 
     { 
      try 
      { 
       Test(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

     protected override void OnUpdate() 
     { 
     } 
     public void Test() 
     { 
      var fSel = ArcMap.Document.FocusMap.get_Layer(0) as IFeatureSelection; 
      fSel.Clear(); 
      var dangleOids = GetDangleOids(); 
      if (dangleOids.Count > 0) 
      { 
       var oidarray = dangleOids.ToArray(); 
       fSel.SelectionSet.AddList(dangleOids.Count, ref oidarray[0]); 
      } 
      ((IActiveView)ArcMap.Document.FocusMap).Refresh(); 
     } 

     private List<int> GetDangleOids() 
     { 
      UID topoUiD = new UID(); 
      topoUiD.Value = "esriEditorExt.TopologyExtension"; 
      var topoExt = ArcMap.Application.FindExtensionByCLSID(topoUiD) as ITopologyExtension; 
      var mapTopology = topoExt.CurrentTopology as IMapTopology; 
      if (mapTopology == null) 
       throw new Exception("map topology not found"); 

      //assume just one class in the map topology 
      var extent = ((IGeoDataset)mapTopology.get_Class(0)).Extent; 
      mapTopology.Cache.Build(extent, false); 

      var dangleOids = new List<int>(); 
      var nodes = mapTopology.Cache.Nodes; 
      nodes.Reset(); 
      ITopologyNode node; 
      while ((node = nodes.Next()) != null) 
      { 
       // sometimes degree is referred to as valence 
       if (node.Degree == 1) 
       { 
        var parents = node.Parents; 
        parents.Reset(); 
        int oid = parents.Next().m_FID; 
        if (!dangleOids.Contains(oid)) 
         dangleOids.Add(oid); 
       } 
      } 
      return dangleOids; 
     } 
    } 
} 
Смежные вопросы